• ベストアンサー

現在アクティブなワークブック名によって条件分岐させたいのですが

現在アクティブにしているワークブック名によって条件を分岐させたいのですが、下記のように記述すると「型が一致しません」とエラーが出てしまいます。これは何がおかしいのでしょうか。 (デバックモードでIf~Thenまでが黄色でマークされます) Excel2000を使用しています。よろしくお願いします。 Dim t As Single If ActiveWorkbook.Name="AAA.xls" Or "BBB.xls" _ Or "CCC.xls" then t=3.5

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

Option Explicit Sub test() Dim t As Single Select Case ActiveWorkbook.Name Case "AAA", "BBB", "CCC", "book1"   t = 3.5   MsgBox "小文字" Case "Book1"   MsgBox "大文字" Case Else   t = 4 End Select 'こんな感じでは? 'IF 文ですと If ActiveWorkbook.Name = "AAA" Or _   ActiveWorkbook.Name = "BBB" Or _   ActiveWorkbook.Name = "CCC" Then t = 3.5 End If 'VBAではこんな風 'なお 大文字と小文字を区別するようですね Debug.Print ActiveWorkbook.Name End Sub

noname#128465
質問者

お礼

解決しました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

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

すみません。タイプミスがありました。訂正します。 × Select Case UCase$(ActiveWorbook.Name)       ↓ ○ Select Case UCase$(ActiveWorkbook.Name) 

全文を見る
すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。KenKen_SP です。 >「型が一致しません」とエラーが出てしまいます。これは何がおかしいので > しょうか。 IF の構文が違います。この点は既に回答がでてますので省略。今回の場合、 Select Case を使った方がスッキリすると思います。 大文字・小文字の問題については、代表的な対策として次の3つの方法があり ます。オススメは 「対策3」です。 ・対策1 Option Compare Text   モジュールの先頭で「このモジュールでは大文字・小文字を区別しない」   と宣言しておくということです。 ・対策2 StrComp 関数で文字列比較のオプションを vbTextCompare にする   With ActiveWorbook     If StrComp(.Name, "aaa.xls", vbTextCompare) = 0 Then t = 3.5     If StrComp(.Name, "bbb.xls", vbTextCompare) = 0 Then t = 3.5     If StrComp(.Name, "ccc.xls", vbTextCompare) = 0 Then t = 3.5   End With ・対策3 UCase、LCase 関数等で比較する文字列の大文字・小文字を揃えておく   Select Case UCase$(ActiveWorbook.Name)     ’ブック名を大文字に     Case Is = "AAA.XLS", "BBB.XLS", "CCC.XLS" ’大文字で比較       t = 3.5     Case Is = "EEE.XLS"       t = 1.5     Case Else   End Select

noname#128465
質問者

お礼

解決しました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

ActiveWorkbook.Name="AAA.xls" Or ActiveWorkbook.Name="BBB.xls" _ Or ActiveWorkbook.Name="CCC.xls" としてみたらどうでしょう

noname#128465
質問者

お礼

