- ベストアンサー
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と変更して試してみても同じエラーが出ました)
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
If FN <> "AAA" Or "CCC" Or "EEE" Or "GGG" Then ですけれどこのような簡略な書き方はできません。 If FN <> "AAA" Or Fn<>"CCC" Or FN<>"EEE" Or FN<>"GGG" Then となるはずです。
その他の回答 (5)
- KenKen_SP
- ベストアンサー率62% (785/1258)
#5 ですが、、ごめんなさい。 #2 の方と内容が同じでしたね。スルーして下さい。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんばんは。 幾つも条件を列挙する場合は、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 の返す値で、 拡張子が大文字だったり小文字だったりで結果が異なるのを防ぐとか ...ですね。
お礼
お返事遅れてすみません。 無事解決しました。ありがとうございました。
- zap35
- ベストアンサー率44% (1383/3079)
すでに回答は出ていると思いますが >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 の方が直感的に理解できませんか
お礼
お返事遅れてすみません。 無事解決しました。ありがとうございました。
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
あの~その~ 割り込んじゃいますね(笑) <> を連結(この言葉が妥当かどうか?)するときは and でないと・・・ If FN <> "AAA" and Fn<>"CCC" and FN<>"EEE" and FN<>"GGG" Then にしないと、 全部 p2 = p2 * 0.001 を処理してしまいます。 #1のベテランさんの只のチョイミスです。 suzukikunさん、あげあしを取ってすみません、余計なお世話でした。(コソコソ)
お礼
お返事遅れてすみません。 無事解決しました。ありがとうございました。
- mshr1962
- ベストアンサー率39% (7417/18945)
Dim p2 as Single Select Case ActiveWorkbook.Name Case "AAA","CCC","EEE","GGG" Case Else p2 = p2 * 0.001 End Select
お礼
お返事遅れてすみません。 無事解決しました。ありがとうございました。
お礼
お返事遅れてすみません。 無事解決しました。ありがとうございました。