2

我的问题已被一遍又一遍地回答,但我不了解解决方案,因此无法自定义它们以满足我的需求。

这是 StackOverflow Loop 上的解决方案的链接,通过 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)
4

2 回答 2

4

为了了解循环在做什么,您需要监视正在处理的内容。您可以通过更改单元格的颜色或在行中添加边框来轻松做到这一点。

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

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),您应该对正在发生的事情有更好的了解。一旦你理解了它们,你就可以为你自己的循环修改它们。

于 2013-05-09T01:43:58.300 回答
1

我最近做了类似的事情(我实际上在两个不同的工作表上比较了多个单元格)并且是 VBA 的新手,但是我不是基于范围,而是基于特定行/列号的循环,我发现你不需要 .Activate用于读取或写入或更改单元格(我使用以下方法代替 .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).Value”,则可以添加更多“临时”数据对象(例如 someDataToCopy2)以对应如所须。如果您对代码的作用有任何疑问,请告诉我!

于 2013-05-08T21:54:50.067 回答