Excelで異なる進数間の変換を行うユーザー定義関数の作成と活用法

Excelで異なる進数間の変換を行うユーザー定義関数の作成と活用法

Excelには標準で10進数と2進数、16進数を相互変換する機能がありますが、自由な進数間の変換を行うことはできません。そこで、今回はExcelで異なる進数間の変換を行うためのユーザー定義関数を作成し、その活用法について解説します。

ユーザー定義関数の利点

Excelには標準で数多くの関数が用意されていますが、場合によっては特定のニーズに対応する関数がないことがあります。そのような場合、VBA(Visual Basic for Applications)を使ってユーザー定義関数を作成することができます。ユーザー定義関数を利用することで、以下のような利点が得られます。

  • 標準の関数にない特定の処理が実現可能
  • 独自の関数を作成し、自分のニーズに合わせた処理ができる
  • 複雑な計算式を簡潔に表現できる

進数変換のユーザー定義関数「ConvertBase」

今回作成するユーザー定義関数「ConvertBase」は、任意の進数間で数値を変換するための関数です。この関数は3つの引数を指定することで、以下のように異なる進数間の変換が行えます。

  1. inputValue: 変換する文字列
  2. inputBase: 入力する文字の進数
  3. outputBase: 出力する文字の進数

例えば、以下のように関数を利用することができます。

  • 10進数の数値「25」を16進数に変換: =ConvertBase(“25”, 10, 16) → 結果: “19”
  • 16進数の数値「1C」を10進数に変換: =ConvertBase(“1C”, 16, 10) → 結果: “28”

ユーザー定義関数のVBAコード

以下のコードをVBAエディタ(Alt+F11で起動)から標準モジュールへ貼り付けてください(挿入→標準モジュール)。

Function ConvertBase(inputValue As String, inputBase As Integer, outputBase As Integer) As String
    Dim num As Long
    Dim convertedValue As String
    Dim i As Integer
    
    ' エラーチェック
    If inputBase < 2 Or inputBase > 36 Or outputBase < 2 Or outputBase > 36 Then
        ConvertBase = "Error: Base must be between 2 and 36"
        Exit Function
    End If
    
    ' 全角を半角に変換
    inputValue = StrConv(inputValue, vbNarrow)
    
    ' 小文字を大文字に変換
    inputValue = UCase(inputValue)
    
    ' 入力値を10進数に変換
    If inputBase <> 10 Then
        num = 0
        For i = 1 To Len(inputValue)
            num = num * inputBase + (InStr("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Mid(inputValue, i, 1)) - 1)
        Next i
    Else
        num = CLng(inputValue)
    End If
    
    ' 10進数の値を指定された出力進数に変換
    If num <> 0 Then
        Do While num <> 0
            convertedValue = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", (num Mod outputBase) + 1, 1) & convertedValue
            num = num \ outputBase
        Loop
    Else
        convertedValue = "0"
    End If
    
    ConvertBase = LCase(convertedValue)
End Function

使用例の解説

「ConvertBase」関数は、様々な進数間の変換に活用できます。以下では、いくつかの具体的な使用例を紹介します。

2進数から8進数への変換

2進数表記の「110101」という数値を8進数に変換する場合、以下のように関数を使います。

=ConvertBase("110101", 2, 8)

この式を実行すると、結果として「65」と表示されます。これにより、2進数の「110101」は8進数で「65」となることが分かります。

16進数から2進数への変換

16進数表記の「3A」を2進数に変換する場合、次のように関数を利用します。

=ConvertBase("3A", 16, 2)

この式を実行すると、結果として「111010」と表示されます。これにより、16進数の「3A」は2進数で「111010」となることが分かります。

全角文字を含む数値の変換

全角文字を含む数値(例: “3F”)を変換する場合でも、内部で半角に変換して処理するため、以下のように関数を使うことができます。

=ConvertBase("3F", 16, 10)

この式を実行すると、結果として「63」と表示されます。これにより、16進数の全角文字「3F」は10進数で「63」となることが分かります。

まとめ

Excelで異なる進数間の変換を行うユーザー定義関数「ConvertBase」を作成し、その活用法について解説しました。この関数を使えば、標準の関数では対応できない自由な進数間の変換を行うことができます。ぜひ、独自のニーズに合わせた計算やデータ処理に活用してみてください。

コメント