2009-07-11 20 views
8

Data una riga e colonna (As Long), come è possibile determinare la notazione foglio di calcolo utilizzando VBA in Excel (2007):Come passare dalla notazione Riga, Colonna a Excel A1?

esempio:

(R, C) = (1, 1) -> "A1" 
(R, C) = (2, 1) -> "A2" 
(R, C) = (2, 2) -> "B2" 

Quindi se si ha una funzione:

Function CellRef(R As Long, C As Long) As String 

che prevedeva che la funzionalità, si potrebbe fare qualcosa di simile:

Worksheet.Range(CellRef(R1, C1) + ":" + CellRef(R2, C2)).Copy 

Un po 'di storia, nel caso in cui questo è l'approccio sbagliato da prendere: Lo scopo di questo è che ho un foglio maestro che descrive gli altri fogli di lavoro in una tabella:

WorksheetName, Range etc.... 

Questa scheda tecnica master controlla trasformazioni sul foglio , ma il valore Range è ovviamente in notazione Excel per un comodo utilizzo successivo nel riferimento all'intervallo. Tuttavia una routine per gestire questa tabella, segnalare le eccezioni e garantire che la coerenza ottenga le cose da altri fogli in righe e colonne, quindi ad esempio ottiene una riga e una colonna dove sa che qualcosa sta iniziando e terminando.

Ecco la funzione ho finito con:

Private Function CellRef(R As Long, C As Long) As String 
    CellRef = vbNullString 
    On Error GoTo HandleError: 
    CellRef = Replace(Mid(Application.ConvertFormula("=R" & R & "C" & C, XlReferenceStyle.xlR1C1, XlReferenceStyle.xlA1), 2), "$", "") 
    Exit Function 
HandleError: 
End Function 

risposta

4

Forse this è quello che stai cercando?

+0

con alcune modifiche, che ha funzionato bene, grazie. –

+1

+1. Beh, postare un po 'di quel codice qui o almeno spiegando come è fatto sarebbe d'aiuto. (Il link potrebbe ruotare un giorno potrebbe lasciare questa risposta meno utile) :) –

3
+0

Wow, roba interessante. Non sono sicuro che nessuno di questi è migliore di quello che mi è venuto in mente basato su Application.ConvertFormula trovato tramite la prima risposta, però. –

+0

concordato. Ho appena incluso per completezza. –

+0

Questo è un grande blog che hai lì;) – onedaywhen

1

http://support.microsoft.com/kb/833402 è una soluzione Microsoft per il problema della conversione dei numeri in lettere (la parte difficile della conversione da 1,1 a A1). Questo in realtà ha il vantaggio di funzionare in altre applicazioni di Excel in quanto si basa su VBA di base.

quindi si aggiunge:

' Converts row and column index to Excel notation, ie (3, 2) to B3. 
Private Function generateExcelNotation(row As Integer, column As Integer) As String 
    ' error handling of your choice, I go for returning an empty string 
    If (row < 1 Or column < 1) Then 
     generateExcelNotation = "" 
     Exit Function 
    End If 
    generateExcelNotation = ConvertToLetter(column) & row 
End Function 
Problemi correlati