2016-05-19 4 views
0

「延滞PO」ワークシートに含まれるデータと別の組織図「組織図」に含まれるデータを使用してワークブック「Vendor Management Simplified8」を取得しましたワークシートOrg Chart。データシートには、契約者を管理する人のリストがあります。これらの名前(この列には空白はありません)をループして、組織図内で名前を見つけて、General Managerの名前と部署を返し、これらの値を列NとOに戻します。名前は組織図にあります。これまでのところ、私はこれを持ってVBAで行番号を見つけて、値を持つ新しいセルを見つけるためにループを使用

...これまでのところ

Dim Cell As String 
Dim loopy As Integer 
Dim findrow As range 
Dim finddata As Integer 

loopy = 2 
Do Until Worksheets("Overdue PO").range("E" & loopy).VALUE = "" 'loops through the name of person managing contractor 
    Cell = Trim(Worksheets("Overdue PO").range("E" & loopy).VALUE) 'value which needs to be looked up 

'finds the row number where value is found 
    Set findrow = Worksheets("Organisation Chart").range("G:L").find(What:=Cell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False) 

    If findrow Is Nothing Then 
    Else: finddata = findrow.Row 
    End If 

     Do Until Worksheets("Organisation Chart").range("D" & finddata).VALUE <> "" 'if cell is not empty 
      If Worksheets("Organisation Chart").range("D" & finddata).VALUE = "" Then 
       finddata = finddata - 1 'go up the cells 
      End If 
     Loop 

    Worksheets("Overdue PO").range("0" & loopy).VALUE = Worksheets("Organisation Chart").range("D" & finddata).VALUE 'department 
    Worksheets("Overdue PO").range("N" & loopy).VALUE = Worksheets("Organisation Chart").range("D" & finddata - 1).VALUE 'general manager 
    loopy = loopy + 1 

Loop 

- それはそれは価値まで組織図内の行をループし、値を検索し、「findrow」内の行番号を返します。空白でない場合は、延滞POワークシートの列Oに部門を入力しようとすると、Worksheets("Overdue PO").range("0" & loopy).VALUE = Worksheets("Organisation Chart").range("D" & finddata).VALUE行にエラーが表示されます(ランタイムエラー1004 - アプリケーション定義またはオブジェクト定義エラーが表示されます)。

このエラーを表示するにはどうしたらよいですか?一般管理者と部門を見つけるために列をループする簡単な方法はありますか?事前に

感謝:)

+0

はその 'O'またはあなたがそのラインを持っているゼロですか? – Brian

+0

'with ... end with'ステートメントの使用を検討することもできます。 :-) – Brian

+0

ありがとう@ブライアン - 私はそんなに長い間それを見つめていた...私はそれがそんなに愚かな間違いだったとは信じられない!それは今うまく動作します、ありがとうございます:) – Amy

答えて

0

を使用しているコードがWithステートメントを使用して修正される:

Dim Cell As String 
Dim loopy As Integer 
Dim findrow As range 
Dim finddata As Integer 

loopy = 2 
Do Until Worksheets("Overdue PO").range("E" & loopy).VALUE = "" 'loops through the name of person managing contractor 
    Cell = Trim(Worksheets("Overdue PO").range("E" & loopy).VALUE) 'value which needs to be looked up 

    'finds the row number where value is found 
    With Worksheets("Organization Chart") 
     Set findrow = .range("G:L").find(What:=Cell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False) 

     If findrow Is Nothing Then 
     Else: finddata = findrow.Row 
     End If 

     Do Until .range("D" & finddata).VALUE <> "" 'if cell is not empty 
      If .range("D" & finddata).VALUE = "" Then 
       finddata = finddata - 1 'go up the cells 
      End If 
     Loop 

     Worksheets("Overdue PO").range("O" & loopy).VALUE = .range("D" & finddata).VALUE 'department 
     Worksheets("Overdue PO").range("N" & loopy).VALUE = .range("D" & finddata - 1).VALUE 'general manager 
     loopy = loopy + 1 
    End With 
Loop 
+0

@Brianありがとうございます - これは本当に良いことです。なぜなら、私はめったにそれをどうするのか分からないからです。 – Amy

+0

あなたが前に書いたコードで、あなたの問題があります。もしfindrowが何もないならば、 Else:finddata = findrow.Row End一致するものが見つからなくてもまだ値が入っているので、 – Amy

+0

私はそれを詳しく見なければならないでしょう。あなたがコピーできるサンプルデータを投稿できますか? – Brian

0

あなたはここでは0(ゼロ)ではなく、文字O.

+1

ありがとう@ギャリーエバンス - どのような愚かな間違いがハハ! – Amy

+0

誰かがあなたにこれに似たことをしたことがないと言ったら、彼らは嘘をついています。私は私の公正な分け前よりも確かにやった! –

0

私が持っていますそれをひっくり返した!私は

Dim Cell As String 
Dim loopy As Integer 
Dim findrow As range 
Dim finddata As Integer 

loopy = 2 

Do Until Worksheets("Overdue PO").range("E" & loopy).VALUE = "" 'loops through the name of person managing contractor 
    Cell = Trim(Worksheets("Overdue PO").range("E" & loopy).VALUE) 'value which needs to be looked up 

    'finds the row number where value is found 
    With Worksheets("Organisation Chart") 
     Set findrow = .range("G:L").find(What:=Cell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False) 

     If findrow Is Nothing Then 
     GoTo skiprecord 
     Else: finddata = findrow.Row 
     End If 

     Do Until .range("D" & finddata).VALUE <> "" 'if cell is not empty 
      If .range("D" & finddata).VALUE = "" Then 
       finddata = finddata - 1 'go up the cells 
      End If 
     Loop 

     Worksheets("Overdue PO").range("O" & loopy).VALUE = .range("D" & finddata).VALUE 'department 
     Worksheets("Overdue PO").range("N" & loopy).VALUE = .range("D" & finddata - 1).VALUE 'general manager 
skiprecord: 
     loopy = loopy + 1 
    End With 
Loop 

1 +愚か= SkipRecordは愚かに最後までスキップする後藤を入れてあなたの助けをありがとう:)

+0

素晴らしい!あなたはそれを把握してうれしい! :-) – Brian

関連する問題