VBAのプロシージャについて質問です

このQ&Aのポイント
  • VBAのプロシージャについての質問です。
  • AとBの2つのプロシージャを書く例を挙げています。
  • End Selectの前に入れるか後ろに入れるかはどうやって決めるのか、決めごとを教えてください。
回答を見る
  • ベストアンサー

VBAのプロシージャについて質問です

以下にA、B2つのプロシージャを書きます。 A  Sub kubun( ) Dim taipu As String Select Case Range("C27").Value Case 100,110,120 taipu="乗用車" Case 201,211,221 taipu="RV・4WD" Case 300,305,310 taipu="スポーツカー" Case Else taipu="正しいコードを入力してください" End Select MsbBox taipu ←←←← End Sub B  Sub iro( ) Select Case Range("C34").Value Case "RED" Range("C34").Font.ColorIndex=3 Case "BLUE" Range("C34").Font.ColorIndex=5 Case "PINK" Range("C34").Font.ColorIndex=7 Case "GREEN" Range("C34").Font.ColorIndex=10 Case Else MsbBox "RED,BLUE,PINK,GREENのいずれかを入力してください"←←←←     End Select End Sub A,Bの←←←←の部分ですが、End Selectの前に入れるか、 後ろに入れるかはどうやって決めるのですか。 こういう場合は前に入れる、こういう場合は後ろに入れるといった 決めごとを教えてください。 宜しくお願いいたします。

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

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

これは、正しい値が入力されている場合、Bはまったくメッセージが出ないけれど、 Aはメッセージが出る、という違いでしょう。

kakehasi
質問者

お礼

gomadare75さん、こんにちは。 MsbBox の命令文を Aでは End Selectの次の行に入れているが、 Bでは End Selectの前の行に入れています。 次の行なのか、前の行なのか、使い分けを知りたいのですが。

その他の回答 (1)

回答No.2

だから、Aの様にMsgBoxがEnd Selectの後なら、Select Case~End Select の外だから、Select Caseの結果と関係なくMsgBoxが実行されるけど、End Selectの前なら、Case elseに該当する場合だけ、MsgBoxが実行され、それ以外は実行されないという違いがあるわけです。 どちらか望むほうを選べばよいでしょう。

