2013-05-08 64 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