我的问题一再被回答,但我不理解这些解决方案,因此无法根据我的需要对其进行定制。
这是指向StackOverflow Loop through each row of a range in Excel上的解决方案的链接。
Dim rng As Range
Dim row As Range
Dim cell As Range
Set rng = Range("A2:b22")
For Each row In rng.Rows
For Each cell in row.Cells
'Do Something
MsgBox cell
Next cell
Next row
这是我应该进入循环的代码。它应该取第一列的值,复制数据,然后取第二列的值并粘贴数据。
它正在做的是使用第1列中的相同值。那么CELL的价值在什么时候从A2变为B2?
Windows("UnitedOrig.xlsx").Activate
Sheets(CurYearTxtPRAC).Select
Range("A4:U4").Select
ColumnFROM = MyColumnLetter(Cells.Find(What:=cell, After:=ActiveCell,
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Column)
Range(ColumnFROM & "5:" & ColumnFROM & LastRowPRAC).Select
Selection.Copy
Windows("United.xlsx").Activate
Sheets("PRACS").Select
Range("A1:U1").Select
ColumnTO = MyColumnLetter(Cells.Find(What:=cell, After:=ActiveCell,
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Column)
答案 0 :(得分:3)
为了理解循环正在做什么,您需要监视正在处理的内容。您可以通过更改单元格的颜色或向行添加边框来轻松完成此操作。
将这两个潜艇粘贴到模块中:
Sub WhereInDoubleLoop()
Dim rng As Range
Dim row As Range
Dim cell As Range
Set rng = Range("A1:D5")
For Each row In rng.Rows
' Do something to the row
row.BorderAround xlContinuous, xlThin, vbBlack
For Each cell In row.Cells
' Do something to the cell
cell.Interior.Color = vbYellow
Next cell
Next row
End Sub
Sub WhereInSingleLoop()
Dim rng As Range
Dim cell As Range
Set rng = Range("A1:D5")
For Each cell In rng
' Do something to the cell
cell.Interior.Color = vbGreen
Next cell
End Sub
逐步完成每个循环(代码编辑器中的F8),您应该更好地了解正在发生的事情。一旦理解了它们,就可以为自己的循环修改它们。
答案 1 :(得分:1)
我最近做了类似的事情(我实际上对两个不同表格上的多个单元格进行了比较)并且是VBA的新手,但是我没有使用范围而是根据特定的行/列数来设置循环,而我发现你没有需要。激活读取或写入或更改单元格(以下方法我使用而不是.Select / .Activate使运行时间大约快300-400%)。这里有一些非常快速的伪代码,希望它们有意义并且应该可以根据需要轻松修改。
Dim oSheet As Excel.Worksheet, vSheet As Excel.Worksheet
Dim oRowCount As Integer, vRowCount As Integer
Dim oRow, vRow
Dim someDataToCopy As String
'Gets last row # for oSheet & vSheet
oRowCount = oSheet.Cells.SpecialCells(xlLastCell).row
vRowCount = vSheet.Cells.SpecialCells(xlLastCell).row
For oRow = 2 to oRowCount
someDataToCopy = oSheet.Cells(oRow, 4).Value 'Where 4 is an arbitrary column
For vRow = 2 to vRowCount
vSheet.Cells(vRow, 8).Value = someDataToCopy 'Where 8 is an arbitrary column
Next vRow
Next oRow
如果您不是每行复制一个单元格,而是每行复制多个单元格以及添加更多“= oSheet.Cells(oRow,x)”,您可以添加更多“临时”数据对象(例如someDataToCopy2)来对应.Value“根据需要。如果您对代码的作用有任何疑问,请与我们联系!