2016-05-29 2 views
0

アクティブなワークシートのセル値に基づいて別のシートの結果をコピーするマクロを実装しようとしています。:次いですなわちGWworkStations(内のすべての要素をループ)「の列Bに一致を見つける 『『コルリスト』』シート、および」E C」に対応する値をコピーMathedEntries "だから私はそれらをアクティブなシートにコピーすることができます。ただし、行番号を報告する代わりに、matchedRow "の空白が返されます。誰か助けてもらえますか?問題がどこにあるのかわからないのですか?このコードを実行するとエラーは発生しません。前もって感謝します。別のシートからのVBAの行の一致

dim MatchedEntries() as string 
dim GWworkStations() as variant 
number_of_rows = ActiveSheet.UsedRange.Rows.Count 

With ActiveWorkbook.Worksheets("New Sheet") 
GWworkStations() = range("B2:B" & number_of_rows)  

End With 

ReDim MatchedEntries(1 To r) 'Size the array to hold the results. 
'for every cell that is not empty in GWworkStations(), search through column B of 'Col List ' sheet. 
For i = 1 To number_of_rows 

'matchedRow = Empty 
On Error Resume Next 'Keep running if Excel MATCH function below doesn't find a match. 
If Not IsEmpty(Cells(i, 1)) Then 
    matchedRow = Application.WorksheetFunction.Match(GWworkStations(i, 1), range("Col List!B:B"), 0) 

    If matchedRow = Empty Then Debug.Print "Empty " & matchedRow 
    If IsEmpty(matchedRow) Then 'No match.   
     MatchedEntries(i, 1) = "" 'GWworkStations(i, 1) 
    Else 
    'If GWworkStations(i, 1) = GWworkStations(i - 1) Then 

     If IsNumeric(matchedRow) Then 'Match was found. 

      MatchedEntries(i, 1) = Application.WorksheetFunction.Index(range("List!C:E"), matchedRow, 1) 
     Else 'MATCH function returned a non-numeric result. 
      MatchedEntries(i, 1) = "" 
     End If 'IsNumeric(MatchedRow) 
    End If 'IsEmpty(MatchedRow) 
    Else 
End If 
Next i 
range("E2:G" & number_of_rows) = MatchedEntries() 'Write the tag name results out to range E:G. 

答えて

0

Excelでは、シート名のスペースが嫌いです。一重引用符(Range("'Col List'!B:B"))を使用するか、Range("Col List!B:B")Sheets("Col List").Columns(2)に置き換えることで修正できます。答えをどうもありがとうございました@arcadeprecint

matchedRow = Sheets("Sheet 3").Columns(2).Find(str).Row 
+0

はまた、(私が好む)Range.Findメソッドを使用することができます。 – Gudbahri

+0

@arcadeprecintマクロを変更して、別のシートの複数の出現箇所を検索し、隣接するセルをアクティブなシートにコピーする場合は、それを行う最善の方法は何でしょうか? – Gudbahri

+0

@ Gudbahriこれについて新しい質問を投稿する必要があります。しかし、異なるワークシートを参照することは困難ではありませんか?あなたはすでにあなたのコードでそれを行います。最初に試してみてください。上記のコードをもう一度見て、私はあなたに役立つ2つの緊急の提案をしています: 'Options Explicit'(googleの意味)を使用してください。一貫したコードを書くのに役立ちます。また、 'On Error Resume Next'を使用しないでください。また、少なくとも関連行の後で無効にしてください。それはあなたがエラーメッセージと非常に悪い習慣を得ない理由です! (もう一度、Googleの意味と使用方法) – arcadeprecinct

関連する問題