Visual Basic bewegen alle anderen Spalten, um eine lange Spalte B zu erstellen B
-
27-10-2019 - |
Frage
Ich habe eine Reihe von Datenspalten, die jeweils 15 Reihen tiefreihen. Spalte B ist die Spalte, die ich in der Reihenfolge alle anderen Spalten darunter bewegen möchte. Der Inhalt der Spalte C wird also geschnitten und darunter bereits in B und so weiter bewegt.
Bisher habe ich;
'Select a column
ActiveSheet.Range("B1", ActiveSheet.Range("B1").End(xlDown)).Select
'Cut
Selection.Cut
'Select cell at bottom of A
ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select
'Paste
ActiveSheet.Paste
Ich brauche die Schleife, damit sie funktioniert und alle Spalten von einem bis fn durchschleifen.
Danke im Voraus.
Lösung
Dim col As Range
For Each col In Worksheets("Sheet1").Columns
If (col.Column > 1 And col.Column < 171) Then
Range(col.Rows(1), col.Rows(15)).Select
Selection.Cut
'Select cell at bottom of A
ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste 'Paste
End If
Next col
End Sub
Andere Tipps
Ich denke, das wird das tun, was Sie beschreiben. Wenn nicht, könnten Sie vielleicht etwas klarer erklären?
Dim LastCol As Integer, c As Integer, r As Long LastCol = ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column For c = 2 To LastCol If Cells(1, c) <> "" Then ActiveSheet.Range(Chr$(64 + c) & "1", ActiveSheet.Range(Chr$(64 + c) & "1").End(xlDown)).Select Selection.Cut ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select ActiveSheet.Paste End If Next c
Sub go() Dim LastCol As Integer, c As Integer, r As Long LastCol = ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column For c = 2 To LastCol If Cells(1, c) "" Then ActiveSheet.Range(ColumnLetter(c) & "1", ActiveSheet.Range(ColumnLetter(c) & "1").End(xlDown)).Select Selection.Cut ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select ActiveSheet.Paste End If Next c End Sub Function ColumnLetter(ColumnNumber As Integer) As String If ColumnNumber > 26 Then ' 1st character: Subtract 1 to map the characters to 0-25, ' but you don't have to remap back to 1-26 ' after the 'Int' operation since columns ' 1-26 have no prefix letter ' 2nd character: Subtract 1 to map the characters to 0-25, ' but then must remap back to 1-26 after ' the 'Mod' operation by adding 1 back in ' (included in the '65') ColumnLetter = Chr(Int((ColumnNumber - 1) / 26) + 64) & _ Chr(((ColumnNumber - 1) Mod 26) + 65) Else ' Columns A-Z ColumnLetter = Chr(ColumnNumber + 64) End If End Function
Ein anderer Ansatz ist, die Zahlen direkt zu verwenden, aber ich vergesse, wie das geht ... Prost!
-Stuart
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow