web-dev-qa-db-fra.com

VBA - Sélectionnez les colonnes en utilisant des nombres?

Je cherche une alternative à cette code, mais en utilisant des nombres ... je veux sélectionner 5 colonnes, la colonne de départ est une variable, puis 5 colonnes.

Columns("A:E").Select

Comment utiliser plutôt integers pour faire référence à des colonnes? Quelque chose comme ci-dessous?

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

Merci . Gemmo

17
gemmo

Vous pouvez utiliser le redimensionnement comme ceci:

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

Dans tout Manipulation de plage que vous faites, gardez toujours à l'esprit de votre esprit Resize and Offset property.

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

Peut être directement remplacé par

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

Où 1 peut être remplacé par une variable

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

À mon avis, il vaut mieux utiliser un bloc de colonnes plutôt que de parcourir les colonnes n à n + 4 car il est plus efficace.

De plus, utiliser select ralentira votre code. Ainsi, au lieu de sélectionner vos colonnes, puis d’exécuter une action sur la sélection, essayez plutôt d’exécuter cette action directement. Vous trouverez ci-dessous un exemple pour changer la couleur des colonnes A à E en jaune.

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

vous pouvez utiliser range avec cells pour obtenir l'effet souhaité (mais il serait préférable de ne pas utiliser select si vous n'avez pas à le faire)

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

pas besoin de boucles ou autres .. essayez ceci .. 

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

Essayez ce qui suit, où n est votre variable et x votre décalage (4 dans ce cas):

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

Cela retournera la lettre de cette colonne (donc pour n = 1 et x = 4, cela retournera A + 4 = E). Vous pouvez ensuite utiliser INDIRECT() pour référencer ceci, comme suit:

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

qui avec n = 1, x = 4 devient:

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

et donc:

COLUMNS(A:E)
1
Nam Taf

Je cherchais une solution similaire ... Mon problème était de trouver la dernière colonne en fonction de la ligne 5, puis de sélectionner 3 colonnes avant d'inclure la dernière. 

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

La boîte de message est facultative car il s’agit plus d’une vérification de contrôle. Si vous souhaitez sélectionner les colonnes après la dernière colonne, vous devez simplement inverser la sélection de la plage.

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

Vous pouvez spécifier des adresses sous la forme "R1C2" au lieu de "B2". Sous Fichier -> Options -> Formulaires -> Travailler avec des formules il existe une bascule Style de référence R1C1 . qui peut être réglé, comme illustré ci-dessous.

enter image description here

0
Pieter Geerkens