プロが教える店舗&オフィスのセキュリティ対策術

なぜこんな初歩的なVBAのIf文でエラーか発生して使えないのか、全く理解出来ません。誰か助けてください。

質問者からの補足コメント

  • これがその内容です。

    「なぜこんな初歩的なVBAのIf文でエラー」の補足画像1
      補足日時:2022/12/26 23:28

A 回答 (7件)

エラーが発生したのでしたら、エラーメッセージを記載してください。

    • good
    • 1
この回答へのお礼

すみません。実行時エラー'13'
型が一致しません

と出ました。

お礼日時:2022/12/26 23:44

補足ありがとうございます。


直るかどうかちょっとわかりませんが、上の行のAXの代入の後ろに、「.value」をつけてみてください。

だめな場合は、IsNumelicを判定してみてください。
https://uxmilk.jp/48323
    • good
    • 1

こんばんは。



型が違うという事は、AXの中身は数字ではないという事になりますが、
AXに、どの様なプログラムで、値を入れているかによるかと。

AX = 〇〇〇〇〇〇 ← ここが、どう書かれているか?
    • good
    • 0

エラーで黄色いマーカーが出ている時に、そのIF分のAXにカーソルを当ててみたらどう表示されるか?



実際その周辺の画像より、AXがどんな方で宣言されているかなど含めコードを文字でコピペした方がわかるかもですね。
あとはエラーの時のyyとxxにもカーソルを当て、該当するセルの値がどうなっているのかとか?
    • good
    • 0

こんにちは



コードの断片しかないので、はっきりしたことはわかりませんけれど・・

Calculate ってApplication や Worksheet のメソッドとして存在するので、ご提示のIF文の前にエラーが出るのでは? ・・って思ったら、どうやら変数名なのね。(←紛らわしい)
(変数宣言がないと、エラーになる可能性がありそう)


他の方の回答にもありますが、変数宣言をどうしているのかにもよりますが・・
どこにも情報がないので、そのあたりは正しく(?)処理できているものと仮定します。

ごく単純に、セル値に関数等が入っていて結果がエラー値になっている場合を想定してみました。
変数 AX が、数値型や文字列で宣言されていると、IF文の1行前の代入文でエラーになります。
変数 AX が Variant の場合は、代入文ではエラーは出ませんが、AX = 0 の評価時にエラーが発生します。
多分、ご質問の場合は、こちらのケースに該当するのではないでしょうか?

・・ということで、
処理しているセル範囲に、エラー値が含まれているだけってオチではありませんか?
    • good
    • 3

こんにちは


>初歩的なVBAのIf文でエラーか発生して使えないのか
初歩的な事と思った時には、初歩的な事を確認していきましょう

If AX = 0 Then を成立させるためには AXは数値を入れられる変数型でなくてはなりません

If AX = 0 Then ここで13エラーが発生して代入時
AX = Calculate.Cells(yy + 3 , xx + 1) でエラーが出ないと言う事は

変数AX は String型 か Variant型 になっています
この事から、変数宣言をしていないのではないかと思いますが
変数宣言を行っている場合は型宣言を加えてください
(Variant型は代入時の変数型になります)

Dim AX As Integer または Longなど

変数宣言をすると上の行の
AX = Calculate.Cells(yy + 3 , xx + 1) で同様のエラー13が出ると思います

これは、Calculate.Cells(yy + 3 , xx + 1) に入っている値が数値ではない事が原因です
このセルに文字が入っていたり、関数(数式)などで "" や文字列表示になっていたり、数式がエラーを返していたり(これはご質問の場合ないかと)、空のセルになっているなどが考えられます

対処方法は#2様が示されています①か
ご質問の見えるコード部分では変数を使用するメリットが見えないので②で対応します

①IsNumelicでCalculate.Cells(yy + 3 , xx + 1)を事前に判定する
②変数を使わずそのままCalculate.Cells(yy + 3 , xx + 1) が0の時処理をするようにする

具体的には ②の例(理解を深める為にはお勧めしませんが)
AX = Calculate.Cells(yy + 3 , xx + 1)を消す

If AX = 0 Then を
Calculate.Cells(yy + 3 , xx + 1) = 0 And Calculate.Cells(yy + 3 , xx + 1) <> "" Then に書き換える

Check.Cells(yy + 9, xx + 2) = AX を
Check.Cells(yy + 9, xx + 2).Value = Calculate.Cells(yy + 3 , xx + 1).Value に書き換える

①については
If IsNumeric(Calculate.Cells(yy + 3, xx + 1)) Then
AX = Calculate.Cells(yy + 3, xx + 1)
If AX = 0 Then
Check.Cells(yy + 9, xx + 2) = AX


関係ない所ですがCalculateやCheckは変数名としては避けた方が良いと思いますCalculateはメソッドがありますし、シートの痕跡を残した方が良いのではないかと思います

回答を書くのにながらで時間がかかって重複してしまいましたが、書いたので回答します
    • good
    • 0

#6です


大分勘違いをしてしまったかもですので訂正します
>数式がエラーを返していたり(これはご質問の場合ないかと)

比較なので比較できない
対象セルの数式がエラーになっている可能性が高いかな

他については Ifのエラーとは関係ないかも知れませんが
変数の扱い方として理解されてください
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A