• ベストアンサー

Excel VBAでMsgboxの値を取得するには?

Msgbox Cells(i, 1) & Cells(i, 2) & Cells(i, 3), vbOKCancel としました。 そしてMsgboxで「OK」が押されたか「キャンセル」が押されたか取得したいのですが、どのようにすればいいのでしょうか? Ex2000、win2000です。

  • w-inty
  • お礼率72% (1169/1618)

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

Dim ret ret = Msgbox(Cells(i, 1) & Cells(i, 2) & Cells(i, 3), vbOKCancel) If ret = vbOk Then MsgBox "OK" ElseIf ret = vbCancel Then MsgBox "Cancel" End If

その他の回答 (2)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 MsgBox関数は処理の結果を整数として返します。 そして、その数値を表す定数がVBA(VB)には用意されています。 vbCancel vbOk vbYes などです。 コーディングとしては、 Dim ret As Long ret = MsgBox(省略) If ret = vbOk Then   'OKの場合の処理 Else   'OK以外の場合の処理 End If という感じでしょうか。 戻り値の定数のリストについては、オブジェクトブラウザで確認して下さい。 オブジェクトブラウザは、VBE画面で、メニューの[表示]→[オブジェクトブラウザ]で表示されます。 そこで、[クラス]で「vbMsgBoxResult」を選択すると、隣りにメンバが表示されます。 そして個々のメンバを選択すると、下にその定数の数値が表示されます。 これによれば、vbOk=1なので、 If ret = 1 Then としてもいいわけです。

w-inty
質問者

お礼

回答ありがとうございます。 数値でも判別できるんですね。 ありがとうございました★

  • soma3
  • ベストアンサー率39% (16/41)
回答No.2

If Msgbox(Cells(i, 1) & Cells(i, 2) & Cells(i, 3), vbOKCancel) = vbOK then  MsgBox "OK" else  MsgBox "Cancel" End If こんな感じです。

w-inty
質問者

お礼

お二人ともありがとうございました!! 無事できました★

