• ベストアンサー

エクセルVBAの記述方法について

もしアクティブなシートの名前が、「AA」か「BB」か「CC」である場合、というIF文を書きたいのですが、 If ActiveSheet.Name = "AA" Or ActiveSheet.Name = "BB" Or ActiveSheet.Name = "CC" Then というように書くしかないのでしょうか? たとえば If ActiveSheet.Name = OR("AA","BB","CC")のようなまとめて書く方法があったら教えてください。

  • moooon
  • お礼率70% (118/167)

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

  • ベストアンサー
回答No.3

Select Case ActiveSheet.Name  Case Is = "AA", "BB", "CC"   処理内容記述 End Select では?

moooon
質問者

お礼

これはオーソドックスな方法なのでしょうね。 とてもわかりやすかったです。 "AA", "BB", "CC"以外のシートならという条件で書くなら Select Case ActiveSheet.Name  Case Is <> "AA", "BB", "CC"   処理内容記述 End Select でよいでしょうか?

その他の回答 (7)

  • NCU
  • ベストアンサー率10% (32/318)
回答No.8

一旦変数に入れて素直に書けばよろしいかと。   Dim 名前 As String   名前 = ActiveSheet.Name   If 名前 = "AA" Or 名前 = "BB" Or 名前 = "CC" Then     MsgBox "該当"   Else     MsgBox "該当せず"   End If

moooon
質問者

お礼

ありがとうございます。

回答No.7

#3です。 > "AA", "BB", "CC"以外のシートならという条件で書くなら > Case Is <> "AA", "BB", "CC" でよいでしょうか? <> の場合、私は Select Case Selection.Value  Case Is = "AA", "BB", "CC"  Case Else   処理内容記述 End Select としています。(我流ですが)

moooon
質問者

お礼

ありがとうございました。 Case Is <> "AA", "BB", "CC" ではただしく判定してくれませんね。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.6

あまりトリッキーにするのは後々のメンテナンス時に 分かりにくくなるだけです。 Withを使えばコードが短くなるし処理速度も上がります。 --- With ActiveSheet If .Name = "AA" Or _ .Name = "BB" Or _ .Name = "CC" Then '処理 End If End With

moooon
質問者

お礼

ありがとうございます。 たしかにそうですね。とてもわかりやすいです。

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

If IsNumeric(Application.Match(ActiveSheet.Name, Split("AA,BB,CC", ","), 0)) Then 無理矢理一行でやってますが...こういうのでも?

moooon
質問者

お礼

ありがとうございます。

noname#22222
noname#22222
回答No.4

まあ、次のようなInclude関数を使えば多少はましかもです。 関数のオーバーヘッドを考慮しつつというところだと思います。 昔は、小さいアプリケーションではInclude関数も使っていました。 今は、余りにも小手先の芸当なので止めています。 Private Sub CommandButton1_Click()   If Include(ActiveSheet.Name, "AA,BB,CC") Then     MsgBox ""   End If End Sub Public Function Include(ByVal Text1 As String, _                 ByVal Text2 As String, _                 Optional ByVal Separator As String = ",") As Boolean   Include = InStr(1, Text2 & Separator, Text1 & Separator, vbTextCompare) End Function If Include(ActiveSheet.Name, "AA/BB/CC", "/") Then

moooon
質問者

お礼

ありがとうございます。 高度すぎて私には理解できないようです。すみません。

noname#112806
noname#112806
回答No.2

If "AA:BB:CC" Like "*" & ActiveSheet.Name & "*" Then こうゆうのもアリかな?

moooon
質問者

お礼

ありがとうございました。 これも、思いもよらないやり方でした!

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

If InStr( 1, "/AA/BB/CC/", "/" & ActiveSheet.Name & "/" ) >= 1 Then ――とか。 あんまり直感的じゃないですが。

moooon
質問者

お礼

ありがとうございました。 思いもよらないやり方でした!

