Ribbit works
記事のトップ画像

【参照設定不要】Base64フォーマットにエンコードする

ExcelVBA

last modified date2021-9-7

publish date2021-8-16

Base64とはエンコード方式の1つで、64進数を意味する言葉です。

現在でも主にメールやソフトウェア、Web APIで使用されることが多いです。

今回はVBAを使って、テキストデータからBase64へ変換する方法を紹介いたします。

ソースコード

'*-------------------------------------------------------------
'* テキストをBase64でエンコード
'*
'* @param text 変換する値
'* @return Base64フォーマットデータ
'*-------------------------------------------------------------
Public Function EncodeToBase64(ByRef text As String) As String

  ' オブジェクトの準備
  Dim node As Object
  Set node = CreateObject("Msxml2.DOMDocument.3.0").createElement("base64")

  ' エンコード
  node.DataType = "bin.base64"
  node.nodeTypedValue = ConvertToBinary(text)

  ' 関数で取り除けない改行を削除して返却
  EncodeToBase64 = Replace(node.text, vbLf, "")
End Function

'*-------------------------------------------------------------
'* 文字列をバイナリデータに変換
'*
'* @param text 変換する値
'* @return バイナリデータ
'*-------------------------------------------------------------
Public Function ConvertToBinary(ByRef text As String)

  ' オブジェクトの準備
  Dim BinaryStream As Object
  Set BinaryStream = CreateObject("ADODB.Stream")

  ' Streamの設定
  With BinaryStream
    .Type = 2
    .Charset = "us-ascii"
    .Open
    .WriteText text
    .Position = 0
    .Type = 1
    .Position = 0
  End With

  ConvertToBinary = BinaryStream.Read
End Function

実行テスト

実行

Public Sub execute()
    Debug.Print (EncodeToBase64("aaa"))
    Debug.Print (EncodeToBase64("aab"))
    Debug.Print (EncodeToBase64("aac"))
End Sub

結果

YWFh
YWFi
YWFj

Base64について補足

Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。MIMEによって規定されていて、7ビットのデータしか扱うことの出来ない電子メールにて広く利用されている。具体的には、A–Z, a–z, 0–9 までの62文字と、記号2つ (+, /)、さらにパディング(余った部分を詰める)のための記号として = が用いられる。

Base64 - Wikipedia

上記引用の通り、Base64は現在でも幅広く使用されており、この他にBase16, Base32などもあります。

MIMEに規定されているため、VBAから使用する場合は、APIのMIMEタイプにBase64が指定されている場合などに使用することとなります。