少しの背景で、シート「データ」はマクロが配置されるはずのテーブルで構成されます。この表には、最初の列(列P)を実行している日付と、ヘッダーとしていくつかの名前があります。私の現在のマクロは、ループスルーしないように指定されたものを除いて、すべてのシートをループし、各シートでW7:W200の範囲の各セルをループします。次に、セルの右側の10個の値と、シート「データ」の列Pの日付とを照合します(その行をHdrRowとして設定します)。同時に、シート "Data"の列ヘッダーにその値を一致させるために、ループしているシートでA9の値を探します(そしてその列をHdrColとして設定します)。行と列(交差するセル)を見つけた後、マクロはループしているセルの値をその交差するセルにペーストします。Excel VBAは2つの列(ループなし)の基準に基づいて行番号を見つけます。
私はこの次の部分で問題があります。行を検索するための別の基準を追加したいと考えています。私はマクロが列Pに一致する日付を見つけるだけでなく、それがループしているシートのA1の値と一致する列Qの値も探します。その行をHdrRowとして設定します。可能であれば、このためにループを使用しないようにしてください。
Sub Values()
Dim HdrCol As Range
Dim Site As String
Dim SearchRange As Range
Dim HdrRow As Range
Dim FinDate As Date
Dim ws As Worksheet
Dim rng As Range
' Fill in Actual Value
Sheets("Data").Range("W2:W100000").ClearContents
For Each ws In ActiveWorkbook.Worksheets
'Dont Copy Data from these worksheets
If ws.Name <> "Portfolio" And ws.Name <> "Master" And ws.Name <> "Template" _
And ws.Name <> "Coal" And ws.Name <> "E&P" And ws.Name <> "Gen" _
And ws.Name <> "Hydro" And ws.Name <> "LNG" And ws.Name <> "Midstream" _
And ws.Name <> "Solar" And ws.Name <> "Transmission" _
And ws.Name <> "Wind" And ws.Name <> "Data" Then
For Each cell In ws.Range("W7:W200")
If cell <> " " Then
Site = ws.Range("A9").Value
FinDate = Right(cell, 10)
'Find column ref
Set HdrCol = Sheets("Data").Range("P1:W1").find(Site, lookat:=xlPart)
If Not HdrCol Is Nothing Then
End If
'Find row ref
Set SearchRange = Sheets("Data").Range("P1", Range("P100000").End(xlUp))
Set HdrRow = SearchRange.find(FinDate, LookIn:=xlValues, lookat:=xlWhole)
Application.Goto Reference:=Cells(HdrRow.Row, HdrCol.Column)
If IsEmpty(Sheets("Data").Cells(HdrRow.Row, HdrCol.Column)) Then
cell.Copy Sheets("Data").Cells(HdrRow.Row, HdrCol.Column)
Else
cell.Copy Sheets("Data").Cells(HdrRow.Row, HdrCol.Column).End(xlDown).Offset(1, 0)
End If
End If
Next
End If
Next
End Sub
HdrRowが単なる数値であるこの方法を使用すると、HdrRow.Rowへの参照をすべてCells()内のHdrRowにすることができます。 – Cyril
あなたは正しいです、私は最終的にループが最良の方法だと思います。あなたのソリューションにループを含めることができるでしょうか? – Edp
@Edp Updated;うまくいけば、これはあなたがなる必要がある場所にあなたを取得します! – Cyril