関連するQ&A

  • エクセルの特定シート(複数)を印刷不可にするVBA

    教えてください。VBA超初心者です。 エクセルで、特定の複数のシート(指定シート)を印刷不可にする方法はありますでしょうか? いろいろと調べてみたところ、特定シート(一つ)を指定する場合はわかりました。 BBシート印刷不可。 ========================== Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> "BB" Then Exit Sub MsgBox "印刷できません" Cancel = True End Sub '========================== できれば、3つあるシートのうち、 AAシートは印刷可能。 BBシートとCCシートは、印刷不可。 としたいのです。 ご伝授いただけると助かります。よろしくお願いします。

  • Excel VBA 指定シートの有無確認

    指定した名前のシートがあるかないか判断させてますが、 以下のやりかたでは、 グラフ作成したシートを認識してくれません。 そのようにすれば良いでしょうか? Dim ws As Worksheet, flag As Boolean For Each ws In Worksheets If ws.Name = "シート" Then flag = True  Next ws If flag = True Then  msgbox "あります  Else  Sheets.Add  ActiveSheet.Name = "シート" End If

  • エクセルVBA If Then 構文でOR条件の場合のVBA記述方法は?

    仮にセル("A1")が空白か Falseの場合は Then 以下のことをする。 と書きたいのですが If Sheets("Sheet1").Range("A1")="" Then ~略 If Sheets("Sheet1").Range("A1")=False Then ~略 と別々に記載する方法しかわかりません。 ワークシート関数のようにIF(OR(A1="",A1=False),~略)というようにまとめて記述するにはどう書けばいいのでしょうか? AND条件の場合も教えてください。よろしくお願いします。

  • 印刷後のVBAの実行 (2)

    Private Sub Workbook_BeforePrint(Cancel As Boolean)   If ActiveSheet.Name = "Sheet1" Then     If Range("D6").Value = "" Then       Cancel = True       MsgBox ("名前を入力してください")       Range("D6").Select       Exit Sub     End If   Else     If ActiveSheet.Name = "Sheet2" Then       If Range("C11").Value = "" Then         Cancel = True         MsgBox ("受付時間を入力してください")         Range("C11").Select         Exit Sub       End If     Else              Exit Sub     End If   End If   ActiveSheet.Range("A70:Y70").Copy   If Worksheets("Sheet3").Range("A1").Value = "" Then     Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues   Else     Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _       Paste:=xlPasteValues   End If   Application.CutCopyMode = False   ActiveSheet.Range("A1").Select End Sub 先日、上記のコードを回答者の方から教えてもらい、とても助かっていますが sheet1のD5に「不要」という文字が入っていた場合、 sheet3への貼り付け(23~30行目の作業)をキャンセルして、最後にsheet1のA1を選択するようにはどの様にしたらいいでしょうか?

  • excel 2007 VBA コードの記述

    Excel 2007 を使用しています。 TEST.xlsm というブック内に テスト01 というシートを作成し、そのタブを右クリックして コードの表示 を選択。 表示されたVBAコード入力シートに下記のコードを記述して使用してます。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から If Intersect(Target, Range("E3:E33,G3:G33,AH3:AH33,AJ3:AJ33,BK3:BK33,BM3:BM33")) Is Nothing Or Selection.Count <> 1 Then Exit Sub Application.EnableEvents = False If Target <> "" Then If IsNumeric(Target) Then Target = Target - 23 End If End If Application.EnableEvents = True End Sub 'この行まで この条件に新たに下記のコードを追加したいと思い ネット検索しながらあれこれ試行錯誤してますが まだまだVBA初心者のため上手く機能してくれません。 ※上のコードだけなら思った通りに機能します。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から If Intersect(Target, Range("Y3:Y33,BB3:BB33,CE3:CE33")) Is Nothing Or Selection.Count <> 1 Then Exit Sub Application.EnableEvents = False If Target <> "" Then If IsNumeric(Target) Then Target = Target - 30 End If End If Application.EnableEvents = True End Sub 'この行まで どなたかこれら二種のコードを一つにまとめた記述方法を 教えて頂けますでしょうか?

  • 印刷後のVBAの実行 (3)

    Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "Sheet1" Then If Range("D6").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("D6").Select Exit Sub End If Else If ActiveSheet.Name = "Sheet2" Then If Range("C11").Value = "" Then Cancel = True MsgBox ("受付時間を入力してください") Range("C11").Select Exit Sub End If Else Exit Sub End If End If If Worksheets("Sheet1").Range("D5") = "不要" Then GoTo P1 ActiveSheet.Range("A70:Y70").Copy If Worksheets("Sheet3").Range("A1").Value = "" Then Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues Else Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If Application.CutCopyMode = False P1: ActiveSheet.Range("A1").Select End Sub sheet1のD5に「不要」と入っていたら 24~33行目の作業がキャンセルになりますが sheet2のD5にも「不要」と入っていたら、同じ様にキャンセルできる様に出来ますでしょうか? ご回答お願いします

  • ExcelのVBAでGoToの代わりに…

    お世話になっています よく、gotoは悪名高いとか、使わないほうが良いとか言われていますが、何故なのでしょう?? 使わないようにしようと思っても、別の方法がわからず使ってしまっています。 例えば、「aaa」というシートがあるかどうか調べ、なければ作成するとした場合、 Dim myWS As Object For Each myWS In Worksheets If myWS.Name = "aaa" Then GoTo 1 Next Worksheets.Add ActiveSheet.Name = "aaa" 1 次の処理 というように書いていますが、これをgotoを使わないで…となるとどのように書いたら良いのでしょうか?

  • エクセルVBAについて

    お世話になりなります。 以下のように条件が合わない場合、何もせずにNの値を増やして同じくIF文で判断する場合 ***にどのように書けばいいのでしょうか? よろしくお願いします。 Sub ボタン1_Click() Dim a As String For n = 1 To 30 a = Cells(n, 1) aa = Left(a, 1) aaa = Val(aa) If aaa = "" Then *** If aaa <= cha(30) Then *** If aaa >= cha(40) Then *** Else Cells(n, 3) = a Next End Sub

  • VBA Evaluate関数 型が一致しません

    Excel2003 VBAのEvaluateで以下の数式を実行すると エラー「型が一致しません」となってしまいます。 類似の質問を検索していろいろ参考にしてみたのですが 解決できなかったので質問させてください。 Sub test() Dim aa, bb, cc As String Dim y As Byte y = 1 With Sheets("Sheet1") aa = ".Cells(y, 1) > 0" bb = Left(aa, InStr(aa, "y") - 1) cc = Mid(aa, InStr(aa, "y") + 1) If Evaluate(bb & y & cc) Then ←ここでエラーになります。 y = 2 End If End With End Sub .Cells(1, 1)には10が入力されています。 宜しくお願い致します。

  • エクセルVBAで

    マクロにて ==================== If ws.Name <> "A" Then For i = 8 To 26 Step 2 ==================== 前後省略  ws=ワークシートです こんなコードを「いただいて」使用してましたが このたびB,Cとワークシートが増えてしまいました で、If ws.Name <> "A""B""C" Then とか   If ws.Name <> ("A""B""C") Thenとか やってみましたが駄目でした(ToT) どう記述すれば3つ「以外」のコードに なりますか?素人なりに考えたのですが・・・・ 教えてください

専門家に質問してみよう