メッセージボックスに変数名そのものを表示したい(Excel2000)

このQ&Aのポイント
  • VBAを使用して、メッセージボックスに変数名そのものを表示する方法について質問があります。
  • 現在、メッセージボックスに表示されるのは変数「依頼日」の値ですが、変数名そのものを表示したいです。
  • 具体的な方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

メッセージボックスに「変数名」そのものを表示したい(Excel2000)

依頼日という名の変数があります。 標準モジュールに Public Sub ChkNull(hikisuu As Variant) Select Case hikisuu Case 0, Null, Nothing, "" Dim Msg As Integer Msg = MsgBox(hikisuu & "が空欄になっていますよ。注意してください。"     _, vbOKOnly, "告知") End Select End Sub とし、 Sheetのプロシージャ内で ChkNull 依頼日 として、各変数が0等の場合は、 「○○○○が空欄になっていますよ。注意してください。」と 告知のメッセージボックスが出てくるようにしています。 現在、○○○○には変数「依頼日」の値が表示されていますが、 これを「依頼日」と変数名そのものが表示できるようにするには、 hikisuuの部分をどう記述すればよいのでしょうか? 仕事の都合でVBAを使わざるを得なくなった程度の初心者ですが、 なんとか、教えていただけますようお願い申し上げます。

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

う~ん・・・・関数化するという事は当然仮引数となるわけで・・・・。 しょうがないので、引数をひとつ増やして、 Public Sub ChkNull(hikisuu As Variant, disp As String) Select Case hikisuu Case 0, Null, Nothing, "" Dim Msg As Integer Msg = MsgBox(disp & "が空欄になっていますよ。"     _, vbOKOnly, "告知") End Select End Sub として、実際このチェック関数を呼び出す時に、一々表示させたい名前を「文字列で」入れるしか無いのでは。

angel-dust
質問者

お礼

回答ありがとうございました。 引数を2つ使うことで、うまくいきました。

angel-dust
質問者

補足

引数を渡すときに ChkNull 依頼日,"依頼日" のように記述すればよろしいのでしょうか?

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

#2です。チェック項目名(文字列)を(仮)引数として増やすことです。 Public Sub ChkNull(hikisuu As Variant, dsp As String) Select Case hikisuu Case 0, Null, "" Dim Msg Msg = MsgBox(dsp & "が空欄になっていますよ。" _ , vbOKOnly, "告知") End Select End Sub Sub test01() Dim b As String Dim a As Variant a = "" b = "住所" ChkNull a, b End Sub で動きました。Nothingを入れると、値でないせいか、エラーになったので省きました。dispは名前がVBのステートメント等に無いかと避けました。

angel-dust
質問者

お礼

2度も回答いただきありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Msg = MsgBox(hikisuu & "が空欄になっていますよ。注意してください。"     _, vbOKOnly, "告知") を Msg = MsgBox("依頼日が空欄になっていますよ。注意してください。"     _, vbOKOnly, "告知") ではだめですか。 小生の大誤解かなあ・・。 プログラマにはどこの(どの項目の)ことを言っているか 判っているケースが多く、メッセージコメントを書くのに 苦労しないですが。 色々な場合でこのルーチンを使うのでしょうか。

angel-dust
質問者

補足

説明が足らず、申し訳ありません。 ご推察のとおり、ChkNullに渡す引数は、 「依頼日」以外にも沢山あるので 前述のルーチンを使い回したいと思っています。 作成したExcelのfileを実際に使用する人達は、PCに精通していないため、 どこに空欄があるのかをはっきり知らせる必要があります。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

Msg = MsgBox("hikisuuが空欄になっていますよ。注意してください。"     _, vbOKOnly, "告知") にすれば変数名がそのまま表示されますが.... 変数名自体が変化する場合は工夫が必要になると思います。

angel-dust
質問者

お礼

アドバイスしていただきありがとうございました。

angel-dust
質問者

補足

説明が足らず、申し訳ありません。 ご推察のとおり、ChkNullに渡す引数は、 「依頼日」以外にも沢山あるので 前述のルーチンを使い回したいと思っています。 作成したExcelのfileを実際に使用する人達は、PCに精通していないため、 どこに空欄があるのかをはっきり知らせる必要があります。

