web-dev-qa-db-fra.com

Excel VBA - sélectionnez plusieurs colonnes non dans un ordre séquentiel

Je voudrais sélectionner plusieurs colonnes.

Par exemple. Je veuxselect column a, b, d, e, g, h

J'ai essayé:

Columns("A, B, D, E, G, H").select

Je reçois erreur message:Type mismatch.

12
HL8

Range("A:B,D:E,G:H").Select peut vous aider

Modifier la note: je viens de voir que vous avez utilisé différentes séquences de colonnes, j'ai mis à jour ma réponse

27
HRgiger

Certaines choses du haut de ma tête.

Méthode 1.

Application.Union(Range("a1"), Range("b1"), Range("d1"), Range("e1"), Range("g1"), Range("h1")).EntireColumn.Select

Méthode 2.

Range("a1,b1,d1,e1,g1,h1").EntireColumn.Select

Méthode 3.

Application.Union(Columns("a"), Columns("b"), Columns("d"), Columns("e"), Columns("g"), Columns("h")).Select
18
GSerg

Une partie du code me semble un peu complexe. C'est un code très simple pour ne sélectionner que les lignes utilisées dans deux colonnes D et H non contiguës. Cela suppose que les colonnes ont une longueur inégale et sont donc plus flexibles que si les colonnes étaient de même longueur.

Comme vous en avez probablement deviné 4 = colonne D et 8 = colonne H

Dim dlastRow As Long
Dim hlastRow As Long

dlastRow = ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row
hlastRow = ActiveSheet.Cells(Rows.Count, 8).End(xlUp).Row
Range("D2:D" & dlastRow & ",H2:H" & hlastRow).Select

J'espère que vous trouverez utile - N'OUBLIEZ PAS CETTE COMMA AVANT LA DEUXIÈME COLONNE, COMME JE L'AVAIS, OR IL BOMBE !!

1
MORTON WAKELAND JR

Travaillant sur un projet, je suis resté bloqué pendant un certain temps sur ce concept - je me suis retrouvé avec une réponse similaire à la Méthode 1 de @GSerg qui a très bien fonctionné. J'ai essentiellement défini deux plages de formules (en utilisant quelques variables), puis utilisé le concept d'Union. Mon exemple est tiré d'un projet plus vaste sur lequel je travaille, mais j'espère que la partie de code ci-dessous peut aider d'autres personnes qui pourraient ne pas savoir comment utiliser le concept d'Union conjointement avec des plages et des variables définies. Je n'ai pas inclus l'intégralité du code car, à ce stade, il est assez long - si quelqu'un veut plus de perspicacité, n'hésitez pas à me le faire savoir.

D'abord j'ai déclaré toutes mes variables comme publiques

Puis j'ai défini/défini chaque variable

Enfin, je mets une nouvelle variable "SelectRanges" comme union entre les deux autres FormulaRanges

Public r As Long
Public c As Long
Public d As Long
Public FormulaRange3 As Range
Public FormulaRange4 As Range
Public SelectRanges As Range

With Sheet8




  c = pvt.DataBodyRange.Columns.Count + 1

  d = 3

  r = .Cells(.Rows.Count, 1).End(xlUp).Row

Set FormulaRange3 = .Range(.Cells(d, c + 2), .Cells(r - 1, c + 2))
    FormulaRange3.NumberFormat = "0"
    Set FormulaRange4 = .Range(.Cells(d, c + c + 2), .Cells(r - 1, c + c + 2))
    FormulaRange4.NumberFormat = "0"
    Set SelectRanges = Union(FormulaRange3, FormulaRange4)
0
Jonh

En tant que macro enregistrée.

range("A:A, B:B, D:D, E:E, G:G, H:H").select
0
gavin