2013-04-10 52 views
1

任何人都可以幫助我修改此循環來複制和粘貼?循環只粘貼在數據行上

僅當Range("F" & Y)中存在時間,日期或n/a形式的數據時,我纔想將Range("S" & Y).Select粘貼到同一行中。我想重複一遍,直到Range("F" & Y)中的最後一個數據點。我現在有數據在Range("F" & Y)的那一行,那麼它不應該粘貼Range("S" & Y)。當有數據在Range("F" & Y)時,它每三行顯示一次。有時在數據中可能有10行的差距,直到下一個數據序列返回到每三行。

錯誤:它不會停止在該數據集的末尾,即使在沒有數據的情況下也會粘貼Range("F" & Y)任何人都可以幫忙嗎?

我的代碼

Dim lastRow As Long 
Range("S16:Y16").Select 
Selection.Copy 
For Y = 19 To 2000 Step 3 

    If Range("F" & Y).Value = lastRow Then Exit For 
    Range("S" & Y).Select 
    ActiveSheet.Paste 
    lastRow = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row 

Next Y 
Application.ScreenUpdating = True 
MsgBox lastRow 
+0

如果你對空白範圍(「F」和Y).value「進行檢查,你是否需要跳到每第三行? – glh 2013-04-11 10:26:41

+1

你能告訴我們爲什麼你想跳進三個跳繩? – 2013-04-11 11:18:06

+0

如果你有它的工作,請選擇一個答案**所有您的問題** – 2013-04-26 08:31:56

回答

0

也許你可以在列S上工作表公式爲Y如下做到這一點:

=IF($F:$F<>"",S:S,"") 

複製,從列s到Y,再向下公式翻過2000.

要檢查ROW是否每隔三行,使用ROW()函數獲取行號,並使用MOD來查看它是否可以被3整除?

對VBA,試試這個:

Dim lastRow As Long 
lastRow = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row 

Range("S16:Y16").Copy 
For Y = lastRow to 19 Step -3 
' check column F and Row=Y for contents 
if vba.len(vba.trim(range("F" & Y).value))>0 then 
    ' paste into column S 
    Range("S" & Y).PasteSpecial xlPasteAll 
end if 
Next 
Application.ScreenUpdating = True 
MsgBox lastRow 

現在它將從LASTROW倒着跑,以19

你的代碼是檢查細胞範圍( 「F」 & Y)或單元的值( Y,6)對最後一排的數量

+0

我接下來沒有收到編譯錯誤。我不明白。在下一個停止Y – user2254486 2013-04-10 10:27:46

+0

對不起,錯過* End If *,請現在試試 – 2013-04-10 10:36:00

+0

感謝您的幫助。msg最後一行是1355,但它停在1321 ....它在數據集之間的空間是4而不是3之前停止了一次,但這應該不重要,因此我刪除了一行並再次運行它。仍然沒有去到最後一個數據行,它錯過了5個文件。有任何想法嗎。 – user2254486 2013-04-10 10:57:32

1

幾個要點:

  1. 首先,它不會在lastRow大於2000時結束,並且您的if語句不檢查當前行號,而是檢查其中的值。另外,您最好跳過最後一行,因爲您一次跳過3行。我建議您使用以下if語句來代替:

    If Range("F" & Y).row > lastRow Then Exit For 
    
  2. 爲了您lastrow變量我建議以下更準確:

    lastrow = activesheet.cells.find("*", range("A1"), , , xlbyrows, xlprevious).row 
    
  3. 此外,你的每行中沒有粘貼數據檢查一個空白值,我會檢查使用此空白單元格:

    if len(Application.WorksheetFunction.Clean(trim(range("F" & Y).value))) > 0 then