基于单元值在excel中插入单元格

问题描述:

我正在从活动目录环境中导出大型组的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来扩展它,以解决其余的值。

这将做到这一点。该问题看起来像在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

这应该这样做。

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 

不少方法可以做到这一点,但通过使用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