有点背景,我的表“数据”包含一个表格,我的宏应该填充该表格。该表的日期包含第一列(P列),以及一些名称作为标题。我的当前宏,如下所示,循环遍历我的所有页面,除了指定不循环的页面,然后在每个页面中循环遍历W7:W200范围内的每个单元格。然后,它将单元格中右侧的10个值与表单“Data”中P列中的日期相匹配(并将该行设置为HdrRow)。同时,为了将该值匹配到表“数据”中的列标题(并将该列设置为HdrCol),它会在它正在循环的任何表中查找A9中的值。在找到行和列(相交单元)后,宏然后将它正在循环的单元的值粘贴到相交单元中。Excel VBA根据两栏中的条件找到行号,没有循环
我遇到了这个下一部分的麻烦,我正在寻找添加另一个查找行的标准。我希望宏不仅能够在列P中找到匹配的日期,而且还可以在列Q中找到与其循环中的任何一个表中的值A1匹配的值;然后将该行设置为HdrRow。如果可能的话,id喜欢不使用循环。
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更新;希望这会让你得到你需要的地方! – Cyril