関連するQ&A

  • Excel Select Case で変数を使うと表示されない。

    Sub test1() Dim Fruits As String Dim Iro As String Sheets("Sheet1").Select Fruits = Range("A1").Value Iro = Range("B1").Value Select Case Fruits Case Is = "みかん" Iro = "オレンジ" End Select End Sub とすると、何の反応もありませんが、 Iro = "オレンジ" の箇所を Range("B1") = "オレンジ" とするときちんと表示されます。 なぜ変数ではダメなのでしょうか?

  • メッセージを表示する関数の引数について

    はじめましてよろしくお願いします。 現在、Access2002でメッセージを表示する関数を作成していますが、 引数を増やしたらどうしてもコンパイルが通らず困っています。 やっていることは標準モジュールに Public Sub ExcMsgBox(MSG As String, Title As String)   MsgBox MSG, vbOKOnly + vbExclamation, Title End Sub という関数をつくってフォームから ExcMsgBox ("入力必須項目が全て入力済でないため、" & _       vbCrLf & "編集内容を保存できません。","入力必須項目") という形で呼び出していますが、 これだと「コンパイルエラー、修正候補 =」と出ます。 SUBで関数宣言しているので、戻り値は無いはずなのですが TEST = ExcMsgBox ("入力必須項目が全て入力済でないため、" & _       vbCrLf & "編集内容を保存できません。","入力必須項目") とするとその場のコンパイルエラーは避けられるのですが、実際に実行すると やはり「コンパイルエラー Functionまたは変数が必要です」というエラーがでます。 関数を Public Sub ExcMsgBox(MSG As String)   MsgBox MSG, vbOKOnly + vbExclamation End Sub のように引数を一つ減らして、フォームから ExcMsgBox ("入力必須項目が全て入力済でないため、" & _       vbCrLf & "編集内容を保存できません。") のようにして呼ぶと正しくメッセージボックスが表示されるのですが。 基本的なことで何か勘違いしているかもしれませんが、何かお気づきの点が ありましたらご教授ください。よろしくお願いします。

  • Excel VBAで変数が定義されていません。

    このシートコードで「変数が定義されていません。」となります。どうすればいいでしょうか。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Select Case Target.Address Case "$C$10:$C$13" SendKeys "%{DOWN}" Case "$H$10:$H$13" SendKeys "%{DOWN}" Case Else Exit Sub End Select Cancel = True End Sub

  • VBAでFunctionの使い方

    エクセルのVBAでFunctionの使い方がいまいちよくわかりません。 Function msg() Dim h As Integer h = Hour(Time) Select Case h Case Is < 12: msg = "おはようございます。" Case Is < 17: msg = "こんにちは。" Case Else: msg = "こんばんは。" End Select End Function Sub 挨拶() MsgBox msg End Sub とやってみたら一応正しく動くようですが、これであっているのでしょうか? 他の例などを見るとFunction msg()の()内にも何か入れなければならないようなのですが、わかりません。

  • excel/vba/public変数

    excel VBAで下記のようなコードを書きました。 他のプロシージャでも共通の変数を使用したいと思っています。 その為、public変数を宣言して使用したいと設定しましたが。 うまくいきません。 testmainを実行し、iに何も入っていないことを確認しました。 その後『1』を代入し、testmainは終了します。 testsubをその後実行し、iに先ほど代入された値を確認しようとしても何も代入されていない状態です。 全プロシージャでその変数を使用したいと思っているのですが、 何か方法、もしくはこのような使用方法ではないのでしょうか? public変数を使用してもプロシージャが終了すれば変数はクリアされるのでしょうか? 構造化の方法の問題上参照渡しや、戻り値など、指定する方が複雑になっていきます。 ご指導よろしくおねがいします。 Public i As Variant Sub testmain() MsgBox test i = 1 End Sub Sub testsub() MsgBox i End Sub

  • EXCEL VBA コンボボックス、テキストボックスが未入力のときメッセージを表示する方法

    ユーザーフォームにコンボボックス2個textboxが2個あります コンボは選択のみです。 コンボとtextbox1は入力必須にして、空欄でコマンドボタンが押された時はメッセージを表示したいです OKwebを参考に作ったのですが、コンボ1が空欄でもMsgが出ません 願いします Private Sub CommandButton1_Click() Dim ctrl As Control, tst1 As String, txt2 As String Dim ws As Worksheet Set ws = Sheets("sheet1") For Each ctrl In Me.Controls Select Case ctrl.Name Case "ComboBox1", "ComboBox2", "TextBox1" If Me.Controls(ctrl.Name).Value = "" Then txt1 = txt1 & ctrl.Name & vbLf Else txt2 = txt2 & Me.Controls(ctrl.Name).Value & vbLf End If End Select Next If Len(txt1) > 0 Then MsgBox "以下の値を入力してください" & vbLf & txt1, vbExclamation Exit Sub Else ret = MsgBox("以下の値を入力します" & vbLf & txt2, vbOKCancel) If ret <> vbOK Then Exit Sub

  • VBA 変数の使い方について

    皆様、こんばんは。 いつもお世話になっているVBAの初心者です。 今回、いくつかのテキストボックスの値を使った複雑な計算を行うために、変数を使おうとしていますが、うまく動いていません。 書こうとしているプロシージャはこちらです。 Private Sub 発電推計1() Dim My発電量1 As Integer Dim My発電量2 As Integer Dim My発電量3 As Integer Range("N37").Formula = "= (" & My発電量1 & " + " & My発電量2 & " + " & My発電量3 & ") * 10 / 10000" Select Case Range("O18") Case 1 My発電量1 = Range("P18") * 15 * 0.1 / 0.0036   ... End Select Select Case Range("O19") Case 1 My発電量2 = Range("P18") * 15 * 0.1 / 0.0036 ... End Select Select Case Range("O20") Case 1 My発電量3 = Range("P18") * 15 * 0.1 / 0.0036 ... End Select End Sub My発熱量の計算式に間違いがあるでしょうが、どう書けばいいかが分かりません。何方か詳しい方に教えていただければ非常に助かります。 どうぞよろしくお願いいたします。

  • VBA のメッセージボックスに・・・

    Private Sub CommandButton1_Click() Dim intMsg As Integer Dim x As Double x = Val(Cells(3, 2).Value) / Val(Cells(2, 2).Value) ^ 2 Cells(2, 5) = x intMsg = MsgBox("指数は&x&" & vbCrLf & "&z&です。") Select Case x Case 0 To 18 MsgBox "やせぎみ" Case 19 To 25 MsgBox "普通" Case 26 To 30 MsgBox "太り気味" Case Else MsgBox "危険" End Select End Sub ってプログラムを組んだのですが メッセージボックスに結果が表示されません。 計算して出た値を、メッセージボックス内のxとzで表示させたいのですが・・・ &ではさむ?だけではだめなんですか?

  • access vbaで、変数を含んだプロシージャ

    access vbaで、変数を含んだプロシージャを実行したい。 【やりたい事】 下記の矢印の部分で「msg1」「msg2」「msg3」を実行したい。 Public Sub test() For i = 1 To 3 msg & i ←ここを、どのように記述すればいいのでしょうか? Next End Sub Public Sub msg1() MsgBox "ok1" End Sub Public Sub msg2() MsgBox "ok2" End Sub PublicSub msg3() MsgBox "ok3" End Sub よろしくお願いします。

  • 【Excel VBA 2010】空白セルの検索

    ある範囲の中から書式設定も文字も入っていないセルを選んできて、 それらには何も入力がされていないという警告を出そうと考えています。 Dim k As Integer Dim msg As String Dim 空欄() As Variant k = 0 msg = " " For i = 1 To 10 For j = 1 To 10 If Cells(i , j) = Cells(i , j).SpecialCells(xlCellTypeBlanks) Then ReDim Preserve 空欄(k) As Variant 空欄(k) = Cells(i , j).Address k = k + 1 End If Next Next If 空欄(k) <> " " Then For i = 0 To k - 1 msg = 空欄(i) & vbCrLf Next MsgBox (msg & "が入力されていません。") Else ・ ・ ・ と続くのですが、上記のコードでエラー(型が一致しない)が起きます。 素人のため原因がわからないので、どなたか修正をお願いいたします。

専門家に質問してみよう