これで、基本的にvlookupのように動作し、ワークシート2の列Aの同じ値に対して列Aのセルでセルを検索し、すべての情報をコピーしますその行のワークシート1の最初の列に移動します。VBA .Findオブジェクト変数が設定されていませんエラー
基本的に私は何をしているのか分かりませんが、約95%の機能があります。私の唯一の問題は、ワークシート1の列Aの値をワークシート2の列Aで見つけることができなくなることです。次の値にスキップするにはどうすればよいですか?
私の場合...他にも、その値をスキップする必死の試みがありましたが、明らかに機能しませんでした。
Sub ProLookUp()
Dim ColALastRow As Long
Dim ColALastRow2 As Long
ColALastRow = Worksheets(1).Columns("A:A").End(xlDown).Row
MsgBox ColALastRow
ColALastRow2 = Worksheets(2).Columns("A:A").End(xlDown).Row
MsgBox ColALastRow2
Dim i As Long
Dim Pro As String
Dim Pro2 As Long
For i = 1 To ColALastRow
Pro = Worksheets(1).Cells(i, 1).Value
'With Worksheets(2).Range("A1:A" & ColALastRow2)' 'ignore this part'
With Worksheets(2).Range("A1:A10000")
'the below is where my issue is, once it finds a value in column A that it
'cannot match in sheet 2 it returns the error
'Object variable or With block variable not set
If Pro = .Find(Pro, LookIn:=xlValues).Value Then
Pro2 = .Find(Pro, LookIn:=xlValues).Row
Else
i = i + 1
End If
Dim LastColA As Integer
Dim CopyRange As Range
Dim a As Range
Dim b As Range
With Worksheets(2)
LastColA = .Cells(Pro2, .Columns.Count).End(xlToLeft).Column
Set a = .Cells(Pro2, 2)
Set b = .Cells(Pro2, LastColA)
Set CopyRange = Range(a, b)
End With
Dim PasteRange As Range
Dim LastColumnB As Integer
With Worksheets(1)
LastColumnB = .Cells(i, .Columns.Count).End(xlToLeft).Column
LastColumnB = LastColumnB + 1
Set PasteRange = .Cells(i, LastColumnB)
MsgBox PasteRange.Address
End With
Worksheets(2).Select
CopyRange.Select
Selection.Copy
Worksheets(1).Select
PasteRange.Activate
ActiveCell.PasteSpecial
End With
Next i
End Sub
うわー、ありがとうございます。それは完全に動作します。 –
@PeteUlrich答えにチェックマークをつけて、正しいものとしてマークしてください。質問を提出した人だけができることです。 –
更新しました。もう1つの質問ですが、ワークシート2の列Aが、ワークシート1の番号と一致しない番号全体を表示するようなサイズになっていない場合、その理由は何ですか?私は開始する前にその列のサイズを変更する行を含めるだけでいいですか? –