関連するQ&A

  • エクセル VBA MsgBox

    1)下記の記述だと コンボが空白ならエラー表示が出て Okをクリックすると ”記録しますか?” となります! そこをエラー表示されたら UserFormに戻り 空白が無くなったら ”記録しますか?” というMegBoxにしたいのですが どう変化すれば良いのでしょうか? 教えて下さい! Private Sub CommandButton1_Click() Dim i As Integer For i = 1 To 10 If Controls("ComboBox" & i).Text = "" Then MsgBox "選択されていません確認して下さい!", vbInformation, "良く見て下さい!" Exit For End If Next If MsgBox("記録しますか?", vbOKCancel) = vbOK Then With UesrForm From.TextBox1 = Val(UesrFrom.ComboBox1) + _ Val(UesrFrom.ComboBox2) + Val(UesrFrom.ComboBox3) + _ Val(UesrFrom.ComboBox4) + Val(UesrFrom.ComboBox5) From.TextBox2 = Val(UesrFrom.ComboBox6) + _ Val(UesrFrom.ComboBox7) + Val(UesrFrom.ComboBox8) + _ Val(UesrFrom.ComboBox9) + Val(UesrFrom.ComboBox10) End With MsgBox " 記録します!" Unload Me Else MsgBox " キャンセル!!" End If End Sub

  • EXCEL VBA2010 MsgBox

    Sub 重複() Dim i As Long, j As Long For i = 6 To 500 For j = 3 To 3 If WorksheetFunction.CountIf(Range("C6:C500"), Cells(i, j)) > 1 Then Cells(i, j).Interior.ColorIndex = 6 End If Next j Next i End Sub このVBAに重複が何件ありますよというメッセージを出したいです。 MsgBoxの入れ方を教えてください。

  • [VBA]MsgBoxが消えません。

    ExcelでFormダイアログで、メインメニューを 作成しています。 今度、入力項目のエラーチェックを行うこと になったのですが、エラーを検出した場合、 メインメニューのサイズより大きなMsgBoxを 表示しています。OK/CancelでMsgBoxが消え、 メインメニューが再表示されるのですが、 メインメニューの領域外が、MsgBoxの表示 が残ったままになってしまいます。 (制御そのものはメインメニューに移っています。) このような場合でも、MsgBoxをきれいに消す にはどのようにしたらよろしいでしょうか?

  • VBAのMsgBoxについて

    例えばA1のセルに「変数に代入されている数は10です。」と表示させるためには Cells(1,1)="変数に代入されている数は" &n& "です" とすれば変数nに代入されている数が表示されるはずですが、MsgBoxに同じように表示させるにはどうすればよいのでしょうか。 MsgBox "変数に代入されている数は" &n& "です" としてもエラーになってしまうのですが、、、

  • Excel VBA msgboxについて

    メッセージボックスを表示させた際 OKボタンや、YES/NOボタン上にポインタを移動させるコードを教えて頂けませんか? 「VBA msgbox ポインタ 移動」などで検索したのですが どうしてもヒットしませんでした。 どうぞよろしくお願いいたします。

  • エクセルVBAオプションボタンの選択画面に戻りたい

    皆さんこんにちは。 エクセルVBAの初心者です。 選択画面に戻るためのコードが足りていない感じなのですが・・ ご教授をお願いします。 ※エクセル2013を使用しています。 ユーザーフォーム1で作成書類を5種類から選択するようにしました。 選択後、「次へ」のボタンを押すと 『○○が選択されています。支社選択画面に移動します。』という メッセージが出るようにコードを作りました。 「OK」を押せば次の選択画面が開くように今後作っていく予定なのですが 「キャンセル」を押すとユーザーフォーム1が画面から消えるようになってしまっています。 やりたい事は「キャンセル」を押し『処理をキャンセルしました。』と メッセージが出た後に 最初のユーザーフォームで作成書類を選択し直すところに戻りたいのです。 私が作成したコードを記載しますので どこがどう間違っているのか、何が足りないのか ご教授いただければ幸いです。 ----------------------------------------------------- Private Sub CommandButton1_Click() Dim myMSG As String Dim i As Integer For i = 1 To 5 If Me.Controls("OptionButton" & i).Value = True Then myMSG = Me.Controls("OptionButton" & i).Caption End If Next i intRtn = MsgBox(myMSG & vbCrLf & "が選択されています。" & vbLf & _ "支社選択画面に移動します。", _ vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") If intRtn <> vbOK Then MsgBox "処理をキャンセルしました。" End End If intRtn = MsgBox("処理を続行します。", vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") If intRtn <> vbOK Then MsgBox "処理をキャンセルしました。" End End If End Sub

  • エクセル・VBA:値の取得 

    お世話になっております。 IというBOOK(以下B-I)に、IIというBOOK(以下B-II)からAUTOFILTERでB列に下記のように検索を掛け、ヒットした(検索値と一致した)もののC列の値をB-Iの特定の場所に貼り付けとしたいと思っております。(Search ValueはB-IIのB列で検索、Return ValueはB-IIのC列から、値の貼り付けはB-Iへ。) しかし、検索値に該当するのは1行とは限りません。このような場合、ヒットしたC列の最上行の値から、[Yes/No Message box]のようなものを使い、これを適用しますか?と順に聞いていくようにしたいのですが、どのようにマクロを書けばよいのかわかりません。補足資料として下記に記載しておきましたので、ご参照なさってください。 よろしくお願いいたします。 'B-IIの検索マクロ Workbook("B-II").Activate Sheets("Sheet1").select Worksheets("Sheet1").Cells(1, 1).AutoFilter Field:=2, Criteria1:="XXX" '中略(ここに何を書けばいいのかわかりません) Workbook("B-I").Acticate Sheets("Sheet1").select Cells(i,1).Select Selection.PasteSpecial -B-IIの例- |A列|B列|C列|…| |123|ABC|アイウ|…| |456|ABC|カキク|…| |789|ABC|サシス|…| 検索値"ABC"で検索したら上記の3行がヒットした例です。このような場合 Cells(n,3).value(n行3列目の値という意味)を使用しますか? YES > B-Iへ貼り付け > マクロの終了 NO > Cells(n+1,3).valueを使用しますか? YES > B-Iへ貼り付け > マクロの終了 NO > Cells(n+2,3).valueを使用しますか? YES > B-Iへ貼り付け > マクロの終了 NO > マクロ終了 としたいのです。

  • 【VBA】MsgBoxの文字数について

    下記のコードを使い、MsgBoxに 各シートの合計値と、それらの総計 を表示しますが、シート数が膨大の時は、メッセージボックスに収まり切りません。 対処法をご教示願います。 Dim i As Long Dim mMsg As String: mMsg = "" Dim mSum As Long For i = ActiveSheet.Index To Sheets.Count mMsg = mMsg & Sheets(i).Name & " : " & Sheets(i).Cells(Rows.Count, "A").End(xlUp).Offset(0, 4).Value & vbCrLf mSum = mSum + Sheets(i).Cells(Rows.Count, "A").End(xlUp).Offset(0, 4).Value Next Sheets(1).Select MsgBox mMsg & "総計 : " & mSum, vbInformation

  • 簡単な事だと思うのですが vba での質問です。

    Private Sub 処理名()  Dim a as Byte vbOK = MsgBox ("OK? or Cancel?",vbOKCancel,"確認")  If vbOK = 1 Then   MsgBox "OKが押されました"  else if   MsgBox "キャンセルが押されました"  End if  ~以下長々と処理~     長々と処理の最後~ End Sub 例えば上記のような、vbaマクロがあったとします。 もし、キャンセルを押した場合、有無を言わさず全ての処理を終了したい場合どのように記述をすれば宜しいのでしょうか? キャンセルを押した場合後続の長々と処理部分は全てキャンセルしたいのです。 私はその方法が分からないために分岐がある度にif分のネストが深くなってしまって困っています。 どなたかご教授下さい。 よろしくお願い致します。

  • msgbox について

    エクセルのmsgboxなのですが 「はい」「いいえ」「キャンセル」と 表示される設定のMSGBOXを使って 各々のボタンの押された場合の 処理を使っています 「はい」「いいえ」「キャンセル」の ボタンの表示だけを変更することは 可能ですか? 例 「はい」→「処理A」   「いいえ」→「処理B」   「キャンセル」→「何もしない」 それともMSGBOXではボタンの表示事態を 変更することは不可能なのでしょうか?

専門家に質問してみよう