2016-09-20 6 views
0

Ich arbeite am Exportieren von CSVs großer Gruppen aus einer Active Directory-Umgebung. Viele dieser Gruppen haben umfangreiche Verschachtelung und ich muss Zellen einfügen, damit das Arbeitsblatt für Menschen lesbar ist.Einfügen einer Zelle in Excel basierend auf dem Zellenwert

Zum Beispiel mein Arbeitsblatt sieht wie folgt aus: WS Beispiel

Int Benutzerpfad

0 User1 CN

0 User2 CN

1 User3 CN

1 Benutzer4 CN

0 User5 CN

1 user6 CN

2 user7 CN

Ich suche Hilfe ein VBA-Skript anpassen, die den Integer-Wert aus der ersten Spalte liest und fügt die entsprechende Anzahl von Zellen links von der Spalte für diese bestimmte Zeile. Die Einschränkung besteht darin, dass die Liste die Reihenfolge der Zeilen nicht ändern kann, um die verschachtelte Struktur beizubehalten.

Hier ist, was ich in VBA habe bisher

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 

Derzeit wird dieser Schnipsel aus der Spalte die Anzahl von 1en zählt und fügt eine neue Zeile an der Spitze der Liste. Ich glaube, der Fehler in meiner Logik ist innerhalb der If-Anweisung und sobald ich das ausgebügelt habe, weiß ich, dass ich das mit einem ElseIf erweitern kann, um den Rest der Werte zu adressieren.

Antwort

0

Dies wird es tun. Das Problem sieht so aus, als befände es sich in der Zeile Rows(Cells(i, 1).Column).Insert shift:=xlShiftRight. Wenn Sie, dass brechen, berechnet sie wie folgt:

Cells(i,1).Column, die gleich 1, da die Spalte von .Cells(i,1) ist 1. Rows(1) die 1 von oben kommt. Also Rows(1) ist 1. Rows(1).Insert fügt über Zeile 1 ein, unabhängig davon, was Sie für die Verschiebung angeben.

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

ich denke, das nur Verschiebungen eine Spalte nach rechts ... Ich denke, die Frage fragt nach der Anzahl der verschobenen Spalten, um variabel zu sein ... – gordon613

0

Dies sollte es tun.

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

Nicht wenige Möglichkeiten, dies zu tun, aber durch die Zahl in columnA unter Verwendung der Menge von Zellen zu definieren, die Sie einfügen können, wie so eine zweite Schleife tun:

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 
Verwandte Themen