解決しました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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と変更して試してみても同じエラーが出ました)

  • explodeと条件分岐

    次のようなプログラムを描きました。 /////////////////////////////////////////////////////////////// $A1 = $_POST['A1']; $B1 = $_POST['B1']; $fp = fopen("data.dat", "a+"); flock($fp, LOCK_EX); while($line = fgets($fp)){  list($A2,$B2) = explode("^", $line);  if($A1 == $A2 && $B1 == $B2) echo "成功";  else echo "ログイン失敗"; } //////////////////////////////////////////////////////////////// ここでdata.datの内容は…  AAA^AAA  BBB^BBB  CCC^CCC とします。 フォームから、A1=AAA,B1=BBBを与えたとき、 「成功」が出ると思っていたのですが、「失敗」と出てしまいます。 いろいろ考えてみたのですが、解決に至らず質問することにしました。 ご指摘、お願いします。 尚、フォームから正確に入力されていることと、 分岐のところを「if($A1 == $A2)」とすると、 正常に動くことは確認できました。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ■VBAマクロでワークブックAにワークブックBの集計をしたい。

    ■VBAマクロでワークブックAにワークブックBの集計をしたい。 ただし、ワークブックBは同じ番号で何個もあり、日付も並んでいません。 またワークブックAにあってBにない番号、また逆もあります。 それを日付が近いものから3つまで表示。 例) ワークブックA (sheet1)  番号 メモA1  メモA2 メモB1  メモB2 メモC1 メモC3 11111 2010/7/7  ccc 2010/5/5 ddd 2010/3/3 bbb 22222 2010/10/10 fff 2010/2/2 eee 35851 2010/12/12 ggg 54321 ワークブックB (sheet1) 番号  日付  メモ 11111 2009/1/1 aaa 11111 2010/3/3 bbb 11111 2010/7/7 ccc 11111 2010/5/5 ddd 22222 2010/2/2 eee 23568 2010/4/4 hhh 22222 2010/10/10 fff 35851 2010/12/12 ggg ※ワークブックAは最初項目と番号以外メモ部分は白紙です。例)は実行後の結果です。 質問で足りない部分ありましたら補足を入れますのでよろしくお願い致しますm(__)m

  • VBA の Application.Run でエラー発生

    独学で勉強したVBAなのですが、とても困っています。 AAA.xls BBB.xls CCC.xls というファイルがあるとします。 AAAを起動すると、BBBを起動して、 Application.Run "'BBB.xls'!TEST" で、BBBのTESTを実行するようにしています。 TESTを実行すると、 Workbooks.Open filename:=ActiveWorkbook.Path & "\CCC.xls", Password:="XXX", WriteResPassword:="XXX", ReadOnly:=True でCCCを起動して、CCCのシートの値をBBBにコピーしてくるようにしています。この一連の処理において、 「実行時エラー'2147352567(80020009)' 'Run'メソッドは失敗しました:'_Application'オブジェクト」 が発生します。 これらは共有サーバー上で動作させているのですが、 困ったことに、エラーが発生する人と、そうでない人がいます。 理由が全くわからず、非常に困っています。 教えていただけたらとても助かります。 何卒よろしくお願いいたします。

  • 標準モジュールが入っているワークブック

    Excel VBAです。 二つのワークブックを開いておいた状態で 両方のブック内のユーザーフォームを表示した状態にします。 この時、ある片方のワークブックを表示した状態でもう片方のユーザーフォームを使って 標準モジュールを実行したとします。 すると、当たり前ですが、エラーが出るか、間違った計算を行ってしまいます。 これを防ぐために、 if ActiveWorkbook.Name = xxxxx then といったものを用いる必要があります。 ワークブックの名称を書き換えるたびに このxxxxxのところも毎回書き換える必要があり、面倒なのですが、 実行した標準モジュールが入っているワークブック名を 返り値として返す関数ってありますか?

  • oracle 条件分岐について

    oracle10gです。 テーブルAから取得した項目aaaが"1"のとき、 テーブルBから項目bbbを取得する それ以外の場合、 テーブルCから項目cccを取得する という内容のSQLを一度に実行したいのですが、 ifやcaseで実行可能でしょうか。 ご教授いただきたいです。 よろしくお願いいたします。

  • MS-DOS 条件分岐

    MS-DOS5.00Aですが、BATファイル中で、指定したファイルを開くときにそのファイルが存在しなかった場合に、分岐させるにはどうしたらよいですか? イメージ↓ Copy AAA BBB if ”AAAがなかったら” goto ng echo コピーしました。 end :ng echo ファイルが存在しません。終了します。 end

  • VBAでif文にorを使う場合の仕様

    http://www.relief.jp/itnote/archives/vba-if-or.php このページにも書かれてあるのですが、 Sub textss() aaa = 2 If aaa = 0 Or 1 Then bbb = 1 ElseIf aaa = 2 Then bbb = 2 End If ccc = bbb End Sub を実行すると cccには2が代入されそうなのですが、実際には1が代入されてしまいます。 If aaa = 0 Or aaa = 1 Then と入力する必要があります。 それでは、 If aaa = 0 Or 1 Then とした時、プログラムではどういう処理がなされているのでしょうか?

  • 【VB.NET】複数のサブルーチンをすべて一気に抜ける方法?

    【VB.NET】複数のサブルーチンをすべて一気に抜ける方法?  今晩は,いつも勉強させていただいております. 質問させていただきます.どうぞよろしくお願いいたします.  環境:Vista+VB2008 でございます。 例えば下のようなコードがあったといたしまして、  Sub AAA    Call BBB  End Sub  Sub BBB    Call CCC  End Sub  Sub CCC    '★  End Sub 特定の条件の時のみ、★マークのところで、動作を終了したい (Sub AAAのEnd Subに移動したい)場合、どのようにすべきでございましょうか?? Exit SubだとSub CCCしか抜けてくれませんし(Sub BBBから実行を続行してしまう)、 フラグ立てだと  Public フラグ as string =""  Sub AAA    Call BBB    If フラグ = "抜ける" then Exit Sub     End Sub  Sub BBB    Call CCC    If フラグ = "抜ける" then Exit Sub     End Sub  Sub CCC    If (抜けたい時)then     フラグ = "抜ける"     Exit Sub    End If     End Sub のように、コードが少し見にくくなってしまいます。。。 何か他のスマートな方法などございましたら、是非ともご紹介いただきたくお願いいたします。 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • Excel2000マクロ_ブック名に一貫性が無くて既に開いている物の間のコピー等

    何方か、回答をお願いします。 (A.xlsのAAAシート)(B.xlsのBBBシート)この2つ間のセル値をコピーしたい のですが(共にブック名シート名に一貫性は無しで、既に開いています。) マクロ付.xlsに下記のマクロを書いてA.xlsのAAAシートがアクティブの時にマクロを 実行してtwwにAAAシートをセット出来たのですが、Bk1にB.xlsのBBBシートをセット出来ません。 Application.Waitで止めている間にアクティブシートを変えようとしましたが駄目 Application.Dialogs(xlDialogWorkbookUnhide).Showでも駄目でした。 何方か、マクロ実行中のアクティブシート変更方法を教えて下さい。 又、この様なブック名に一貫性が無くて既に開いている物の間のコピー等はどの様に するのか参考になる物が有れば教えて下さい。 Sub コピー() Dim Bk1 As Worksheet Dim tww As Worksheet Set tww = ActiveWorkbook.Sheets(1) 'ここが分かりません Set Bk1 = ActiveWorkbook.Sheets(1) '-------1個目 tww.Range("D10").Value = Bk1.Range("H9").Value Set Bk1 = Nothing: Set tww = Nothing End Sub

モバイル端末の認証で問題発生
このQ&Aのポイント
  • プレミアム機能を使用するため、モバイル端末の認証で送られてきたメールで認証をタップしたが反応がない。
  • お使いの環境はiOSで、接続は無線LANです。
  • 関連するソフト・アプリや電話回線の種類は特にありません。
回答を見る

専門家に質問してみよう