• ベストアンサー

エクセルVBAによりメッセージボックスを表示させた場合について

お世話になっております。 エクセルVBAにより、メッセージボックスを表示させた場合についてお尋ねいたします。 マクロ上にて、にある項目をINPUTBOXにて対象の列を選択して、それをMSGBOXにて”はい”もしくは”いいえ”にて確認する形式にしているのですが、選択した列が画面上見えない場合もあるのですが、その場合画面をスクロールして対象列が正しいのかを確認したいのですが、MSGBOXがアクティブになっており、スクロールさせる事ができなくて 困っております。そもそもできるのかどうかすら わからないので、エクセルの仕様上それはできないのであれば、しょうがないのですが、もし可能であれば ご教授ください。 宜しくお願い致します。

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

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

>画面をスクロールして対象列が正しいのかを確認したい もちろん、自作 Msgbox フォームを作って Modeless 表示してもよいのですが、手間がかかりますね。 今回の件では、「入力のときにスクロールできれば、確認しながら選択できるのでOK」みたいです。それでしたら、 1. Input関数ではなく、Inputメソッドの Type:=8 を使う 2. UserFormなら RefEditコントロール を使う でクリアできそうです。サンプルコードを示しますが、長いのはコードの中に解説を書いているためですから、とりあえず、コピー&ペーストして動作させて見て下さい。 入力のときに、スクロールさせて確認できます。 Sub Sample() InputColumn:   '入力--------------------------------------------------------   'Inputメソッドを利用   '[キャンセル]ボタン--> Nothing になるので Setステートメントで   'エラーが発生する。そこで On Error Resume Next でエラーが発生   'しても処理を続行させる   '------------------------------------------------------------   On Error Resume Next   Set rngCol = Application.InputBox( _     Prompt:="列を選択します", Type:=8)   If rngCol Is Nothing Then Exit Sub   On Error GoTo 0   '正しくRangeがかえされた場合、複数範囲判定 --------------------   '判定方法1:rngCol.Addressの値にカンマが含まれれば連続していない   '判定方法2:rngCol.Columns.Count>1 なら複数列を選択している   '------------------------------------------------------------   If InStr(1, rngCol.Address, ",") > 0 _     Or rngCol.Columns.Count > 1 Then     MsgBox "複数範囲が選択されています", vbCritical, "中止"     Set rngCol = Nothing     GoTo InputColumn '再入力へ   Else     Set rngCol = Columns(rngCol.Column)   End If   '確認 -------------------------------------------------------   '列全体を選択   rngCol.Select   '確認メッセージ   intRes = MsgBox("この列でよろしいですか?", _     vbYesNoCancel + vbInformation, "確認")   Select Case intRes     Case Is = vbNo       Set rngCol = Nothing       GoTo InputColumn '再入力へ     Case Is = vbCancel       Set rngCol = Nothing       Exit Sub '終了     Case Else   End Select   'それ以降の   MsgBox "選択されたのは" & vbCrLf & _     "列:" & rngCol.Address & vbCrLf & _     "列番号:" & rngCol.Column End Sub

nabeo1
質問者

お礼

ありがとうございます。 ご丁寧に解説及びソースまで書いていただき 大変助かりました。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>エクセルの仕様上それはできない メッセージボックスの仕様です。 自分で同様のフォームを作成して、 UserForm1.Show vbModeless や UserForm1.Show 0 として起動すると、シートの操作が可能になります。

参考URL:
http://park11.wakwak.com/~miko/Excel_Note/11-01_userform.htm#11-01-13
nabeo1
質問者

お礼

ありがとうございます。 おかげで、スクロールする事ができました。 作業のほうもおかけで、効率よく行う事が できます。

