2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

外資系会社でプログラム開発をしていると、意外なところで落とし穴に出くわします。特にVBAを使った開発では、環境の違いが思わぬトラブルを引き起こすことがあります。

この記事の鍵は、VBAのプログラムは記号も含めてすべて英語で書くこと

実際起こったシチュエーション

今回の出来事は、日本のPCでVBAコードを開発し、テストしていたときのこと。使用する環境として、日本語版のWindows PCと中国版のWindows PCがありました。日本のPCでテストを行ったときは問題なく動作していたVBAコード。しかし、中国のPCで同じコードを実行した途端、動作しなくなったのです。

「え、なんで?コードは正しいはずなのに」

動作確認済みのコードが別の環境で動かないのは納得できません。エラーも出てこないので、本当に分かりませんでした。色々な方のPCで実験したところ、日本語版のWindows PCでは動いたが、中国版のWindows PCでは動かないことが発覚!どうやら言語設定やロケール(地域設定)が原因のようでした。

VBAコード内で日本語のメッセージや文字列が含まれている部分が、中国版の環境では適切に解釈されず、エラーを引き起こしていたのです

実際のメール送信コード

日本語版のWindows PC:実行OK

VBA
    ' メールを作成
    Set OutlookMail = OutlookApp.CreateItem(0) 
    With OutlookMail
        .To = "example1@gmail.com" 
        .CC = "example2@gmail.com" 
        .Subject = "テストメール" 
        .Body = "こんにちは!これはExcel VBAを使ったテストメールです。" 
        .Display 
    End With

中国版のWindows PC:実行できない → 日本語が反映されない

VBA
    ' メールを作成
    Set OutlookMail = OutlookApp.CreateItem(0) 
        .To = "example1@gmail.com" 
        .CC = "example2@gmail.com" 
        .Subject = "    " 
        .Body = "                   " 
        .Display 
    End With

解決方法

excelのセル指定にし、日本語はexcelに書く

スクリーンショット 2024-12-21 11.30.10.png

VBA
    ' メール送信処理
    For i = 2 To lastRow 
        Set OutlookMail = OutlookApp.CreateItem(0) 
        With OutlookMail
            .To = ws.Cells(i, 1).Value 
            .CC = ws.Cells(i, 2).Value
            .Subject = ws.Cells(i, 3).Value 
            .Body = ws.Cells(i, 4).Value 
            .Display 
        End With
    Next i

この方法を使い、両方のPCで動きました

まだこれはいい方

エラーにはなっていないけど、コード見たらわかるから。

もっとややこしいのは、「空白、記号」

実際の句読点を使ったコード (お題:1単語ごと句読点を追加する)

日本語版のWindows PC:実行OK

VBA
        ' 例: 1単語ごとに句読点を追加
        If i < UBound(words) Then
            result = result & "、" ' 途中に読点を追加
        End If
    Next i

中国語版のWindows PC:実行できない

VBA
        ' 例: 1単語ごとに句読点を追加
        If i < UBound(words) Then
            result = result & "、" ' 途中に読点を追加
        End If
    Next i

見た目同じなのになぜ??

「、」が、PC城では日本語と中国語で違う句読点になっていた
「今日は、暑い」が「今日は,暑い」になったことありませんか? それと同じで見た目同じでも違うみたいです。

これは調べても出てこない、😅

解決方法

英語の「,」にする

VBA
        ' 例: 1単語ごとに句読点を追加
        If i < UBound(words) Then
            result = result & "," ' 途中に読点を追加
        End If
    Next i

最後に

文字も記号も、すべて英語で書くこと

エラーにならないエラーが一番厄介ですね。。。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?