2013-05-08 77 views
1

我的问题一直得到解答,但我不明白这些解决方案,因此无法对其进行定制以适合我的需求。循环显示2列的范围

以下是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 

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

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

我为格式道歉,我试着编辑它4次,我无法得到它的工作。 – lalachka 2013-05-08 19:58:07

+0

没问题。我修改了格式。你能给我们一个前后例子吗?即给我们2行样本表,然后向我们展示您的代码应该对它做些什么。 – PowerUser 2013-05-08 21:02:21

+0

确定)))) ORIGINALNAME \t发送MYNAME \t发送 PROV-ID \t ProvID LST-NM \t LN FST-NM \t FN MDL-NM \t MN 度\t度 PROV-SSN \t SSN TAXID \t TIN ADR-LN-I-TXT \t地址 ADR-CITY \t市 ADR-ST \t国家 ADR-ZIP \t ZIP ADR-ZIP4 \t ZIP4 ADR-县\t县 SPCL-DESC \t专业 AREA-CD(1)\t AREACODE TEL-NBR(1)\t电话 市场(1)\t市场 EFF-DT( 1)\t EffectiveDate 我只是想能够读取列 – lalachka 2013-05-08 22:12:02

回答

1

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

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

我最近做了类似的事情(我确实是在两个不同的表多个单元的比较),并相信新的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“。如果您对代码的功能有任何疑问,请告诉我们!

+0

我做))))它给我一个错误“对象变量或与块vatriable未设置”在第6行。 – lalachka 2013-05-08 22:09:41

+0

我提供的代码第6行是一个评论,所以我猜你有不同的东西。最可能发生的情况是,你没有调整你在'第6行'中使用的变量,或者你有一个缺少循环关闭语句(即End If或Wend) – 2013-05-08 22:19:06

+0

'oSheet'和'vSheet'都没有分配给工作表... – 2013-05-08 22:49:36