関連するQ&A

  • エクセルVBAでメッセージを表示する

    エクセルVBAでメッセージを表示する時は、 Msgbox "表示する内容" と記述しますが、これだと[OK]をクリックするまで エクセル本体が全く操作できなくなってしまいます。 メッセージボックスを表示させた状態で、エクセルを操作できるようにすることは 出来ますでしょうか?

  • エクセルVBA

    エクセルVBAのコードについて質問です。エクセル初心者です。 Windows10で32bit版のエクセル2010を使っています。 1.エクセルのマクロは32bit版でも64bit版にも対応できるようコードを組んでいるのですが、 32bitで動いているのか64bitで動いているのかどのように確かめたらよいでしょうか? あるマクロの途中に #If VBA7 And win64 Then MsgBox ” 64bit ” #Else またはIf VBA7 And win32 MsgBox ”32bit” #End If を組み込むと、If分の終わりには If分の最後に#EndIfが必要です、と表示されて(EndIfを書いているのに) エラーになります。 2.エクセルマクロをIEと連携させて使っています。 IEを操作させている途中でエクセルのメッセージBoxを最前面表示させるには どうしたらよいでしょうか? IEで特定の操作をしたら、エクセルが最前面に出て、OKボタン付きのメッセージBoxが表示され、OKボタンを押すとIEを操作する という動作をコードに書いています。 コードを書いた直後は、IE上での特定の操作のあとメッセージBoxが適切に最前面表示されますが、 一度保存し閉じてファイルを開き直しマクロを実行すると、メッセージBoxは最前面に出てくれません。 検討したコードは 1. SetForegroundWindow 2.VBA AppActivate. Microsoft Excel. Capture 3.AppActivate Microsoft です。いずれのコードを書いた場合も、保存まではうまくメッセージBoxに回答できるが 保存しファイルを開き直してマクロを実行するとメッセージBoxはIEの後ろに隠れたままであり、エクセルを選択しないと最前面表示されません。 しかし一応最前面表示されることもあることから、マクロを一度実行するごとにエクセル内のデータが変わる可能性も考えられす。

  • Excel VBAで、「"」を表示するには?

    お世話になります。 Excel VBAで、「"」を文字列の中に含めるにはどうしたら良いのでしょうか? たとえば、Msgboxで「答えは"5"です」のように表示させたい場合です。 chr()を使う方法は分かるので、それ以外の、より簡単な方法があれば教えてください。宜しくお願いします。

  • Excel VBAメッセージボックスの表示位置が右下になってしまう

    ExcelのVBAでメッセージボックスを作成しましたが、 表示される位置がなぜが画面右下の端っこになってしまいます。 通常通り画面中央にメッセージボックスが表示されるにはどうすればよいでしょうか? またこうなってしまった原因はなんでしょうか? VBA初心者です。よろしくお願いします。

  • inputbox のキャンセルの戻り値について(VBA×エクセル)

    VBA初心者で、ユーザフォームにはまだ手出ししたくなく、INPUTBOXで値を取得しているのですが、 INPUTBOXでキャンセルボタンを押したときに、マクロを終了するように書きたいのですが、どのように記述したらよいのでしょうか? INPUTBOXからはどんな値が返ってきているかわからず、 メッセージボックスで確認してみたのですが、空欄なので、 IF RetIPT ="" then マクロ終了 endif としてみたのですが、「マクロ終了」には進んでくれず... 回答をお願いします~

  • Excel VBA コンボボックスについて

    はじめまして、エクセルVBAの超初心者です。 コンボボックスを使ってマクロを組みたいのですが、どうしてで良いか分からず教えていただければと思います。 エクセルのシートに下のようなデータがあるとします A       B りんご     あおもり りんご     ながの みかん     わかやま バナナ     フィリピン コンボボックス1にAセルを重複しないようにセットして コンボボックス2に1で選択されたものをセットしたいのですが。 プロパティのListFillRangeでAの範囲を選択しても、重複してしまい、それからどうして良いのかわかりません。 どなたか教えて頂けませんか?

  • エクセルVBAにて

    エクセルのVBAでMsgbox関数を使用して Msgbox("計算が終わりました")というように記述 したのですが、マクロを実行してもメッセージが 表示されません。 どなたか教えてください。 よろしくお願いします。

  • エクセルマクロ インプットボックスの使い方

    エクセル2013です。 マクロの途中で作業者にマウスで列を選択してもらい その取得した列番号を使って、いろいろ処理を行うマクロを作りました。 Sub 実験() Dim マウス選択 As Range Dim 選択列 Dim 選択月表示 Dim 質問 Dim 最終列 Dim 最終行 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 On Error GoTo myError Set マウス選択 = Application.InputBox("編集したい月の列を選択してください", Type:=8) 選択列 = マウス選択.Column 選択月表示 = Cells(8, 選択列).Value 質問 = MsgBox("選択した月は " & 選択月表示 & " です。いいですか?", vbYesNo) If 質問 = vbYes Then MsgBox "処理を行います" Else MsgBox "プログラムを中断します" Exit Sub End If ---処理内容---- myError: MsgBox "キャンセルが押されました。プログラム終了します。" End Sub 通常列を選択してくれればインプットボックス内には $V:$V などと表示されますが 行を選択されると $35:$35 などと表示され セルの一部を選択されると $D$40 などと表示されます。 行やセルを選択してもエラーなく最後まで進みますが選択した場所によっては とんでもない結果になってしまいます。 基本、列以外を選択したらメッセージボックスでアラームするか プログラムを停止させたいのですがどのような方法が有りますでしょうか? よろしくお願いします。

  • 【VBA】できればメッセージボックスを使って警告を促したい

    【VBA】できればメッセージボックスを使って警告を促したい エクセル2000です。 VBAのメッセージボックスを使って以下のことは可能でしょうか。 E列とV列があり、それぞれ異なるリスト内から文言を選択するという環境です。 入力順序はE列→V列になり、E列のリストには「A~F」という6種類の文言が、 V列のリストには「G~L」という6種類の文言があるとします。 ここで例えばE3にリストから「A」を選択したとします。 次にV3にもリストから文言を選択する訳ですが、E3に「A」と入れた場合 V3には「G~L」どれでも選択できる環境でありながら、G、H、Iのいずれかを選択した時は 普通に入力でき、J、K、Lを選択した時は「矛盾しています」の警告ポップアップがでるように したいのです。 このようにE列にある文言を選択した時、同行のV列に然るべき文言を選択しなかった場合 警告ポップアップがでるような組み合わせをいくつか作成したいと思っています。 可能であれば、ポップアップの選択は「中止」か「無視」の2択にし、 「中止」を選べば一旦V列の内容が消え、「無視」を選べば矛盾した内容がそのまま V列に入力されるようにもしたいと考えています。 表の大きさはA1:Y80だとして、E列とV列は同じ行内でいつでも上記のような 関係にすることは可能でしょうか。 当方VBAを始めたばかりの初心者(実際に記録をやってみて、その結果がVBEにどう書かれるかを探ってるレベル)ですので、贅沢を言って申し訳ないですが、 それを汲んで解説いただけたら幸いです。 本来なら自分でじっくり学んで方法を模索したいところなのですが 達成したい期日があるので、早目にヒントだけでも欲しいというのが本音です。 回答はそれなりに難解になるとも思っていますが、読み解く努力はしたいと思っていますので どうかよろしくお願いいたします。

  • Excel VBAのチェックボックスについて

    こんばんは、Excel vbaのチェックボックスについてご教授をお願いします。 Userformを作成しています。 チェックボックスを横に4つ配置したとします。その際、常にどれか一つのチェックボックスにしかチェックできないようにしたいのです(チェックしたあとに、違うチェックボックスにチェックしたら、先にチェックしてあるのもはチェックを消したい)。 このような事をしたい場合、マクロ記述での操作になるのでしょうか?それとも、何か違う操作かコマンドがあるのでしょうか?4つ一組でたくさん並べたいので、すべてにマクロ記述となると大変かな?と思いまして・・・。もし、マクロ記述でしか方法が無い場合、マクロ記述の内容も教えて頂ければと思います。 申し訳ありませんが、よろしくお願いします。 ※Excel2000を使用しています。

専門家に質問してみよう