1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

知らないと怖いExcelVBAの穴2~入力形式自動変換~

Last updated at Posted at 2026-01-05

1. はじめに

Excel VBAは導入しやすく、実務でも使用しやすい言語です。
そして比較的ゆるい言語でもあります。

その「ゆるさ」は、初心者にとっては優しさであり、
一方で実務では思わぬアクシデントを引き起こす原因にもなります。

このシリーズでは、すでにある程度VBAを身に着け、
業務に活用している方々への振り返りとして、
「動いているから大丈夫」と思いがちな、
Excel VBAの見落とされやすい落とし穴について触れていきます。

2. 入力形式自動変換とは

Excelには、セルに入力された値を自動的に解釈し、
数値や日付として変換する機能があります。

これは通常の表計算では便利な機能ですが、
VBAと組み合わせた瞬間に、意図しない挙動を引き起こします。

この挙動を、本記事では「入力形式自動変換」と呼びます。

3. よくある現象

セルに入力した値が、Excelの判断で勝手に型変換されます。

代表例:

入力したつもり 実際のセルの中身
012 12
1-2 2026/1/2
1/3 2026/1/3
1234567890123 1.23457E+12

ユーザーは「文字列」のつもりでも、
Excelは 数値・日付として解釈できるか? を最優先する仕様になっています。
これは手入力でも、VBAによる入力でも同様に発生します。

4. VBAで何が起きるのか① 値入力

次のコードを見てください。

VBA
Sub Sample()
    Dim Str As String
    Str = "012"
    Cells(1, 1).Value = Str
End Sub

VBAは確かにセルA1に値を012を入力しに行っていますが、
Excelがセル入力時点で 012を数値と判断し、12に変換してしまいます。

5. 4への対策:セル書式設定を入力前に変更

入力形式自動変換を防ぐには、
セルの書式を先に指定する必要があります。

VBA
Sub Sample()
    Cells(1, 1).NumberFormat = "@"
    Cells(1, 1).Value = "012"
End Sub

逆に値を入れてから書式を変えても、すでに変換されているため効果はありません。

6. VBAで何が起きるのか② セル値取得

セルA1の書式は標準で、2月1日が入力されていたとします

VBA
Sub Sample()
    Dim Str As String
    Str = Cells(1, 1).Value 
    MsgBox Str
End Sub

結果:メッセージボックスに2026/2/1(西暦は取得時により変化します)と表示。

VBAは正しくセルA1の値を取得していますが、

Excelでは

  • 見えている値
  • 実際に保持している値
    が一致しているとは限りません。
    そのため想定外の値が取得されることがあります。

7. 6への対策:セルの表示をそのまま取得

セル内表示をそのまま取得する場合は.valueではなく.textを使用します。

VBA
Dim Str As String
Str = Cells(1, 1).Text

ただし.textにも欠点はあり、
特にセル幅が足りずに正しく表示されていない場合に取得値が食い違ってしまいます。

8. なぜこの問題が厄介なのか

この問題が厄介なのは

  • VBAとしてはエラーにならないため一見正しく動く
  • セルの設定次第で結果が変わる

という点です。

つまり、

壊れていることに気づけないタイプの不具合です。

9. まとめ(教訓)

  • Excelは手入力でもVBAでも入力値を自動で型変換してしまうということ
  • VBAのvalueは基本的に「見た目」ではなく「中身」を扱うということ
  • Excel機能を意識していないと潜在的な不具合を抱えるということ

結論として、

Excel VBAで値を扱うときは「型をExcelに任せない」

これを意識するだけで、避けられる事故はかなり減ります。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?