Qual è la funzione per ottenere il numero di riga corrente e il nome della colonna corrente per una cella in Excel?
OFFSET
funzione insieme o al posto della INDIRECT
formula. Se vuoi usare le stringhe, però, ho anche aggiornato la mia risposta.
Qual è la funzione per ottenere il numero di riga corrente e il nome della colonna corrente per una cella in Excel?
OFFSET
funzione insieme o al posto della INDIRECT
formula. Se vuoi usare le stringhe, però, ho anche aggiornato la mia risposta.
Risposte:
È possibile utilizzare le funzioni ROW
e COLUMN
per farlo. Se si omette l'argomento per tali formule, viene utilizzata la cella corrente. Questi possono essere utilizzati direttamente con la OFFSET
funzione o qualsiasi altra funzione in cui è possibile specificare sia la riga che la colonna come valori numerici.
Ad esempio, se si immette =ROW()
nella cella D8, il valore restituito è 8. Se si immette =COLUMN()
nella stessa cella, il valore restituito è 4.
Se si desidera la lettera della colonna, è possibile utilizzare la CHAR
funzione. Non consiglio l'uso delle lettere per rappresentare la colonna, poiché le cose si complicano quando si passa a nomi di colonne a doppia lettera (dove il solo uso dei numeri è comunque più logico).
Indipendentemente da ciò, se dovessi comunque voler ottenere la lettera di colonna, puoi semplicemente aggiungere 64 al numero di colonna (64 essendo un carattere in meno di allora A
), quindi nell'esempio precedente, se imposti il valore della cella su =CHAR(COLUMN()+64)
, il valore restituito sarebbe D
. Se si desidera che il valore di una cella sia la posizione della cella stessa, sarebbe la formula completa =CHAR(COLUMN()+64) & ROW()
.
Solo un FYI, ho ottenuto 64 da una tabella ASCII. Puoi anche usare la CODE
formula, quindi la formula aggiornata usando questa sarebbe =CHAR(COLUMN() + CODE("A") - 1)
. Devi sottrarre 1 poiché il valore minimo di COLUMN
è sempre 1, e quindi il valore di ritorno minimo dell'intera formula sarebbe B
.
Tuttavia, questo non funzionerà con colonne di due lettere. In tal caso, è necessaria la seguente formula per analizzare correttamente le colonne di due lettere:
=IF(COLUMN()>26,IF(RIGHT(CHAR(IF(MOD(COLUMN()-1,26)=0,1,MOD(COLUMN()-1,26))+64),1)="Y",CHAR(INT((COLUMN()-1)/26)+64) & "Z",CHAR(INT((COLUMN()-1)/26)+64) & CHAR(IF(MOD(COLUMN(),26)=0,1,MOD(COLUMN(),26))+64)),CHAR(COLUMN()+64))&ROW()
Non sono sicuro che ci sia un modo più semplice per farlo o no, ma so che funziona da cellulare A1
a ZZ99
senza problemi. Tuttavia, questo spiega perché è meglio evitare l'uso di identificatori di colonna basati su lettere e attenersi a formule pure basate su numeri (ad esempio utilizzando il numero di colonna anziché la lettera con OFFSET
).
OFFSET
invece, che ti consente di specificare le colonne come numeri. Indipendentemente da ciò, ho aggiornato la risposta con una formula per estenderla per funzionare con colonne di due lettere.
However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
Prova la seguente funzione:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
Spiegazione: ADDRESS(row_num, column_num, [abs_num])
. [abs_num] = 4
= indirizzo relativo. Ciò significa che non ci sono '$' nel valore restituito. Per la colonna 'AB', ADDRESS
verrà restituito 'AB1'. Il sostituto rimuove '1'.
Prova questo
=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")
Questo ti dà l'intestazione di colonna esatta, senza $ ecc.
Digita questo in qualsiasi cella:
Español :
=SI(ENTERO((COLUMNA()-1)/26)=0;"";CAR((ENTERO(COLUMNA()-1)/26)+64))&CAR(COLUMNA()-(ENTERO((COLUMNA()-1)/26)*26)+64)
Inglese :
=IF(INT((COLUMN()-1)/26)=0,"",CHAR((INT(COLUMN()-1)/26)+64))&CHAR(COLUMN()-(INT((COLUMN()-1)/26)*26)+64)
È possibile sostituire la colonna () con il numero di riga.
Per ottenere il nome della colonna ho usato le seguenti formule.
Per una cella particolare:
=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")
Per la cella corrente:
=SUBSTITUTE(CELL("address"),"$" & ROW(),"")
Prova questa variazione. Funziona su colonne di 3 lettere e non lascia un "$" sul front-end:
=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
Leggermente manuale ma meno VBA e una formula più semplice:
=column()
=Address(1,A1)
$A$1
Una volta copiati i valori, trova e sostituisci $
e 1
con spazio vuoto.
Un altro modo possibile sarebbe usare qualcosa del genere:
=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())
Dove si colid
riferisce a un intervallo denominato che dovresti creare altrove all'interno della cartella di lavoro comprendente due colonne adiacenti con più righe: la prima colonna contenente i numeri da 1 a n corrispondenti al COLUMN()
numero, la seconda contenente le lettere A - ZZ o comunque molti riferimenti a colonne desidera accogliere. La ROW()
va bene a sinistra in quanto è di restituire il numero di riga.
Quindi, se dovessi copiare la stringa sopra nella cella A1 di 'MySheet2', valuterà come =MySheet1!A1
, e restituirebbe il valore trovato nella cella corrispondente di MySheet1
.
Ciò consentirebbe, ad esempio, di utilizzare MySheet1
come area di lavoro, di eliminare e reinserire nuovi dati, mentre qualsiasi formattazione o calcolo MySheet2
che faccia riferimento a tali contenuti continuerà a funzionare correttamente con i nuovi set di dati dal foglio di lavoro a schede di destinazione.
Ecco una soluzione VBA, definita dall'utente, soluzione. Funziona con colonne da 1, 2 e 3 lettere.
Inserisci quanto segue in un modulo di codice:
Function COLUMNLETTER(Optional rng As Range) As String
'Returns the Column Letter of the top left cell in rng.
If rng Is Nothing Then Set rng = Application.Caller
COLUMNLETTER = Left(rng.Address(0, 0), IIf(rng.Column > 26, IIf(rng.Column > 702, 3, 2), 1))
End Function
= COLUMNLETTER () in qualsiasi cella restituirà la lettera della colonna della cella.
= COLUMNLETTER (B3) in una cella tornerà B .
Questa funzione definita dall'utente funziona benissimo quando si creano formule generiche all'interno della funzione INDIRETTA.
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)
La formula dell'indirizzo funziona restituendo la colonna e il nome della riga. Il formato restituito sarà sempre $(Column Letters)$(Row Numbers)
- ad es. $AA$2
O$XAA$243556
Se sappiamo che $ si presenterà sempre al primo carattere, possiamo usare la prima formula di metà per iniziare a tirare i caratteri dopo il primo segno $ (cioè il secondo carattere).
Quindi, troviamo il prossimo simbolo $ (poiché sappiamo che ce ne saranno solo due) e sappiamo quanti caratteri ci sono tra il primo e il secondo simbolo del dollaro. Il resto è semplice sottrazione.
La seguente formula funziona indipendentemente da dove la metti (ti restituirà il nome della colonna).
=SUBSTITUTE(SUBSTITUTE(ADDRESS(ROW(),COLUMN()),"$",""),ROW(),"")
prova questo:
= IF (COLUMN ()> 26, CHAR (COLUMN () / 26 +64), "") & CHAR (MOD (COLUMN () - 1,26) +65) e ROW ()
questa funzione è attiva fino a "ZY1" o colonna = 701
LIN
eCOL
il problema è che restituiscono numeri e ho bisogno della lettera della colonnaINDIRECT
.