2014-09-30 4 views
12

Sto cercando un'alternativa a questo code, ma usando i numeri. Voglio selezionare 5 colonne, la colonna di inizio è una variabile, quindi seleziona 5 colonne da questa.VBA - Seleziona colonne usando i numeri?

Columns("A:E").Select 

Come uso integers invece, per fare riferimento a colonne? Qualcosa come sotto?

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

Grazie. Gemmo

risposta

19

È possibile utilizzare ridimensiona in questo modo:

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

In qualsiasi Manipolazione gamma che fai, tieni sempre il retro della tua mente Ridimensiona e Offset proprietà.

+0

Ciao, cosa succede se voglio ottenere intervallo di colonna di una sola colonna particolare utilizzando il numero di colonna –

+0

@JaydeepShil Si può elaborare più su ciò che si desidera fare? – L42

0

È possibile specificare indirizzi come "R1C2" anziché "B2". Sotto il file -> Opzioni -> Formule -> Lavorando con le formule c'è uno switch stile di riferimento R1C1. che può essere impostato, come illustrato di seguito.

enter image description here

3

è possibile utilizzare range con cells per ottenere l'effetto desiderato (ma sarebbe meglio non usare selezionare se non si deve)

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

Provare a utilizzare il seguente , dove n è la variabile e la x è il vostro offset (4 in questo caso):

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

Ciò restituirà la lettera di quella colonna (quindi per n = 1 e x = 4, restituirà A + 4 = E). È quindi possibile utilizzare INDIRECT() fare riferimento a queste, come in:

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

che con n = 1, x = 4 diventa:

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

e così:

COLUMNS(A:E) 
-1

In questo modo, è possibile iniziare a selezionare i dati anche dietro la colonna "Z" e selezionare molte colonne.

Sub SelectColumNums() 
    Dim xCol1 As Integer, xNumOfCols as integer 
    xCol1 = 26 
    xNumOfCols = 17 
    Range(Columns(xCol1), Columns(xCol1 + xNumOfCols)).Select 
End Sub 
0

Nell'esempio di codice seguente utilizzo le variabili solo per mostrare come il comando potrebbe essere utilizzato per altre situazioni.

FirstCol = 1 
LastCol = FirstCol + 5 
Range(Columns(FirstCol), Columns(LastCol)).Select 
+0

Questo dovrebbe essere un commento, penso. – ketan

0

senza necessità di loop o simili .. prova questo ..

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..* 
+0

Questo sembra selezionare solo la prima riga in quelle colonne per me. – jep

4
Columns("A:E").Select 

Può essere direttamente sostituita da

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

dove 1 può essere sostituito da una variabile

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

A mio parere si sta meglio che fare con un blocco di colonne piuttosto di un ciclo attraverso le colonne da n a n + 4 in quanto è più efficiente.

Inoltre, l'utilizzo di selezione rallenterà il codice. Quindi, invece di selezionare le colonne e quindi eseguire un'azione sulla selezione, provare invece a eseguire direttamente l'azione. Di seguito è riportato un esempio per cambiare il colore delle colonne da A-E a giallo.

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