関連するQ&A

  • エクセルのVBAを教えて下さい。

    Private Sub OptionButton1_Click() Range("A15").Select Selection.Font.ColorIndex = 1 Range("B12").Select Selection.Font.ColorIndex = 1 Range("A18").Select Selection.Font.ColorIndex = 2 Range("B18").Select Selection.Font.ColorIndex = 2 Sheets("シート1").Image1.Visible = False Sheets("シート1").Image2.Visible = True End Sub 上記のようなプログラムがありますが、たとえば、以下をまとめてコンパクトに出来ますか? Range("A15").Select Selection.Font.ColorIndex = 1 Range("B12").Select Selection.Font.ColorIndex = 1 オートシェイプを利用して画像をエクセル内に作りました。 その画像を表示、非表示させたいのですが、どのようにすればよいでしょうか?よろしくお願いします。

  • VBAで別の列のセルにも色付け~2

    WINDOWS XP EXCELL 2003です。 いつもお世話になります。 ご迷惑とは重々と承知しながら再度質問させていただきます。 1 御指導を賜りたいのは、 現在A列には月度を示す 01~12 が入力され月別にセルの背景色を塗りつぶしていますがこれをA列用のマクロを工夫してF列にも同様に適用したい。 例えば参照図で言うと A7 05 ピンク  A8 05 ピンク A9 06 ライトブルー  A10 07 草色 等のように ※ 参照図のF列のセルには背景色は適用していません。 2 参照図のそれぞれの設定は、   ※ 計画 と 生産はセル位置だけの違いで生産の方は割愛します。 D1 ユーザー定義 mm/dd D2 ユーザー定義 200000 D3 数値 A7 ユーザー定義 mm マクロ ボタン「計画入力」 Sub 計画入力() Dim GYOU '追加 GYOU = Range("C65536").End(xlUp).Row + 1 Cells(GYOU, 2).Value = Range("D1").Value Cells(GYOU, 3).Value = Range("D2").Value Cells(GYOU, 4).Value = Range("D3").Value End Sub ボタン「セルセット」 Sub 計画セル()    Range("D1,D2,D3,D1").Select End Sub A列のセル塗りつぶし Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row >= 8 And Target.Address = Cells(Rows.Count, "C").End(xlUp).Address Then Target.Offset(0, 0).Value = Date End If Dim c As Integer If Target.Column <> 2 Then Exit Sub If Target.Value = "" Then c = 0 Else On Error GoTo line Select Case Month(Target.Value) Case 1: c = 46 Case 2: c = 4 Case 3: c = 39 Case 4: c = 6 Case 5: c = 7 Case 6: c = 8 Case 7: c = 43 Case 8: c = 3 Case 9: c = 44 Case 10: c = 24 Case 11: c = 40 Case 12: c = 17 End Select End If Target.Offset(0, -1).Interior.ColorIndex = c Target.Offset(0, -1).Font.ColorIndex = IIf(c = 1, 2, 0) Exit Sub line: Target.Offset(0, -1).Interior.ColorIndex = 0 Target.Offset(0, -1).Font.ColorIndex = 0 End Sub 御指導よろしく御願いします。

  • VBA のエラーがわかりません・・・w

    Sub Worksheet_Change(ByVal Target As Range) Dim 初期値 As Integer Dim 増減値 As Integer Select Case Target.Address Case "$C$5" Select Case Target.Value Case 1 Range("C6").Value = 24 Range("D5").Value = 600 Range("D6").Value = 0 Range("E5").Value = 400 Range("E6").Value = 0 Range("B7").Value = "★1 MaxAttackPoint:700 / MaxDeffencePoint:900" Case 2 Range("C6").Value = 32 Range("D5").Value = 1000 Range("D6").Value = 0 Range("E5").Value = 500 Range("E6").Value = 0 Range("B7").Value = "★2 MaxAttackPoint:1100 / MaxDeffencePoint:1300" End Select Case "$D$5" Select Case Range("C5").Value Case 1 初期値 = 600 Case 2 初期値 = 1000 Case Else Exit Sub End Select If Target.Value < 初期値 Then 増減値 = 4 Else 増減値 = 8 Range("D6").Value = (初期値 - Target.Value) / 100 * 増減値 Case "$E$5" Select Case Range("C5").Value Case 1 初期値 = 400 Case 2 初期値 = 500 Case Else Exit Sub End Select If Target.Value < 初期値 Then 増減値 = 4 Else 増減値 = 8 Range("E6").Value = (初期値 - Target.Value) / 200 * 増減値 End Select End Sub Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$F$5" Select Case Target.Value Case "炎" Range("F6").Value = 4 Case "水" Range("F6").Value = 4 End Select   Case "$G$5" Select Case Target.Value Case "ドラゴン" Range("G6").Value = -8 Case "海竜" Range("G6").Value = -8 End Select Case "$H$5" Select Case Target.Value Case "ドラゴン" Range("H6").Value = -16 Case "海竜" Range("H6").Value = -16 End Select Case "$I$5" Select Case Target.Value Case "○" Range("I6").Value = 40 Case "×" Range("I6").Value = 0 End Select End Select End Sub とあるカードゲームのステータス決定を行う為に組まれたマクロです。 作成者は私だけではないのですが、もう何回もしつこく質問をしているため 気が引けてしまい、こちらで質問することにしました・・・w   エラー内容は 2つ目のSub Worksheet_Change(ByVal Target As Range)の 「Worksheet_Change」の名称が間違っています。 という事でした。何を入れればいいのかサッパリです(;´ω)   エラーの改善方法について教えてください。 宜しくお願いします

  • EXCEL 異なるVBA

    教えて下さい、EXECL以下の異なるVBA (A>,B>)が2つあります、同じシートでそれぞれ動くようにさせたいです1つに合わせる事は出来ないでしょうか? 当方初心者の為わかりません教えて下さい。 A> Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Address(0, 0, xlA1, 0) <> "A1" Then Exit Sub With Range("F9:I9,K17:K36").Borders(xlDiagonalUp) If Left$(Target.Value, 1) = "S" Then .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic Else .LineStyle = xlNone End If End With End Sub B> Private Sub Worksheet_Change(ByVal Target As Range) With Sheet2 Select Case Target.Address Case Is = "$D$1" .Range("A1").Insert Shift:=xlDown .Range("A1").Value = Target.Value Case Is = "$D$2" .Range("B1").Insert Shift:=xlDown .Range("B1").Value = Target.Value End Select End With End Sub

  • VBAでセルの色付を別の列にも追加するには

    WINDOWS XP EXCELL 2003です。 いつもお世話になります。 現在下記の如く、 A列にマクロを設定しています。 ※A F列には下記の数式が入っています。 A2 =IF(B2="","",TEXT(B2,"mm")) F2 =IF(G2="","",TEXT(G2,"mm")) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row >= 2 And Target.Address = Cells(Rows.Count, "C").End(xlUp).Address Then Target.Offset(0, -1).Value = Date End If Dim c As Integer If Target.Column <> 2 Then Exit Sub If Target.Value = "" Then c = 0 Else On Error GoTo line Select Case Month(Target.Value) Case 1: c = 46 Case 2: c = 4 Case 3: c = 39 Case 4: c = 6 Case 5: c = 7 Case 6: c = 8 Case 7: c = 43 Case 8: c = 3 Case 9: c = 44 Case 10: c = 24 Case 11: c = 40 Case 12: c = 17 End Select End If Target.Offset(0, -1).Interior.ColorIndex = c Target.Offset(0, -1).Font.ColorIndex = IIf(c = 1, 2, 0) Exit Sub line: Target.Offset(0, -1).Interior.ColorIndex = 0 Target.Offset(0, -1).Font.ColorIndex = 0 End Sub 上記のマクロに追加でF列にも同様にセルの色付けするにはどうすればいいか ご教授を御願いできないでしょうか。

  • エクセルVBA SelectCaseを使用したい

    エクセル勉強中の者です。 SelectCaseを使って特定セルの色を変えたいのですが上手く動作しません。 目的の動作 1:A1セルに数字を入力 2:A1に入力された数字を基にセルB1:B6に色を付ける これを目標に作成したプログラム Private Sub Worksheet_Change(ByVal Target As Range) Dim mycolor As Range Dim boxcolor As Range Set mycolor = Intersect(Target, Range("A1")) Set boxcolor = Intersect(Target, Range("B1:B6")) If Not mycolor Is Nothing Then For Each mycolor In Target Select Case Target.Value Case Is = 1 boxcolor.ColorIndex = 3 Case Is = 2 boxcolor.ColorIndex = 5 Case Is = 3 boxcolor.ColorIndex = 4 Case Is = 4 boxcolor.ColorIndex = 6 Case Else boxcolor.ColorIndex = xlAutomatic End Select Next mycolor End If End Sub 実行するとSelect Caseの最初で止まってしまいます。 何だか変数を上手く指定出来ていないような・・・? 色々と調べて手を加えてみましたが成功に至りませんでした。 お手数掛けますが御指導お願い致します。 ちなみにExcelはバージョン2002を使用しております。

  • D2に入力、B2に今日の日付のVBAを追加したいが

    いつもお世話になります。 WINDOWS7 EXCELL2010 です。 ご指導を仰ぎたいのは、 D2に顧客名(参照図では 田中) と入力したら B2に 今日の日付(2013/06/14)としたい。 追加する前のVBAは下記です。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row >= 2 And Target.Address = Cells(Rows.Count, "C").End(xlUp).Address Then Target.Offset(0, -1).Value = Date End If Dim c As Integer If Target.Column <> 2 Then Exit Sub If Target.Value = "" Then c = 0 Else On Error GoTo line Select Case Month(Target.Value) Case 1: c = 46 Case 2: c = 4 Case 3: c = 39 Case 4: c = 6 Case 5: c = 7 Case 6: c = 8 Case 7: c = 43 Case 8: c = 3 Case 9: c = 44 Case 10: c = 24 Case 11: c = 40 Case 12: c = 17 End Select End If Target.Offset(0, -1).Interior.ColorIndex = c Target.Offset(0, -1).Font.ColorIndex = IIf(c = 1, 2, 0) Exit Sub line: Target.Offset(0, -1).Interior.ColorIndex = 0 Target.Offset(0, -1).Font.ColorIndex = 0 End Sub 上のマクロに下記のマクロを追加すると参照図のようなエラーが表示されます。 下記のマクロの何かが間違っていると考えています。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("D2:D100")) Is Nothing Then Exit Sub If ActiveCell = "" Then ActiveCell = Date Cancel = True End If End Sub ご指導いただけるとうれしいです。

  • エクセルのVBAについて教えてください。

    エクセルのVBAについて教えてください。 下記のような構文で、Dの行にAやBの文字が入力された時、その都度 セルの色が変わるようにはできたのですが、本当は、「C5」セルに文字が 入力された時、「C5」だけでなく「B5:J5」の範囲でセルの色を変えたい のですが、どうすれば良いのでしょうか。 ご存知の方是非教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myColor As Integer If Target.Count > 1 Then Exit Sub If Target.Column <>4 Then Exit Sub Select Case Target.Value Case "A" myColor = 34 '水色 Case "B" myColor = 40 '肌色 Case Else myColor = xlNone End Select Target.Interior.ColorIndex = myColor End Sub

  • VBAで2つのプロシージャーをつなげるには

    VBAでSub ~ End Subまで書き終えて、一つのプロシジャーを完成させたあと、 その下に、もう一つのプロシジャーを作り、連続してマクロを動かしたいと思ってます。 例に例えると、 Sub test() Dim MyRange As Range Set MyRange = Columns("c").Find(What:="﨑") If MyRange Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyRange.Font.ColorIndex = 3  End If Dim MyCells As Range Set MyCells = Columns("c").Find(What:="髙") If MyCells Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyCells.Font.ColorIndex = 3 End If End Sub      Sub sample()    Dim i As Long   For i = 1 To Cells(Rows.Count, "I").End(xlUp).Row    If InStr(1, Cells(i, "I"), "VBA", vbTextCompare) > 0 Then   Cells(i, "M") = "YES"   End If   Next   End Sub 上記のような2つのマクロをつなげて1つの実家行えるようにするにはどうしたらよろしいのでしょうか。 どうしても実行時に上のマクロと下のマクロが別々に表示されてしまします。 (ちなみに、上側のマクロは環境依存文字を探すマクロ、下側はVBAの文字を見つけ出すマクロです。) どなたかご存知の方いらっしゃいましたら、教えて頂けないでしょうか。 よろしくお願い致します。

  • VBAで条件付き書式設定

    エクセルの一覧表で2行目から4行ずつ上から商品名、商品コード、会社、商品項目とあって、列がAからXまであります。 以前、商品名ごとに自動で色づけしていた時に使っていたVBAです。 Sub 色分け() Dim Target As Range For Each Target In Range("b2:e2,b5:e5,b8:e8,b11:e11,b14:e14,b17:e17,b20:e20,b23:e23") Select Case True Case InStr(Target.Value, "〇〇") > 0 Target.Resize(4, 1).Interior.ColorIndex = 24 Case InStr(Target.Value, "△△") > 0 Target.Resize(4, 1).Interior.ColorIndex = 38 Case Else Target.Resize(4, 1).Interior.ColorIndex = xlNone End Select Next End Sub この色付け条件を4行目の商品項目ごとに変更したいのですが、方法が分からないので教えてください。 なんかすぐ出来そうな気がするんですけど、丸2日やっても分かりませんでした。 よろしくお願いします。