0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ExcelVBAで多言語対応をする

Posted at

ExcelVBAで多言語化対応をすることになったので、備忘録としてまとめます。

ExcelVBAでフォームを使ったアプリを作ったところ、英語でも表示できるようにしたいと要望がありました。
当然、多言語に対応するための機能はありません。
そこでVisual Studioでの多言語対応の方法を参考に、同等の機能をExcelVBAでも再現してみました。

実装イメージ

1.使用する単語をシートにまとめる
2.クラスモジュールに単語を格納するプロパティを追加する
3.CallByName関数を使い、指定された言語の文字列をプロパティに格納する
4.クラスモジュールに格納された文字列を使用する

使用する単語をシートにまとめる

言語情報を記載するシートを用意します。
image.png

ここで記載するのは識別用の名称と各言語ごとの内容です。
識別名称はこのあとクラスモジュールに文字列型パラメータの名称として使います。
言語については横方向に列挙します。
また、テーブル化しておくと以降のコーディングがしやすくなります。

クラスモジュールに単語を格納するプロパティを追加する

textResCls
Public TXT_HELLO As String

新規にクラスモジュールを作成し、シートに記載した識別名称を使って文字列型プロパティを定義します。
このクラスモジュールではプロパティの定義のみ行います。

CallByName関数を使い、指定された言語の文字列をプロパティに格納する

標準モジュール
'言語設定(読み出し列)
Const LANG_JA As Integer = 2
Const LANG_EN As Integer = 3

'テキストリソースオブジェクト
Public TXT_RES As New textResCls


Public Sub LoadTextResource()

    textValues = ThisWorkbook.Sheets("言語").Range("言語テーブル").Value

    For idx = LBound(textValues) To UBound(textValues)
        '指定された言語の文字列をテキストリソースオブジェクトに格納
        CallByName TXT_RES, textValues(idx, 1), VbLet, CStr(textValues(idx, LANG_JA))
    Next idx

End Sub

言語テーブルから対応した内容を取得します。
CallByName関数を使い、クラスオブジェクトの対応するプロパティに文字列を設定していきます。
言語を切り替える場合は読み出し列の定義を変えます。
上記では固定になっていますが、可変にしてリスト等から選べるようにすることもできます。

クラスモジュールに格納された文字列を使用する

UserForm
Private Sub UserForm_Initialize()

    'テキスト読み出し
    LoadTextResource
    
    'コントロールに設定
    Label1.Caption = TXT_RES.TXT_HELLO

End Sub

フォームの初期化タイミングの先頭で文字列の読み出し処理を行います。
その後、ラベルに表示したい文字列を設定しています。

image.png
今は日本語を指定しているので「こんにちは。」と標示されます。
読みだす言語を英語(LANG_EN)に切り替えると英語に登録した文字が表示されます。
image.png

単語の追加はシートとクラスモジュールのメンテナンスだけでできます。
プロパティの定義も、シート上でコードを自動的に作れるようにしておくと、定義もコピペですむようになります。(「Public [プロパティのセル番号] As String」で文字列を作成)

ExcelVBAで多言語対応というニッチな機能ですが、こういうやり方もあるということで覚えておいていただければと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?