3

このサイトを検索して、公式をグーグルで検索しました。次のような文字からExcelの列番号を計算する必要があります。

A=1
B=2
..
AA=27
AZ=52
...
AAA=703

コードは、アルファベットのランダムなサイクルの後、1桁ずれているようです(AZ -> BA ==桁ずれ)。また、2 つの異なる入力から同じ整数を一見ランダムに生成します。

GetColumnNumber(xlLetter : Text) : Integer //Start of function

 StringLength := STRLEN(xlLetter);
 FOR i := 1 TO StringLength DO BEGIN
 Letter := xlLetter[i];
   IF i>1 THEN
     Count += ((xlLetter[i-1]-64) * (i-1) * 26) - 1;
   Count += (Letter - 64);
 END;
 EXIT(Count); //return value

私のコード例は、Dynamics NAV で使用される C/AL で記述されていますが、C# または vb.net も同様に記述できるので、例がこれらの言語のいずれかであるかどうかは気にしません。

4

3 に答える 3

3

VBA の場合:

Public Function GetCol(c As String) As Long
    Dim i As Long, t As Long
    c = UCase(c)
    For i = Len(c) To 1 Step -1
        t = t + ((Asc(Mid(c, i, 1)) - 64) * (26 ^ (Len(c) - i)))
    Next i
    GetCol = t
End Function
于 2013-07-23T18:58:11.283 に答える
3

VBA の場合:

Function ColLetter(C As Integer) As String
  If C < 27 Then
    ColLetter = Chr(64 + C)
  Else
    ColLetter = ColLetter((C - 1) \ 26) & ColLetter((C - 1) Mod 26 + 1)
  End If
End Function
于 2013-07-23T18:59:22.710 に答える
0

VBA の場合: (再帰関数)

    Function Get_Col_Number(strColName As String, dRunningNo As Integer) As Double
        Dim dCurrentColNo As Double
        Dim dMultipleValue As Double

        strColName = Ucase(strColName)

        If (dRunningNo <= 0) Then Get_Col_Number = 0:   Exit Function

        dCurrentColNo = ((Asc(Mid(strColName, dRunningNo, 1)) - Asc("A") + 1))
        dMultipleValue = 26 ^ (Len(strColName) - dRunningNo)

        Get_Col_Number = (dCurrentColNo * dMultipleValue) + Get_Col_Number(strColName, (dRunningNo - 1))
    End Function

この関数を次のように使用します。

Sub Main()
    Dim StrGetNoForThisColumnName As String
    StrGetNoForThisColumnName = "Xfd"

    Msgbox "Final Result : " & Get_Col_Number(StrGetNoForThisColumnName, Len(StrGetNoForThisColumnName))
End Sub
于 2015-08-03T03:19:44.593 に答える