結論
代入するセルに.NumberFormat = "@"
の処理をいれます。これでセルの書式を文字列に設定してから代入することで日付と認識されずにセルに代入できます。
実際に起きたことを再現
エクセルVBAを使用して、エクセルのセルに「1-1」という文字列を代入したいとします。下記のようなコードを記述しました。
Sub 検証()
ThisWorkbook.Worksheets(1).Cells(1, 1).Value = "1-1"
End Sub
上記のコードで実行すると、代入したセルには「1月1日」と表示されてしまいました。式も「2023/1/1」となり、日付として認識されています。
「1-1」を代入することができないか、調査しました。
調査
下記の記事が参考になりました。
「1-1」のような文字列は、エクセルが自動で日付として認識します。それゆえ、エクセルの表示も変わってしまうというものでした。NumberFormatに文字列を意味する「@」を設定することで文字列として認識させることができるようです。
調査を踏まえての対策
NumberFormatに「@」を設定してから「1-1」を代入します。
Sub 検証()
ThisWorkbook.Worksheets(1).Cells(1, 1).NumberFormat = "@"
ThisWorkbook.Worksheets(1).Cells(1, 1).Value = "1-1"
End Sub
これで、エクセルでも文字式として認識され、「1-1」と表示されます。
以上です。
参考