質問: ws.cells(1, 1).value & "," & picNum '123,124 end if ``` 転記先のセルの値は 123,124 と期待するのですが結果は 123124 です。 ###### 予想 おそらく 123,124 が転記されるときに数値と判定されて、かつデフォルトでカンマ抜きが指定されている ためカンマが抜かれたんだろうと考えています。裏付けるように転記先文字のフォーマットが「標準」から 「通貨」に変更されています。ちなみに二桁づつの数字(例:81,82)では同じようなことは起こらず フォーマットも「標準」のままです。 区切り文字を他に変えてプログラム自体は問題はないのですが、区切り文字の代表格であるカンマに 戻したいと思っています。 原因と対処法ありましたらご教授ください。 よろしくお願いします。
回答: エクセル君は入力する値が、 セルの表示形式が標準だと、 数値に読める値は数値に、 金額に読める値は通貨に、 日付と読める値は日付に、 セルの表示形式を、おせっかいして勝手に変えてくれます。 (数式に読めるものは、数式と判断しますよね?) 便利な場合もありますが、 VBAで制御していると余計なお世話の場面も多々あります。 エクセル君に、「これは絶対文字列だよ」と認識させる場合は、 最初にセルの表示形式を文字列にしておくか、 文字列の頭に「'(シングルクォーテーション)」を付けると、 数字の羅列や数式と読める文字列を文字列として表示してくれます。 ``` Sub test001() Const cmyMark1 As String = "'" Const cmyMark2 As String = "," Dim picNumOld As String Dim picNumNew As String Dim Rng As Range Set Rng = ActiveSheet.Cells(1, 1) picNumOld = Rng.Value picNumNew = 123 picNumNew = picNumOld & cmyMark2 & picNumNew If Left(picNumNew, 1) = cmyMark2 Then picNumNew = Mid(picNumNew, 2) Rng.Value = cmyMark1 & picNumNew End Sub ``` 参考URL>> Excelで入力したデータが、勝手に日付に変換されるのを止める方法