VBAエラー13「型が一致しません」|金額セルを確認

VBAエラー13「型が一致しません」|金額セルを確認

記事
IT・テクノロジー
カテゴリ:VBA・マクロ

「型が一致しません」と出たとき、数値を受け取る変数が、見出しや「未定」という文字を読んでいることがあります。変数の型を変える前に、読み取るセルを確かめましょう。

数値を入れる行で止まる場合の直し方です。ここでは1つの金額セルをDouble型へ入れる処理を見ます。

1.コードと金額セルを見比べる

「売上」シートのB1が見出しの「金額」、B2が数値の1000なのに、次のコードでB1を読んでいる例です。

Dim amount As Double
amount = ThisWorkbook.Worksheets("売上").Range("B1").Value

Doubleは数値を入れる型です。「金額」という文字を数値として代入できず、エラー13の原因になります。

ThisWorkbookは、マクロが入っているブックを指します。今見ているブックと同じとは限りません。別ブックや個人用マクロブックから動かしている場合は、まず処理対象を確認してください。

2.確認できたセルへ参照を直す

編集前のブックを別に残します。この例では、読みたい金額がB2にあると確認できたら、代入行のB1だけをB2へ直します。

amount = ThisWorkbook.Worksheets("売上").Range("B2").Value

B2が数値の1000なら、amountに入る値は1000です。自分の表でも、シート名・セル番地・読みたい金額を照合してから直します。B2へ変えればどのマクロでも直る、という意味ではありません。

02_金額セルの参照確認_説明図.png
3.参照先が合っていたら中身を確認する

セルが「未定」などの文字なら、正しい金額が分かったときだけ入力を直します。未確定の金額を0に置き換えないでください。

#N/Aなどのセルのエラー値も、そのままDoubleへ代入できません。元の数式や参照先が直るまで処理を進めず、数式を消して金額を埋めることも避けます。

数字だけの文字列は数値に変換される場合があるため、「文字列ならすべて原因」とは判断できません。また、Range("B2:B3").Valueのように複数セルを読む場合は配列になるため、今回の1セルの例とは別に確認します。

4.再実行前に途中の処理を確認する

すでに転記・保存・印刷された分がないか確認し、二重処理を避けます。コピーで試す場合も、コード内のブック名や出力先が原本を指していないか確かめてください。処理後は、参照した金額と転記・計算結果を照合します。

すべてをVariantに変えたり、On Error Resume Nextでエラーを隠したりするだけでは、金額の読み違いが残ります。

カスタマイズやご要望がある場合は、お気軽にご相談ください。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す