質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

5152閲覧

ExcelのVBA 「型が一致しません」を解決したい

rainbow0707

総合スコア2

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/10/15 04:26

編集2021/10/15 04:34

前提・実現したいこと

Excelの外部レポートのAPシートから週次レポートの日別シートへ転記させるマクロを組んでいます。
外部レポートの各項目は小数点を含む数値だが、表示には小数点を含まないもの(書式:通貨)や
関数で計算されていて、表示には小数点以下2桁のもの(書式:%)等があります。

変数設定で整数にはLong、小数点以下(15桁程あります)にはDoubleを設定していますが、
あるコードの部分からエラーになってしまいます。

エラーは出るものの、シートには正しい数値が貼り付けられています。
このコードを作成した際には何度試してもエラーが出ずに成功していたのと、
次のモジュールではその次のシートにも同じような作業をさせるのにエラーにはなっていません。
どこをどう修正していいのか調べても不明で行き詰っている状況です。

この問題を解決できればと思い、質問させていただきます。
お知恵を貸してください。よろしくお願いいたします。

発生している問題・エラーメッセージ

AP_CTR = AEsheet.Range("BG" & j).Value 一番最初に引っかかるのは上記のコードです。 黄色くハイライトされ、「実行時エラー'13': 型が一致しません。」と表示されます。 イミディエイトウィンドウで確認すると、上記以外に下記のコードでもFalseを返しています。 AP_CPC = AEsheet.Range("BH" & j).Value AP_CV = AEsheet.Range("BI" & j).Value AP_CVR = AEsheet.Range("BJ" & j).Value AP_CPA = AEsheet.Range("BK" & j).Value AP_完了CVR = AEsheet.Range("BM" & j).Value AP_完了CPA = AEsheet.Range("BN" & j).Value

該当のソースコード

'変数設定 Dim 日別_date As String, AP_date As String Dim i As Long, j As Long, AP_COST As Long, AP_IMP As Long, AP_CLICK As Long, _ AP_CPC As Long, AP_CV As Long, AP_CPA As Long, AP_完了CV As Long, AP_完了CPA As Long Dim AP_CTR As Double, AP_CVR As Double, AP_完了CVR As Double '週次レポートの日別シートのB列を取得 For i = 8 To cmax1 日別_date = datasheet.Range("B" & i).Value '外部レポートのAPシートのM列を取得 For j = 62 To cmax2 AP_date = AEsheet.Range("M" & j).Value '週次レポートの日別シートのB列と外部レポートのAPシートのM列をマッチング If 日別_date = AP_date Then AP_COST = AEsheet.Range("BC" & j).Value AP_IMP = AEsheet.Range("BD" & j).Value AP_CLICK = AEsheet.Range("BF" & j).Value AP_CTR = AEsheet.Range("BG" & j).Value AP_CPC = AEsheet.Range("BH" & j).Value AP_CV = AEsheet.Range("BI" & j).Value AP_CVR = AEsheet.Range("BJ" & j).Value AP_CPA = AEsheet.Range("BK" & j).Value AP_完了CV = AEsheet.Range("BL" & j).Value AP_完了CVR = AEsheet.Range("BM" & j).Value AP_完了CPA = AEsheet.Range("BN" & j).Value Exit For End If Next '週次レポートの日別シートのC列~M列に出力 datasheet.Range("C" & i).Value = AP_COST datasheet.Range("D" & i).Value = AP_IMP datasheet.Range("E" & i).Value = AP_CLICK datasheet.Range("F" & i).Value = AP_CTR datasheet.Range("G" & i).Value = AP_CPC datasheet.Range("H" & i).Value = AP_CV datasheet.Range("I" & i).Value = AP_CVR datasheet.Range("J" & i).Value = AP_CPA datasheet.Range("K" & i).Value = AP_完了CV datasheet.Range("L" & i).Value = AP_完了CVR datasheet.Range("M" & i).Value = AP_完了CPA Next End Sub

※VBA/マクロに関しては素人なので色々おかしなコードが混在しているかもしれないです。

###ここに言語名を入力

VBA 

試したこと

