遍历2列的范围

我的问题已经得到了回答,但我不明白这些解决scheme,因此无法对其进行定制以适应我的需求。

这里是一个链接到一个解决scheme的StackOverflow 循环通过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 

这是我的代码应该在循环内。 它应该取第一列的值,复制数据,然后取第二列的值并粘贴数据。

它所做的是从第一列使用相同的值。 那么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) 

为了理解循环在做什么,你需要监视正在处理的内容。 您可以通过更改单元格的颜色或向该行添加边框来轻松完成此操作。

将这两个子粘贴到一个模块中:

 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),你应该更好地理解到底发生了什么。 一旦你了解了他们,你可以修改他们为你自己的循环。

我最近做了类似的事情(我实际上做了两个不同的工作表的多个单元格的比较),并且是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 

你可以添加更多的'临时'数据对象(例如someDataToCopy2)来对应,如果你不仅复制每行一个单元格,而是每行多个单元格以及添加更多“= oSheet.Cells(oRow,x).Value”如所须。 让我知道如果你有什么代码是在做什么问题!