9

vb.net を使用して Excel ファイルにデータを書き込もうとしています。したがって、数値列をExcelの文字列に変換する関数です。

Public Function ConvertToLetter(ByRef iCol As Integer) As String

    Dim Reminder_Part As Integer = iCol Mod 26
    Dim Integer_Part As Integer = Int(iCol / 26)

    If Integer_Part = 0 Then
        ConvertToLetter = Chr(Reminder_Part + 64)
    ElseIf Integer_Part > 0 And Reminder_Part <> 0 Then
        ConvertToLetter = Chr(Integer_Part + 64) + Chr(Reminder_Part + 64)
    ElseIf Integer_Part > 0 And Reminder_Part = 0 Then
        ConvertToLetter = Chr(Integer_Part * 26 + 64)
    End If


End Function

この関数は、他の数値でも問題なく機能します。

例えば、

  • 1 => A
  • 2 => B
  • ...
  • 26 => Z
  • 27 => AA
  • ...
  • 51 => エイ
  • 52 => t (そして、これが失敗し始めたときです) AZ を返すはずが、t を返しました。

どの部分を間違えたのかわかりませんでした。誰かが私を助けたり、vb.net を使用して数値を Excel の文字列に変換する適切な関数をコーディングする方法を教えてくれたりできますか?

4

3 に答える 3

10

これはあなたが望むことをするはずです。

Private Function GetExcelColumnName(columnNumber As Integer) As String
    Dim dividend As Integer = columnNumber
    Dim columnName As String = String.Empty
    Dim modulo As Integer

    While dividend > 0
       modulo = (dividend - 1) Mod 26
       columnName = Convert.ToChar(65 + modulo).ToString() & columnName
       dividend = CInt((dividend - modulo) / 26)
   End While

   Return columnName
End Function
于 2015-08-12T20:32:59.887 に答える
0

これは 52 まで機能します。

Public Function ConvertToLetterA(ByRef iCol As Integer) As String

        Select Case iCol
            Case 1 To 26
                Return Chr(iCol + 64)

            Case 27 To 52
                Return "A" & Chr(iCol - 26 + 64)

        End Select

End Function

ちなみに、.Net 経由でEPPlusを使用して XLSX ファイルを直接書き込むことができます。必要に応じて、列に文字表記を使用したり、数字を使用したりできます。

于 2015-08-12T20:41:19.453 に答える
0

ロジックにはいくつかの欠陥があり、2 番目の else 句は不要であり、操作はゼロベースにする必要があります。

Public Function ConvertToLetter(ByRef iCol As Integer) As String
    Dim col As Integer = iCol - 1
    Dim Reminder_Part As Integer = col Mod 26
    Dim Integer_Part As Integer = Int(col / 26)

    If Integer_Part = 0 Then
        ConvertToLetter = Chr(Reminder_Part + 65)
    Else
        ConvertToLetter = Chr(Integer_Part + 64) + Chr(Reminder_Part + 65)
    End If


End Function
于 2015-08-12T20:34:45.593 に答える