it-swarm.com.de

VBA - Spalten mit Zahlen auswählen?

Ich suche nach einer Alternative zu dieser code, aber mit Zahlen . Ich möchte 5 Spalten auswählen, die Startspalte ist eine Variable und wählt dann 5 Spalten aus dieser aus.

Columns("A:E").Select

Wie verwende ich stattdessen integers, um auf Spalten zu verweisen? Etwas wie unten?

For n = 1 to 5
Columns("n : n + 4") .select
do sth
next n

Danke . Gemmo

17
gemmo

Sie können die Größenänderung folgendermaßen verwenden:

For n = 1 To 5
    Columns(n).Resize(, 5).Select
    '~~> rest of your code
Next

Bei jeder Bereich-Manipulation die Sie tun, bleiben Sie immer im Hinterkopf Größe und Offset Eigenschaft.

25
L42
Columns("A:E").Select

Kann direkt durch ersetzt werden

Columns(1).Resize(, 5).EntireColumn.Select

Dabei kann 1 durch eine Variable ersetzt werden

n = 5
Columns(n).Resize(, n+4).EntireColumn.Select

Meiner Meinung nach beschäftigen Sie sich am besten mit einem Spaltenblock, anstatt die Spalten n bis n + 4 zu durchlaufen, da dies effizienter ist.

Darüber hinaus verlangsamt die Verwendung von select Ihren Code. Statt Ihre Spalten auszuwählen und dann eine Aktion für die Auswahl auszuführen, versuchen Sie, die Aktion direkt auszuführen. Nachfolgend ein Beispiel, um die Farbe der Spalten A-E in Gelb zu ändern.

Columns(1).Resize(, 5).EntireColumn.Interior.Color = 65535
5
McPaddy

sie können range mit cells verwenden, um den gewünschten Effekt zu erhalten (es ist jedoch besser, select nicht zu verwenden, wenn Sie dies nicht müssen).

For n = 1 to 5
range(cells(1,n).entirecolumn,cells(1,n+4).entirecolumn).Select
do sth
next n
3
SeanC

keine Notwendigkeit für Schleifen oder so .. versuchen Sie dies .. 

dim startColumnas integer

dim endColumn as integer

startColumn = 7

endColumn = 24

Range(Cells(, startColumn), Cells(, endColumn)).ColumnWidth = 3.8 ' <~~ whatever width you want to set..* 
1
Burak Borhan

Verwenden Sie folgendes, wobei n Ihre Variable und x Ihr Offset ist (in diesem Fall 4):

LEFT(ADDRESS(1,n+x,4),1)

Dies gibt den Buchstaben dieser Spalte zurück (also für n = 1 und x = 4 wird A + 4 = E zurückgegeben). Sie können dann mit INDIRECT() darauf verweisen:

COLUMNS(INDIRECT(LEFT(ADDRESS(1,n,4),1)&":"&LEFT(ADDRESS(1,n+x,4),1)))

welche mit n = 1, x = 4 wird:

COLUMNS(INDIRECT("A"&":"&"E"))

und so:

COLUMNS(A:E)
1
Nam Taf

Ich war auf der Suche nach einer ähnlichen Sache ... Mein Problem bestand darin, die letzte Spalte basierend auf Zeile 5 zu finden und dann 3 Spalten auszuwählen, bevor die letzte Spalte eingefügt wurde. 

Dim lColumn As Long

lColumn = ActiveSheet.Cells(5,Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)
Range(Columns(lColumn - 3), Columns(lColumn)).Select

Das Meldungsfeld ist optional, da es sich eher um eine Kontrollprüfung handelt. Wenn Sie die Spalten nach der letzten Spalte auswählen möchten, kehren Sie einfach die Bereichsauswahl um

Dim lColumn As Long

lColumn = ActiveSheet.Cells(5,Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)
Range(Columns(lColumn), Columns(lColumn + 3)).Select
0
dapaz

Sie können Adressen als "R1C2" anstelle von "B2" angeben. Unter Datei -> Optionen -> Formale -> Mit Formeln arbeiten gibt es einen umschaltbaren R1C1-Referenzstil . die eingestellt werden kann, wie unten dargestellt.

enter image description here

0
Pieter Geerkens