2016-09-20 146 views
0

我正在從活動目錄環境中導出大型組的CSV。這些組中的很多都有大量的嵌套,我需要插入單元格以便工作表是人類可讀的。基於單元值在excel中插入單元格

例如我的工作表看起來像這樣: WS例

詮釋用戶路徑

0 User1的CN

0用戶2 CN

1用戶3 CN

1 User4 CN

0用戶5 CN

1 User6 CN

2 User7 CN

我尋找幫助適配VBA腳本讀取從第一列中的整數值,並插入相應數量的單元格在該行的左側。約束條件是列表不能改變行的順序以保持嵌套結構。

這是我在VBA至今

Sub test() 
Dim d As Integer 
d = Range("A:A").End(xlDown).row 
Dim c As Range 
    For i = d To 1 Step -1 
    If Cells(i, 1).Value Like "1" Then 
    Rows(Cells(i, 1).Column).Insert shift:=xlShiftRight 
    End If 
    Next 
End Sub 

目前這個片段計數1的從列的數量,並在列表頂部插入新行。我相信我的邏輯錯誤在If語句中,一旦我解決了這個問題,我知道我可以用ElseIf來擴展它,以解決其餘的值。

回答

0

這將做到這一點。該問題看起來像在Rows(Cells(i, 1).Column).Insert shift:=xlShiftRight之內。如果你打破下來,它計算如下:

Cells(i,1).Column相當於1日起.Cells(i,1)列是1 Rows(1)1來自上方。所以Rows(1)是1. Rows(1).Insert插入行1上方,無論您指定什麼換檔。

Sub test() 
Dim d As Integer 
d = Range("A:A").End(xlDown).row 
Dim c As Range 
    For i = d To 1 Step -1 
    If Cells(i, 1).Value Like "1" Then 
     Cells(i, 1).Insert shift:=xlToRight 
    End If 
    Next 
End Sub 
+0

我認爲這只是輪班一列在右邊......我想這個問題要求列的數量變爲可變...... – gordon613

0

這應該這樣做。

Sub test() 
Dim d As Integer 
d = Range("A:A").End(xlDown).Row 
Dim c As Range 
    For i = d To 1 Step -1 
    aMove = Val(Cells(i, 1)) 
    If aMove > 0 Then 
    Range(Cells(i, 1), Cells(i, aMove)).Insert shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
    End If 
    Next 
End Sub 
0

不少方法可以做到這一點,但通過使用columnA數量來定義細胞的數量來插入你可以做的第二環,像這樣:

Private Sub CommandButton1_Click() 
Dim x, d, i As Integer 
With ActiveSheet 
d = .Range("A:A").End(xlDown).Row 
    For x = 2 To d 
    i = .Cells(x, 1).Value 
     For a = 1 To i 
      .Cells(x, 1).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
     Next a 
    Next x 
End With 
End Sub 
相關問題