2017-08-11 62 views
0

我有這個循環的問題。在電子表格中,我有一列值與一些文本是相同的(例如,連續說5個相同的短語)。我已經按照文本對電子表格進行了排序,所以我知道如果列中有多個文本實例,它們將全部組合在一起。我想要做的是首先檢查文本是否使用if語句發佈在第二個工作表中。如果它不相同,那麼我會在第二張工作表中發佈文本,並將所有變量加一,繼續前進。問題與vba中的循環

由於某些原因,它不是循環。

任何幫助表示讚賞!

Dim ProfCtr As String 
Dim S2FreecellH As Integer 
Dim ProfCenCellH As Integer 

S2FreecellH = 3 
ProfCenCellH = 2 

ProfCtr = Cells(ProfCenCellH, 4) 

Worksheets("Sheet2").Cells(S2FreecellH, 1).Value = ProfCtr 

While ProfCenCellH < 50 
    If Cells(ProfCenCellH, 4).Value = Worksheets("Sheet2").Cells(S2FreecellH, 1).Value Then 
     Worksheets("Sheet2").Cells(S2FreecellH, 1).Value = ProfCtr 
    Else 
     ProfCenCellH = ProfCenCellH + 1 
    End If 

    S2FreecellH = S2FreecellH + 1 
    ProfCenCellH = ProfCenCellH + 1 
    ProfCtr = Cells(ProfCenCellH, 4) 
Wend 
+0

有沒有你不能只是複製和粘貼的所有數據在一個原因,然後使用Excel的刪除重複的功能? – Selkie

+0

它是一個更大的項目的一部分(計劃爲這個宏添加更多的循環),但我必須先讓這部分工作。 – user392500

+0

[調試VBA代碼](http://www.cpearson.com/excel/DebuggingVBA.aspx) – Andre

回答

0

我認爲你想要做的事情的基礎知識在下面的代碼中。我已將您的源列放在您的ProfCenCellH(第4列)的相同位置,並且我的目標列中的S2FreecellH(第1列)的位置在列中,但我只循環15而不是50.在動畫gif中,注意源範圍前進到第4列,只有非重複項被傳送到目的地。一旦你明白髮生了什麼事,就從代碼中刪除.select聲明,因爲它們可能會導致問題。

enter image description here

Option Explicit 
Sub test() 
Dim destR As Range, sourceR As Range 
Set sourceR = ActiveSheet.Cells(2, 4) 
Set destR = ActiveSheet.Cells(2, 1) 
destR = sourceR 
While sourceR.Row < 15 
    sourceR.Select 
    Set sourceR = sourceR.Offset(1, 0) 
    If sourceR <> destR Then 
    Set destR = destR.Offset(1, 0) 
    destR = sourceR 
    End If 
Wend 
End Sub