2012-01-17 70 views
10

Me gustaría seleccionar columnas múltiples.Excel VBA - seleccione varias columnas no en orden secuencial

Por ejemplo. Quiero select column a, b, d, e, g, h

He intentado:

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

me sale error mensaje: Type mismatch.

+1

99% del tiempo que nunca necesita seleccionar celdas para trabajar con ellas. ¿Qué estás tratando de hacer? – Reafidy

+0

Reafidy es correcto. BTW HL8, ¿sabe que puede grabar una macro;)? –

Respuesta

23

Range("A:B,D:E,G:H").Select puede ayudar a

Editar nota: acabo de ver que haya utilizado diferentes orden de las columnas, he actualizado mi respuesta

+0

El título indica que no es secuencial, su método seleccionaría todas las columnas entre 'C' y' H', no creo que esto sea lo que busca el OP. –

+0

sí, he actualizado, lo siento mal :) :) – HRgiger

+1

@HRgiger ¿Cómo puedo obtener los valores en esas celdas en una matriz? ¿es posible esta consulta? someArray = Rango ("B4: B9, S4: S9"). Valor –

18

Algunas cosas de la parte superior de mi cabeza.

Método 1.

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

Método 2.

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

Método 3.

Application.Union(Columns("a"), Columns("b"), Columns("d"), Columns("e"), Columns("g"), Columns("h")).Select 
+0

** El método 3 ** es mi preferencia ya que creo que también es la mejor solución para trabajar con rangos definidos y nombrados en lugar de columnas enteras. 'Application.Union. (Range1, range2, range3) .select' es genial. Creo que esta solución (para copiar y pegar) _ requeriría que los rangos sean del mismo tamaño. –

0

Trabajar en un proyecto yo qui Durante un tiempo me quedé atrapado en este concepto: terminé con una respuesta similar al Método 1 de @GSerg que funcionó muy bien. Básicamente, definí dos rangos de fórmulas (usando algunas variables) y luego usé el concepto de Unión. Mi ejemplo es de un proyecto más grande en el que estoy trabajando, pero espero que la parte del código a continuación pueda ayudar a otras personas que quizás no sepan cómo usar el concepto de Unión junto con rangos y variables definidos. No incluí el código completo porque en este punto es bastante largo; si alguien quiere más información, no dude en hacérmelo saber.

Primero declarado todos mis variables Pública

Entonces definido/set cada variable

Por último puse una nueva variable "SelectRanges" como la Unión entre los otros dos 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) 
1

Parte del código me parece un poco complejo. Este es un código muy simple para seleccionar solo las filas usadas en dos columnas discontinuas D y H. Supone que las columnas son de longitud desigual y, por lo tanto, más flexibles si las columnas tienen la misma longitud.

Como es muy probable que habrá deducido 4 = la columna D y 8 = columna 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 

Esperamos que encuentre útil - no se olvide que coma antes de la segunda columna, como lo hice, o de lo contrario bomba! !

0

Como macro grabado.

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