2015-06-25 134 views
0

假設你正在給工作表Sheet1上這組數據:(有數字的一個長長的清單,其中沒有將超過7個位數)VBA將數據移動到最左列

 A  B  C 
31     123 
32     45 
33    6789 

我想,這將有數據宏出現這樣在Sheet2上:

 X  Y  Z  AA  AB  AC  AD 
58         1  2  3 
59           4  5 
60       6  7  8  9 

請記住對於其中的數據顯示了在Sheet1和sheet2範圍。

這是我到目前爲止有:

Sub IfBlankNext() 
Dim i As Integer, x As Integer, LastRow As Long, DestLast As Long, HoldVal As String 
LastRow = Sheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row 

For i = 31 To LastRow 
    If Sheets("Sheet1").Range("C" & i).Value > 0 Then 

     DestLast = Sheets("Sheet2").Range("X" & Rows.Count).End(xlUp).Row + 1 
     If DestLast < 58 Then DestLast = 58 
     HoldVal = Sheets("Sheet1").Range("C" & i).Value 
     For x = 1 To Len(HoldVal) 
     Sheets("Sheet2").Cells(DestLast, x + 23).Value = Mid(HoldVal, x, 1) 
     Next x 
    End If 
Next i 
End Sub 
+0

你的宏到目前爲止是什麼樣的? –

+0

@ A.Franklin這是一個很好的問題,哈哈我忘了在那裏添加。 – Cindy

回答

1

看起來你是在正確的軌道上!該列雖然有點棘手,因爲您必須從最右邊一列30開始,減去一個數字的位數Len(HoldVal),然後通過添加x來計算。最終代碼如下所示:

Sub IfBlankNext() 

Dim i As Integer, x As Integer, LastRow As Long, DestLast As Long, HoldVal As String 
LastRow = Sheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row 

For i = 31 To LastRow 
    If Sheets("Sheet1").Range("C" & i).Value > 0 Then 

     DestLast = Sheets("Sheet2").Range("AD" & Rows.Count).End(xlUp).Row + 1 
     If DestLast < 58 Then DestLast = 58 
     HoldVal = Sheets("Sheet1").Range("C" & i).Value 
     For x = 1 To Len(HoldVal) 

      '--- NEW CODE ------------------- 
      Dim columnNumber As Integer 
      columnNumber = (30 - Len(HoldVal)) + x 
      Sheets("Sheet2").Cells(DestLast, columnNumber).Value = Mid(HoldVal, x, 1) 
      '-------------------------------- 

     Next x 
    End If 
Next i 

End Sub 

我剛纔在這裏運行它,輸出與您請求的匹配。希望有所幫助!

+0

你是天才!這真棒,非常感謝你! – Cindy