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」のような文字は数値書式として認識されないためです。
対策として、文字列形式に設定してから文字を付加する方法や、数値と単位を別セルに分ける設計を検討することで、エラーを回避し安全にマクロを実行できます。


コメント