型が一致しません について色々調べましたが、有力な解決方法が見つかっていません。 通貨(¥)表示のCPC等では表示自体に小数点が含まれていませんが、関数の答え自体には小数点以下が含まれているので、 LongからCurrencyやSingleやDoubleに変えてみましたが上手くいきませんでした。 パーセンテージ(%)表示のCTR等では小数点が最高で15桁程あるのでDoubleを用いてエラーになっているので、 Decimal を使うのかも考えましたが、宣言ができないとのことで記述の仕方がわからずまだ試せていません。 ちなみに黄色くハイライトされた AP_CTR = AEsheet.Range("BG" & j).Value この上にカーソルを合わせると薄くポップアップが出てくるのですが、 AP_CTR = 1.65160422926585E-03 AEsheet.Range("BG" & j).Value = "" と表示されるのが型に関係あるのか調べたぐらいです。 Doubleの型の範囲を超えたのであればオーバーフローと表示されるはず、と思ったので 範囲を超えてる訳ではないかと思っています。

補足情報(FW/ツールのバージョンなど)

Excelは「Microsoft 365 Apps for business」
バージョン2109

ローカルフォルダが会社のOneDriveに接続されている状態で使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらくセルが空欄か数値以外の値(文字列とか)が入っているのだと思います。

エラーが出るコードの前に下記のようなデバッグ用のコードを挿入してコードを実行して、エラーが出たらイミディエイトウィンドウで結果を確認してみてください。

vba

1 Debug.Print "型: " & TypeName(Range("BG" & j).Value) 'このコードを挿入 2 Debug.Print "値: " & Range("BG" & j).Value 'このコードを挿入 3 AP_CTR = AEsheet.Range("BG" & j).Value 'エラーの出る行

もし、数値以外ならどうしたいのかによって対処法は変わってきますので、それを明確にしてください。

投稿2021/10/15 05:31

編集2021/10/15 06:28
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rainbow0707

2021/10/15 06:17

>hatena19さん 上記ご回答頂きありがとうございます! ご教示頂いた通りのコードの”A11”をエラーが出ているコードの最初にマッチングするセル”BG62”に置き換えてイミディエイトウィンドウで確認したところ、次のような結果が出ました。 (確認の仕方合ってますでしょうか・・・?) ----------------------------------------------- ?TypeName(V) Empty ?Range("BG62") 0.001848905705809 ----------------------------------------------- Emptyを調べると、「初期化していない」「宣言だけして代入していない変数」の場合はTypeNameはEmptyという文字列を返す、と出ていますが、貼り付け元の外部レポートのAPシートに誤りがあるということでしょうか? この場合、貼付元が関数で表示されていると文字列扱いになってしまうという可能性もございますか? >もし、数値以外ならどうしたいのかによって対処法は変わってきますので、それを明確にしてください。 各項目で設定されてる表示(小数点第2位までの●.●●%や小数点を含まない¥表示)の通りに貼付けしたいです。お手数ですがよろしくお願いいたします。
hatena19

2021/10/15 06:26

コードが間違ってましたので、回答のコードを修正しましたので、もう一度実行して確認してもらえますか。エラーが出て止まった時のイミディエイトウィンドウの最後の2行をコピーして貼り付けてもらえますか。
hatena19

2021/10/15 06:33

イミディエイトウィンドウに入力して確認するなら、 ?TypeName(V) ではなくて ?TypeName(Range("BG62")) です。 ただ、 ?Range("BG62") 0.001848905705809 となるなら、エラーが出ているのは、Range("BG62")ではないはずです。
rainbow0707

2021/10/15 08:55

コード修正頂きありがとうございました。 修正頂いたコードに変更したところ、イミディエイトウィンドウに以下のように出力されました。 (実は先程まで自動でイミディエイトウィンドウに出力されなかったため、自分で入力して確認してました) 型: Double 値: 0.001848905705809 この結果だとどうでしょうか?
hatena19

2021/10/15 09:08

その結果を見る限りはエラーがでるとは思えないですね。 セルの値を変数に代入した後、それをまたセルに代入するなら、変数の型をすべてVariantにしたらどうでしょう。これなら型不一致エラーはでないはずです。
rainbow0707

2021/10/18 09:18

返信が遅くなり申し訳ありません。 ご確認頂きありがとうございました。 ご教示頂いた通り、Doubleの箇所をVariantに修正したところ、無事にエラーも出ずに貼付できました! 大変助かりました!改めてありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問