• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【VBA】IF構文の条件式で範囲が同一の場合)

【VBA】IF構文で範囲が同一の場合の条件式のスッキリした記述方法

tsubuyukiの回答

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.6

例えば、 Sub Sample()   Select Case Left$(Cells(1, 1), 1)     Case "あ", "い", "う"       MsgBox "処理1" '    Case Else '      MsgBox "処理2"   End Select End Sub こんなのもアリかもしれないですね。 まだ冗長と言われるかもしれませんが。

rihitomo
質問者

お礼

select caseで一文字目を判別するんですね。 ワークシート関数も色んなやり方があって面白いと思ったんですが、VBAはそれ以上に方法が多彩ですね。 ありがとうございます。

関連するQ&A

  • 【VBA】 IFの中にIF

    いつもこちらの識者の方々にはお世話になっています。 VBAの質問です。 やりたいことは下記構文を見ていただければわかると思うのですが、 ------------------------------------------------------------------------------ Sub Test() Dim f As Long Dim lRow As Long lRow = Cells(Rows.Count, 1).End(xlUp).Row For f = lRow To 2 Step -1 If Cells(f, 2).Value = "りんご" Then Cells(f, 2).EntireRow.Delete Else Cells(f, 2).Value = Cells(f, 2) & "0" & Cells(f, 3) Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif End If Next f End Sub ------------------------------------------------------------------------------ Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif の部分が解決したい部分になります。 IFで条件分岐したあとの処理にさらにIFで分岐を加えたいのですが、無茶だと思いつつやってみたらやはり通りませんでした。 こういうのはなんというのでしょうか、ネストとも違うと思うのですが・・・ 上記のような場合、どのような構文が適していますでしょうか。

  • IFの構文で

    IF の構文を作っていますが Cells(p, 6) がブランクのとき何もしない Cells(p, 6)<= If Cells(p, 7) とき何もしない Cells(p, 6)< If Cells(p, 7) とき その列を削除する という文にしたいのですがうまくできません 自分なりに以下つくったのですが.... お教えいただければと思い投稿しました、どうぞよろしくお願いします。 Sub 削除() Dim p As Long Sheets("前P").Select For p = 200 To 7 Step -1 ’なにもしないで次の処理へ行く ここがうまくいかない If Cells(p, 6) = " " Then   ElseIf Cells(p, 6) < Cells(p, 7) Then Range(Cells(p, 2), Cells(p, 20)).Select Selection.Delete Shift:=xlUp End If Next p End Sub うまくいかないのは上記の構文だとブランクも削除の対象と なってしまうところです。 うまくブランクは残して実行する方法を教えていただきたいのですがよろしくお願いいたします。 .

  • IFステートメントの条件式が間違っているのでしょうか?

    エクセルVBA初心者です。下記の式を作りましたが、計算した結果が正しい答えになりません。構文エラーが出ないので構文は間違ってはいないと思うのですが、答えが違うので参っています。どなたか何が間違っているのかおしえて下さい。よろしくお願いします。 Cells(6, "E") にある数字時を入れた時の答えをCells(6, "G") に求めるものです。 Sub 計算() Dim my As Long If Cells(6, "E") <= 90 Then my = 50000 * Cells(6, "E") / 30 Cells(6, "G") = my ElseIf 90 < Cells(6, "E") <= 120 Then my = 50000 + 40000 * (Cells(6, "E") - 90) / 30 Cells(6, "G") = my ElseIf 120 < Cells(6, "E") <= 150 Then my = 90000 + 30000 * (Cells(6, "E") - 120) / 30 Cells(6, "G") = my ElseIf 150 < Cells(6, "E") <= 180 Then my = 120000 + 20000 * (Cells(6, "E") -150) / 30 Cells(6, "G") = my ElseIf 180 < Cells(6, "E") <= 210 Then my = 140000 + 10000 * (Cells(6, "E") -180) / 30 Cells(6, "G") = my End If End Sub

  • IF構文の使い方

    皆さんにはいつもお世話になっております。 エクセルVBAでご教授していただきたいことがあります。 1行目は空白行で、B2~CW51がデータがあるセルです。 A列は空白列で、B列(B2以降)にデータがある場合は、ListBox3の文字列を同行のcell(i , "A")に代入したいのですが。 下記のように、if構文を使ってみたのですが、うまくいきません。 Sub テスト_Click() Dim i As Integer With ActiveSheet For i = 2 To 51 If .Cells(i, "B") = "" Then .Cells(i, "A") = "" Else Cells(i, "A") = ListBox3.Value Exit For End If Next End With End Sub よろしくお願いいたします。

  • エクセルvba IFについて(複数条件)

    エクセルvbaでのifの構成について教えてください。 (1)*あいうえお   →あいうえお (2)あいうえお*   →あいうえお (3)*あいうえお*   →あいうえお     に変換させたいです。 以下のマクロを作りました。 Sub test() Dim c As Range For Each c In Selection.Cells If InStr(c, "*") = 1 Then c = Mid(c, InStr(c, "*") + 1) ElseIf InStrRev(c, "*") > 0 Then c = Left(c, InStrRev(c, "*") - 1) End If Next End Sub これだと(1)(2)はできるのですが、(3)は2回実行しないと全ての*が削除できないです。 1回の実行で「あいうえお」ができるようにするにはどうしたらよいのでしょうか。 本当は、 ****あいうえお**  →あいうえお のように、*(半角)や*(全角)が文字の前後についている場合、すべての*(半角)と*(全角)削除したいのですが(できれば1回の実行で)、そのようなことは可能なのでしょうか。 midやleftの作り方も間違っていれば、それもご教授ください。 よろしくお願いします。

  • VBAで分岐条件に名前をつける

    If文の条件を外にだしさらに下記のようにIf文の中で論理演算を させるようなプログラムを作りたいにのですが、 ExxelVBAでそのようなことはできますでしょうか? できるとしたら教えてください。よろしくお願いします。 sub test() S1=36 S2=48 ’こういう名前の付け方はできないが、要はS1>0という条件に条件1と名づけたい。 条件1:=S1>0 条件2:=S2>0 IF 条件1*条件2=true then cells(1,1)=1 else if 条件1=true then cells(1,1)=2 else if 条件2=true then cells(1,1)=3 else cells(1,1)=0 end if end sub

  • VBAについての質問です。日付を条件に入れて行削除をしたいのですが、うまくいきません。

    VBAの初心者です。よろしくお願いします。日付の条件を入れて行を削除したいと考えていますが、エラーになります。何故でしょうか? コードは以下のようにしています。 よろしくお願いします。 Sub 日付条件で行削除() Dim hiduke As Double Set hiduke = "2009/4/30"   For i = 16 To 12 Step -1 If Cells(i, "a") <= hiduke Then Rows(i).Delete End If Next End Sub

  • VBAのIF構文について

    VBAでまたわからないところが出てきたので質問させてください。 ActiveWorkbookのworksheet1のa1セルに何か文字列が入っていると仮定して、下記のstrSUB に入る文字列をifで分岐させたいのですが、どのような構文が適していますでしょうか? 下記の内容では、エラーになってしまいます。 識者の方々、よろしくお願いいたします。 ----------------------------------------------------------------- Sub test送信メール作成() Dim oApp As Object Dim objMAIL As Object Dim strSUB As String Dim strBODY As String Set oApp = CreateObject("Outlook.Application") Set objMAIL = oApp.CreateItem(0) strSUB = if ActiveWorkbook.Worksheets(1).range("a1") = "abc" then "aaa" Else "bbb" End If strBODY = "a" & vbCrLf _ & "b" & vbCrLf _ & "c" With objMAIL .To = "aaa@bbb.com" .CC = "ccc@ddd.com" .Subject = strSUB .Body = strBODY .Display End With End Sub

  • 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 とした時、プログラムではどういう処理がなされているのでしょうか?

  • VBA の if 文の質問です

    下記のようなif文を実行したのですが Or のあとの条件が無視されてしまっているようなのですが、このような書き方ではだめなのでしょうか? else if で地道に分岐させたほうがいいのでしょうか? If Cells(1, 1).Value <> "" Or Cells(1, 2).Value <> "test" Or Cells(1,3) <> 0 Then 処理内容 End If