• ベストアンサー

EXCELのマクロに関する質問です

アクティブなワークブックの名前に応じて処理を変更したいと思い以下のような記述をしたところ「型が一致しません」とエラーが出てしまいました。これは何がいけないのでしょうか。 デバッグモードで4行目のIfからThenまでが黄色く表示されます。 OSはWindows2000を使っています。よろしくお願いします。 Dim FN as String Dim p2 as Single FN = ActiveWorkbook.Name If FN <> "AAA" Or "CCC" Or "EEE" Or "GGG" Then p2 = p2 * 0.001 End If (アクティブなワークブックの名前がAAA、CCC、EEE、GGGのいずれでもないならば、p2に0.001を乗じる処理です。Dim FN as Variantと変更して試してみても同じエラーが出ました)

質問者が選んだベストアンサー

  • ベストアンサー
  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

If FN <> "AAA" Or "CCC" Or "EEE" Or "GGG" Then ですけれどこのような簡略な書き方はできません。 If FN <> "AAA" Or Fn<>"CCC" Or FN<>"EEE" Or FN<>"GGG" Then となるはずです。

noname#128465
質問者

お礼

お返事遅れてすみません。 無事解決しました。ありがとうございました。

その他の回答 (5)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

#5 ですが、、ごめんなさい。 #2 の方と内容が同じでしたね。スルーして下さい。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

こんばんは。 幾つも条件を列挙する場合は、Select Case を使うとスッキリするかな? メンテも楽だし。   Select Case FN     Case "AAA", "CCC", "EEE", "GGG"        ' 何もしない     Case Else        p2 = p2 * 0.001   End Select あと補足すると... VBA で文字列比較する場合は原則的に大文字と小文字を区別します。 できるだけ直接比較しないようにした方が良いでしょう。 例えば、上記コードだと Aaa でスルーしちゃいます。 そこで、StrComp で比較するか、Ucase または Lcase 関数などで 文字の大文字・小文字を統一してから比較するようにします。   ' 大文字に統一して比較する場合   Select Case UCase$(FN)     Case "AAA", "CCC", "EEE", "GGG" 限られた場面で使うコードなら気にする必要はありませんが、 汎用的なコードを書こうと思った場合には注意したい点だと思います。 ここで言う汎用とは、FN = ActiveWorkbook.Name の返す値で、 拡張子が大文字だったり小文字だったりで結果が異なるのを防ぐとか ...ですね。

noname#128465
質問者

お礼

お返事遅れてすみません。 無事解決しました。ありがとうございました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

すでに回答は出ていると思いますが >If FN <> "AAA" Or "CCC" Or "EEE" Or "GGG" Then のように否定形の複合条件は後でデバッグのとき間違えやすいです。 If FN = "AAA" Or FN ="CCC" Or FN ="EEE" Or FN ="GGG" Then Else  p2 = P2 * .001 End If の方が直感的に理解できませんか

noname#128465
質問者

お礼

お返事遅れてすみません。 無事解決しました。ありがとうございました。

回答No.3

あの~その~ 割り込んじゃいますね(笑) <> を連結(この言葉が妥当かどうか?)するときは and でないと・・・ If FN <> "AAA" and Fn<>"CCC" and FN<>"EEE" and FN<>"GGG" Then にしないと、 全部 p2 = p2 * 0.001 を処理してしまいます。 #1のベテランさんの只のチョイミスです。 suzukikunさん、あげあしを取ってすみません、余計なお世話でした。(コソコソ)

noname#128465
質問者

お礼

お返事遅れてすみません。 無事解決しました。ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

Dim p2 as Single Select Case ActiveWorkbook.Name Case "AAA","CCC","EEE","GGG" Case Else p2 = p2 * 0.001 End Select

noname#128465
質問者

お礼

お返事遅れてすみません。 無事解決しました。ありがとうございました。