165 votes

Fonction pour convertir un numéro de colonne en lettre ?

Quelqu'un dispose-t-il d'une fonction Excel VBA permettant de retourner la ou les lettres de la colonne d'un nombre ?

Par exemple, en saisissant 100 devrait retourner CV .

1voto

Jordi Points 21

Ici, une simple fonction en Pascal (Delphi).

function GetColLetterFromNum(Sheet : Variant; Col : Integer) : String;
begin
  Result := Sheet.Columns[Col].Address;  // from Col=100 --> '$CV:$CV'
  Result := Copy(Result, 2, Pos(':', Result) - 2);
end;

1voto

Thom Points 21

Cette formule donnera la colonne basée sur une plage (par exemple, A1 ), où la plage est une seule cellule. Si une plage de plusieurs cellules est donnée, elle renverra la cellule supérieure gauche. Remarque : les deux références de cellule doivent être identiques :

MID(CELL("adresse", A1 ),2,SEARCH("$",CELL("adresse", A1 ),2)-2)

Comment cela fonctionne :

CELL("propriété", "plage") renvoie une valeur spécifique de la plage en fonction de la propriété utilisée. Dans ce cas, l'adresse de la cellule. La propriété adresse renvoie une valeur $[col]$[row], c'est-à-dire A1 -> $A$1. La fonction MID extrait la valeur de la colonne entre les symboles $.

0voto

Hariharasudhan Points 1

Option explicite

Public Numbers As Variant, Tens As Variant

Sub SetNums()

Numbers = Array("", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen")

Tens = Array("", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety")

End Sub

Function WordNum(MyNumber As Double) As String

Dim DecimalPosition As Integer, ValNo As Variant, StrNo As String

Dim NumStr As String, n As Integer, Temp1 As String, Temp2 As String

If Abs(MyNumber) > 999999999 Then

WordNum = "Value too large"

Exit Function

End If

SetNums

' String representation of amount (excl decimals)

NumStr = Right("000000000" & Trim(Str(Int(Abs(MyNumber)))), 9)

ValNo = Array(0, Val(Mid(NumStr, 1, 3)), Val(Mid(NumStr, 4, 3)), Val(Mid(NumStr, 7, 3)))

For n = 3 To 1 Step -1 'analyse the absolute number as 3 sets of 3 digits

StrNo = Format(ValNo(n), "000")

If ValNo(n) > 0 Then

Temp1 = GetTens(Val(Right(StrNo, 2)))

If Left(StrNo, 1) <> "0" Then

Temp2 = Numbers(Val(Left(StrNo, 1))) & " hundred"

If Temp1 <> "" Then Temp2 = Temp2 & " and "

Else

Temp2 = ""

End If

If n = 3 Then

If Temp2 = "" And ValNo(1) + ValNo(2) > 0 Then Temp2 = "and "

WordNum = Trim(Temp2 & Temp1)

End If

If n = 2 Then WordNum = Trim(Temp2 & Temp1 & " thousand " & WordNum)

If n = 1 Then WordNum = Trim(Temp2 & Temp1 & " million " & WordNum)

End If

Next n

NumStr = Trim(Str(Abs(MyNumber)))

' Values after the decimal place

DecimalPosition = InStr(NumStr, ".")

Numbers(0) = "Zero"

If DecimalPosition > 0 And DecimalPosition < Len(NumStr) Then

Temp1 = " point"

For n = DecimalPosition + 1 To Len(NumStr)

Temp1 = Temp1 & " " & Numbers(Val(Mid(NumStr, n, 1)))

Next n

WordNum = WordNum & Temp1

End If

If Len(WordNum) = 0 Or Left(WordNum, 2) = " p" Then

WordNum = "Zero" & WordNum

End If

End Function

Function GetTens(TensNum As Integer) As String

' Converts a number from 0 to 99 into text.

If TensNum <= 19 Then

GetTens = Numbers(TensNum)

Else

Dim MyNo As String

MyNo = Format(TensNum, "00")

GetTens = Tens(Val(Left(MyNo, 1))) & " " & Numbers(Val(Right(MyNo, 1)))

End If

End Function

0voto

Chetan V. Points 1
Sub GiveAddress()
    Dim Chara As String
    Chara = ""
    Dim Num As Integer
    Dim ColNum As Long
    ColNum = InputBox("Input the column number")

    Do
        If ColNum < 27 Then
            Chara = Chr(ColNum + 64) & Chara
            Exit Do
        Else
            Num = ColNum / 26
            If (Num * 26) > ColNum Then Num = Num - 1
            If (Num * 26) = ColNum Then Num = ((ColNum - 1) / 26) - 1
            Chara = Chr((ColNum - (26 * Num)) + 64) & Chara
            ColNum = Num
        End If
    Loop

    MsgBox "Address is '" & Chara & "'."
End Sub

-1voto

Bhanu Sinha Points 16

La lettre de la colonne à partir du numéro de la colonne peut être extraite à l'aide de la formule en suivant les étapes suivantes
1. Calculez l'adresse de la colonne à l'aide de la formule ADDRESS
2. Extraire la lettre de la colonne en utilisant la fonction MID et FIND.

Exemple :
1. ADRESSE(1000,1000,1)
résultats $ALL$1000
2. =MID(F15,2,FIND("$",F15,2)-2)
résultats TOUS en supposant que F15 contient le résultat de l'étape 1

En une seule fois, nous pouvons écrire
MID(ADDRESS(1000,1000,1),2,FIND("$",ADDRESS(1000,1000,1),2)-2)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X