私は2つのワークブックがありますVBA値が一致する別のブックに値をコピーしますか?
"LO配達追跡者"
Col A
01/01/2017
02/01/2017
15/01/2017
15/03/2017
12/03/2017
そして、 "報告書" と呼ばれる別のワークブックを
私は「LO配信のシート1で私のコラムを検索したいA1 = 01 Column E
A2 = 2017
セルA1の月とセルA2の年と一致する日付の「トラッカー」を「レポート」ワークブックに表示します。
次に、 "L.O. Delivery Tracker"ワークブックの一致するすべての値を、 "Report"ワークブックのE列にコピーします。
望ましい結果:
Sub CopyBasedonSheet1()
'open workbook if not open
Dim WB As Workbook
On Error Resume Next
Set WB = Workbooks("L.O. Delivery Tracker.xlsm")
On Error GoTo 0
If WB Is Nothing Then
Set WB = Workbooks.Open("C:\Users\Mark O'Brien\Desktop\L.O. Delivery Tracker.xlsm")
End If
Dim i As Long
Dim j As Long
Sheet1LastRow = ThisWorkbook.Worksheets(2).Range("A" & Rows.Count).End(xlUp).Row
Sheet2LastRow = WB.Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row
For j = 1 To Sheet1LastRow
For i = 1 To Sheet2LastRow
If Month(WB.Worksheets(1).Cells(i, 4).Value) = ThisWorkbook.Worksheets(1).Range("O8").Value Then
ThisWorkbook.Worksheets(2).Cells(j).Value = WB.Worksheets(1).Cells(i, 1).Value
Else
End If
Next i
Next j
End Sub
を私はブランドのVBAに新たなんだと私はイムは、この間違っているかなり確信している:
Column E
01/01/2017
02/01/2017
15/01/2017
ここで私が試したものです。誰かが私がどこに間違っているのかを教えてもらえますか?編集2 @Shaiラドーによって
Option Explicit
Sub CopyBasedonSheet1()
Dim WB As Workbook
Dim i As Long
Dim j As Long
Dim LastRow As Long
On Error Resume Next
Set WB = Workbooks("L.O. Lines Delivery Tracker.xlsm")
On Error GoTo 0
If WB Is Nothing Then 'open workbook if not open
Set WB = Workbooks.Open("G:\WH DISPO\(3) PROMOTIONS\(18) L.O. Delivery Tracking\L.O. Lines Delivery Tracker.xlsm")
End If
With WB.Worksheets(1)
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
j = 1
For i = 1 To LastRow
If CInt(ThisWorkbook.Worksheets(1).Range("F9").value) = Month(WB.Worksheets(1).Range("A" & i).value) Then ' check if Month equals the value in "A1"
If CInt(ThisWorkbook.Worksheets(1).Range("F10").value) = Year(WB.Worksheets(1).Range("A" & i).value) Then ' check if Year equals the value in "A2"
ThisWorkbook.Worksheets(2).Range("E" & j).value = WB.Worksheets(1).Range("A" & i).value
j = j + 1
End If
End If
Next i
End With
End Sub
を提供するコードで
EDIT
:私はそれが配信トラッカーワークブック上でのカラムAをルックアップするためになっていた@Shaiラドーするには、[OK]を
を謝罪しかし、私の日付はB列にあった。
更新されたコードをご覧ください。今、私はこの行の型の不一致エラーを取得:
If CInt(ThisWorkbook.Worksheets(1).Range("F9").value) = Month(.Range("B" & i).value) Then ' check if Month equals the value in "A1"
コード
Option Explicit
Sub CopyBasedonSheet1()
Application.ScreenUpdating = False
Dim app As New Excel.Application
app.Visible = False 'Visible is False by default, so this isn't necessary
Dim WB As Workbook
Dim i As Long
Dim j As Long
Dim LastRow As Long
On Error Resume Next
Set WB = Workbooks("L.O. Lines Delivery Tracker.xlsm")
On Error GoTo 0
If WB Is Nothing Then 'open workbook if not open
Set WB = Workbooks.Open("G:\WH DISPO\(3) PROMOTIONS\(18) L.O. Delivery Tracking\L.O. Lines Delivery Tracker.xlsm")
End If
With WB.Worksheets(1)
LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
j = 1
For i = 1 To LastRow
If CInt(ThisWorkbook.Worksheets(1).Range("F9").value) = Month(.Range("B" & i).value) Then ' check if Month equals the value in "A1"
If CInt(ThisWorkbook.Worksheets(1).Range("F10").value) = Year(.Range("B" & i).value) Then ' check if Year equals the value in "A2"
ThisWorkbook.Worksheets(2).Range("E" & j).value = .Range("B" & i).value
j = j + 1
End If
End If
Next i
End With
Application.ScreenUpdating = True
End Sub
EDIT 3:
ます。Option Explicit:
@Shaiラドー、コードは現在このようになります。
Sub CopyBasedonSheet1()
Dim WB As Workbook
Dim i As Long
Dim j As Long
Dim LastRow As Long
On Error Resume Next
Set WB = Workbooks("L.O. Lines Delivery Tracker.xlsm")
On Error GoTo 0
If WB Is Nothing Then 'open workbook if not open
Set WB = Workbooks.Open("G:\WH DISPO\(3) PROMOTIONS\(18) L.O. Delivery Tracking\L.O. Lines Delivery Tracker.xlsm")
End If
' ======= Edit #2 , also for DEBUG ======
With WB.Worksheets(1)
LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
j = 1
For i = 1 To LastRow
' === For DEBUG ONLY ===
Debug.Print CInt(ThisWorkbook.Worksheets(1).Range("F9").value)
Debug.Print Month(.Range("B" & i).value)
Debug.Print CInt(ThisWorkbook.Worksheets(1).Range("F10").value)
Debug.Print Year(.Range("B" & i).value)
If CInt(ThisWorkbook.Worksheets(1).Range("F9").value) = Month(.Range("B" & i).value) Then ' check if Month equals the value in "A1"
If CInt(ThisWorkbook.Worksheets(1).Range("F10").value) = Year(.Range("B" & i).value) Then ' check if Year equals the value in "A2"
MsgBox "OK, Passed the 2 Ifs"
ThisWorkbook.Worksheets(2).Range("E" & j).value = .Range("B" & i).value
j = j + 1
End If
End If
Next i
End With
End Sub
元のブック、配信トラッカー、(私は日付をコピーしています):
列
ブックへのコピーのフォーマット:レポート、シート1 セルF9とF10が含まれています< --- F9とF10の両方が明らかに数値形式です。
コピーブックには:レポート、シート2(iは、列Eに貼り付けデータを必要とする場合)ワークシートの列A内のすべての値を介して
コードがエラーをスローしていますか?どのように機能しないのですか?また、 'Rows.Count'、' Columns.Count'、 'Cells()'などを使うときは、それを実行したいワークシートで修飾する必要があります。それ以外の場合は実行されます予期しない値を返すActiveSheet – BruceWayne
レポートのブック内でマクロを実行していると仮定すると、BruceWayneの説明どおりにシートやワークブックを指定する必要があります。その場合、検証と貼り付けのたびにレポートブックを呼び出す必要はありません。状況をもう少し詳しくご説明ください。 – jsanchezs