前提・実現したいこと
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に接続されている状態で使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/15 06:17
2021/10/15 06:26
2021/10/15 06:33
2021/10/15 08:55
2021/10/15 09:08
2021/10/18 09:18