Excel VBAでRange.NumberFormatLocalが特定の文字でエラーになる原因と対策

Visual Basic

Excel VBAで図形のテキストを取得してセルに単位付きで表示する際、特定の文字(例:「m」)でNumberFormatLocalがエラーになることがあります。本記事では、この現象の原因と安全に書式設定を行う方法について解説します。

NumberFormatLocalでの文字列制約

Range.NumberFormatLocalは、数値書式として有効な形式でない文字列を設定するとエラーになります。例えば「#m」のように”m”を付加すると、Excelはこれを数値書式として認識できずエラーを返します。

一方で「個」や「枚」はExcelが非標準の文字として許容するため、エラーにならないことがあります。

エラーを回避する方法

安全に文字を付加するには、セルを文字列扱いにする方法やTEXT関数を使用する方法があります。例えば、VBA内で:

Range(“A3”).NumberFormat = “@”

と設定すると文字列扱いになり、任意の文字を後ろに付けてもエラーが発生しません。

具体的なマクロ例

図形のテキストを取得して安全にセルに反映する例:

Dim t As String
t = ActiveSheet.Shapes(“正方形/長方形 1”).TextFrame.Characters.Text
With Range(“A3”)
.NumberFormat = “@” ‘ 文字列形式に設定
.Value = .Value & t
End With

これにより「m」や他の単位文字でもエラーなく追加できます。

NumberFormatLocalを使う場合の注意

どうしてもNumberFormatLocalを使いたい場合は、Excelが許容する文字のみを付加する必要があります。単位がExcelの標準書式にない場合は、”@”による文字列扱いが最も安全です。

また、セルの内容が数値計算に使用される場合は、数値部分と単位部分を別セルに分ける設計も有効です。

まとめ

Excel VBAでRange.NumberFormatLocalを使う場合、特定の文字が原因でエラーになることがあります。特に「m」のような文字は数値書式として認識されないためです。

対策として、文字列形式に設定してから文字を付加する方法や、数値と単位を別セルに分ける設計を検討することで、エラーを回避し安全にマクロを実行できます。

コメント

タイトルとURLをコピーしました