Comme j'ai appris ici (aussi cité dans SO ) le code suivant peut être utilisé pour sélectionner le corps de données de la colonne 3 dans Table1
:
ActiveSheet.ListObjects("Table1").ListColumns(3).DataBodyRange.Select
J'ai besoin d'aide pour sélectionner un certain nombre de colonnes ensemble - disons les colonnes 3 à 5 ou les colonnes X à X + 3.
En utilisant les réponses à cette question, j'ai réussi à aller à mi-chemin en utilisant les noms de colonnes réels:
Range("Table1[[Column3]:[Column5]]").Select
Mais je dois pouvoir utiliser des numéros de colonne au lieu de noms, car ils seront le résultat d'une fonction (c'est-à-dire les colonnes X à X + d).
Pour une plage contiguë, redimensionnez simplement une seule colonne.
ActiveSheet.ListObjects("Table1").ListColumns(3).DataBodyRange.Resize(, 3).Select
Pour une sélection plus complexe, utilisez Union pour les collecter avant le processus .Select.
With ActiveSheet.ListObjects("Table1")
Union(.ListColumns(3).DataBodyRange, _
.ListColumns(4).DataBodyRange, _
.ListColumns(5).DataBodyRange).Select
End With
Voir Comment éviter d'utiliser Select dans les macros VBA Excel pour de meilleures méthodes.
Utilisez la méthode Columns sur DataBodyRange qui peut prendre une plage de table relative telle que "A:B"
Donc, si vous vouliez les deux premières colonnes, vous pourriez écrire: ActiveSheet.ListObjects("Table1").DataBodyRange.Columns("A:B").Select
Mais que se passe-t-il si vous souhaitez sélectionner en fonction d'un numéro de colonne relatif? Créez quelques fonctions pour convertir des nombres en cette chaîne:
Sub selectMultipe()
ActiveSheet.ListObjects("Table1").DataBodyRange.Columns(getRangeStr(1, 2)).Select
End Sub
'Get Range String
Function getRangeStr(startColNum As Long, endColNum As Long) As String
startCol = ColLtr(startColNum)
endCol = ColLtr(endColNum)
getRangeStr = startCol + ":" + endCol
End Function
'Convert column number to letter
Function ColLtr(iCol As Long) As String
If iCol > 0 And iCol <= Columns.Count Then ColLtr = Replace(Cells(1, iCol).Address(0, 0), 1, "")
End Function
Remarque: Le numéro de colonne à la fonction lettre a été trouvé ici