2016-04-18 8 views
0

私は次のコードを書いています。これは、21から21までの値を別のシートの最後の行にルックアップし、このシートの列Aおよび他のシートの列Bにある。行と列をループしているときのインデックス/マッチ

以下のコードを使用すると、ワークシートエラーが発生します。理由を教えてください。

Dim wsMvOld As Worksheet 
Dim wsMvFile As Worksheet 
Dim wsColumn As Long 
Dim lastColumn As Long 
Dim y As Integer 
Dim i As Integer 
Dim FrRngCount As Range 

Set wsMvOld = wbMVRVFile.Worksheets(2) 

wbMVRVFile.Worksheets.Add().Name = "MV " & Format(DateSerial(Year(Date), Month(Date), 0), "dd-mm-yy") 

Set wsMvFile = wbMVRVFile.ActiveSheet 

Set FrRngCount = wsMvFile.Range("A:A") 
y = Application.WorksheetFunction.CountA(FrRngCount) 

lastColumn = wsMvFile.Cells(1, wsMvFile.Columns.Count).End(xlToLeft).Column 

For wsColumn = 21 To lastColumn 
For i = 2 To y 
    wsMvFile.Columns(wsColumn).Cells(i) =  Application.Index(wsMvOld.Range(wsColumn), Application.Match(wsMvFile.Range("A" & i), wsMvOld.Range("B:B"), 0)) 
Next i 

Next wsColumn 

End Sub 

ありがとうございました!

+0

'index'の前に' WorksheetFunction'を忘れましたか?しかし、実際にはなぜVBA XDのワークシート機能を使用しているのですか – findwindow

+0

私はそれを試してみましょう。私がワークシート関数を使用しているのは、もっと良い解決策がわからないからです。助言がありますか? –

+0

'find'を探しますか? – findwindow

答えて

3

これはテストされていませんが、ワークシート関数をvba findメソッドに置き換えます。

Private Sub Worksheet_Activate() 
Dim wsMvOld As Worksheet 
Dim wsMvFile As Worksheet 
Dim wsColumn As Long 
Dim lastColumn As Long 
Dim y As Integer 
Dim i As Integer 
Dim FrRngCount As Range 

Set wsMvOld = wbMVRVFile.Worksheets(2) 

Set wsMvFile = wbMVRVFile.Worksheets.Add() 
wsMvFile.Name = "MV " & Format(DateSerial(Year(Date), Month(Date), 0), "dd-mm-yy") 



Set FrRngCount = wsMvFile.Range("A:A") 
y = Application.WorksheetFunction.CountA(FrRngCount) 

lastColumn = wsMvFile.Cells(1, wsMvFile.Columns.Count).End(xlToLeft).Column 


For i = 2 To y 
    Dim rng As Range 
    Set rng = sMvOld.Range("B:B").Find(wsMvFile.Range("A" & i)) 
    For wsColumn = 21 To lastColumn 
     If Not rng Is Nothing Then 
      wsMvFile.Columns(wsColumn).Cells(i).Value = wsMvOld.Cells(rng.Row, wsColumn) 
     Else 
      wsMvFile.Columns(wsColumn).Cells(i).Value = 0 
     End If 
    Next wsColumn 
Next i 


End Sub 
+0

良いニュースは、エラーが消えたということです。しかし、マクロには現在多くの時間がかかり、列を埋めるようには見えません。どんな考え? –

+0

編集を試してみましょうループを反転しました。今度は、行が真である場合にのみ列をループします。 –

+0

はい、今は動作します。あまりにもScottに感謝します。値が他のシートに見つからない場合はゼロを表示したい場合は、ループを簡単に修正する方法はありますか? –

関連する問題