• ベストアンサー

EXCEL VBAでimput Boxメソッドを使用について

Public Sub test() Dim LL As Double MsgBox = "距離を指定してください。マウスで操作できます。" MsgTitle = "距離指定" LL = Application.InputBox(Prompt:=MsgBox, Title:=MsgTitle, _Type:=1) If LL > 99999 Then U1 = 0 MsgBox "距離は無限大で,初期角度は" & U1 & "です。" Else U1 = -1 / (LL + Sheet1.Cells(15, 3).Value) MsgBox "距離は" & LL & "で,初期角度は" & U1 & "です。" End If End Sub 見よう見まねで上記のプログラムを作成しましたが、 「コンパイルエラー:代入式の左辺の関数呼び出しは、オブジェクト型かバリアント型の値を返さなければいけません。」となってしまいますがエラーの意味がちょっと良くわかりません。 これを動かそうとしたときどうしたらいいのでしょうか?

  • dadao
  • お礼率79% (85/107)

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

とりあえずこれでうごくかな。 Public Sub test() Dim LL As Double Msg = "距離を指定してください。マウスで操作できます。" MsgTitle = "距離指定" LL = Application.InputBox(Prompt:=Msg, Title:=MsgTitle, Type:=1) If LL > 99999 Then U1 = 0 MsgBox "距離は無限大で,初期角度は" & U1 & "です。" Else U1 = -1 / (LL + Sheet1.Cells(15, 3).Value) MsgBox "距離は" & LL & "で,初期角度は" & U1 & "です。" End If End Sub

dadao
質問者

お礼

やったー!!動きました。 実際は Msg MsgTitle をStringで、U1をDoubleで変数を規定するのを 追加しましたが、MsgBoxからBoxを抜く視点を与えられて満足です。 実際、ここからまだまだ長いプログラムを書かないといけないので また良かったらお願いします。

その他の回答 (1)

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.2

Application.InputBoxとしている場合、受け取る変数をDoubleで 規定することは出来ません。要するに「セルに書き込まれる」のと 同じですから。 回避するには、バリアント型の変数で一旦Application.InputBox の結果を受けておいてから、Cdblで型変換をするか、 そもそもApplication.InputBoxではなく、単純なInputBox関数に するかです。

dadao
質問者

お礼

即答ありがとうございます。 CDblで型変換、今回は使用しませんでしたが、確かにできそうですね。 また、すぐに別の質問もすると思うので、よろしくお願いします。

関連するQ&A

  • エクセルVBA(初心者)

    Sub 練習() a = InputBox("だれ") MsgBox a End Sub 「a =」よりも「InputBox("だれ")」が最初に実行されるのは、どのような文法の決まりからでしょうか? Sub 練習() InputBox "だれ" a = InputBox("だれ") MsgBox a End Sub この場合、InputBox が2回でてきてしまうのですが・・・?

  • VBAのinputboxで何もいれずに[OK]を押した時エラーになります

    よろしくお願い致します。 EXCELのVBAで「inputbox」を使ってセルを選択させたいと考えております。 下記のコードだと「キャンセル」や「×」で閉じられた時はmsgbox「キャンセル」が出てExit subするのですが、何も入力しないで「OK」を押した場合がどうしてもエラー(入力した数式は正しくありません)になります。 いろいろ調べて試したのですがどうしてもできず困っています。 どなたか教えてください。 Sub test() Dim myAns As Range On Error Resume Next Set myAns = Application.InputBox(Prompt:="セルを選択してください。", Title:="セル選択", Type:=8) On Error GoTo 0 If myAns Is Nothing Then MsgBox "キャンセル" Exit Sub ElseIf myAns = "" Then MsgBox "最低1つは選択してください" Exit Sub Else MsgBox myAns.Address(0, 0) End If End sub

  • インプットボックスで選択したシートをselectした

    先日ここで、インプットボックスを使ったシート間コピーを教えて頂きました。 その中で、コピー先を選択した後にそのシートがselectされた状態にして、ペースト確認のmsgboxを表示したいのですが、どの様したらいいのでしょうか? Sub コピー() Dim CopyArea As Range Dim PasteArea As Range On Error GoTo ErrorHandler Dim a As String Set CopyArea = Application.InputBox(prompt:= _ "コピー元を指定して下さい", Title:="コピー元", Type:=8) BUCK: Set PasteArea = Application.InputBox(prompt:= _ "貼り付け先を指定して下さい", Title:="貼り付け先", Type:=8) Sheets(****).Select If MsgBox("貼り付けます。" & Chr(10) & "よろしいですか?キャンセルで再選択。", vbOKCancel + vbQuestion) = vbOK Then CopyArea.Copy PasteArea Else GoTo BUCK End If Exit Sub ErrorHandler: MsgBox "処理が取り消されました" End Sub

  • VBAでの「メソッドまたはデータメンバが見つかりま

    word2016で以下のプログラムを流したいのですが、「メソッドまたはデータメンバが見つかりません」のエラーが出ます。 Dim CB As Variant, i As Long CB = Application.ClipboardFormats If CB(1) = True Then MsgBox ”クリップボードになにも値がありません。”,48 Exit Sub End If どうすれば直るでしょうか?よろしくお願いします。

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

    InputBoxの使い方について教えてください。 テストで下記のように書いてみました。 Sub input_test2() ans = InputBox("質問!適当に数字を入れてね") MsgBox Application.WorksheetFunction.IsNumber(ans), vbInformation, "入力判定" If Application.WorksheetFunction.IsNumber(ans) Then If ans = 0 Then MsgBox "入力されたのは、 0", vbInformation, "回答" If ans = 1 Then MsgBox "入力されたのは、 1", vbInformation, "回答" If ans = 2 Then MsgBox "入力されたのは、 2", vbInformation, "回答" If ans = 3 Then MsgBox "入力されたのは、 3", vbInformation, "回答" If ans >= 4 Then MsgBox "入力されたのは、 4以上", vbInformation, "回答" Else MsgBox "入力は数字でしてください!", vbExclamation, "お願い" End If End Sub 1.入力が数値ならTRUEがかえると思ったのですが、何を入れてもFALSEしかかえりません。どこがまずいのでしょうか? 2.表示されるInputBoxのサイズが随分横に長いのですが、サイズを変える方法はあるのでしょうか? 3.MsgBoxの"入力判定"や”回答”ようにInputBoxにも最上行に日本語を表示させる方法はないでしょうか? 以上、よろしくお願いいたします。

  • エクセルVBAでお願いします。

    エクセル2002使用です。 セルA1に 日付型で2004/9/25と間違いなく入っています。 その条件で下記のようにコードを打ちました。 Sub test() If Day(Range("A1")) = 30 Then MsgBox "yes" End If End Sub 25=30ならばmsgboxを表示なので、上記の例では表示してはいけないのに表示されます。 ちなみに=を<>不等号にしてもMsgboxが開きます。 おそらく型の問題だと思ったのですが、DAY関数はVariant型のintergerなので問題ないと思うのですが、理由がわかりません。 よろしくお願いします。

  • 初心者です。エクセルVBAの質問なのですが・・・

    エクセルのVBAで 例えば・・・IF関数を使いたい時に Public Sub 練習() 年齢 = InputBox("あなたは何歳ですか。数字だけを入力して下さい。") If 年齢 < 20 Then MsgBox "未成年ですね" ElseIf 年齢 < 30 Then MsgBox "20代ですね。" Else MsgBox "その他の年代ですね" End If End Sub                            のようなものを作って、実行をしたときに、数字を入れてOKボタンではなく、ダイアログボックスのキャンセルや閉じるボタンを押したときに、「その他の年代ですね」が出てきますが、それを出てこないようにすることはできますか?(例えば、キャンセルボタンのような役割をさせるなど・・・)  結構難しいですかね? 教えて下さい。お願いします。

  • アクセスの印刷VBAを教えて下さい

    アクセス初心者です。 バージョンは2002を使っています。 ネットで探して詳しく分からないままプログラムしています。 フォームで印刷のコマンドボタンを作ってそのボタンをクリックすると表示されてる 1ページのみ印刷したいのですが全てのレコードが印刷されてしまいます。 どうすればいいのか教えて下さい。 下記が今現在のVBAです。 Private Sub 印刷_Click() Dim varCopies As Variant varCopies = InputBox("部数を数字で入力してください", "印刷部数の指定") If Len(varCopies) = 0 Then Exit Sub End If If IsNumeric(varCopies) = False Then MsgBox "部数は数字で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub ElseIf CLng(varCopies) = 0 Then MsgBox "部数は0以上で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub End If If MsgBox("印刷しますか?" & vbCrLf & "部数=" & varCopies _ , vbYesNo + vbInformation, "印刷の確認") = vbYes Then DoCmd.OpenForm "伝票", acPreview, , , acFormReadOnly DoCmd.PrintOut acPrintAll, , , , CLng(varCopies) DoCmd.Close acForm, "伝票" End If End Sub

  • vba 初心者

    Dim a As Integer Dim inbox As String Dim Localpath As Variant Dim c As Range, myFadd As String Dim flag As Variant Dim MyShell As Object Dim Mysh As String Dim newHour As Variant Dim newMinute As Variant Dim newSecond As Variant Dim waitTime As Variant Localpath = ThisWorkbook.Path a = 1 inbox = InputBox("番号") Do If inbox = Empty Then Exit Sub End If If inbox = Cells(a, 1) Then MsgBox ("あります") Exit Do Else a = a + 1 ElseIf Cells(a, 1) <> inbox Then MsgBox ("ない") End If Loop Set MyShell = CreateObject("WScript.Shell") MyShell.Run ("AcroRd32.exe /n") MyShell.Run ("AcroRd32.exe /p") & Localpath & "\" & Myfile & ".pdf" newHour = Hour(Now()) newMinute = Minute(Now()) newSecond = Second(Now()) + 10 waitTime = TimeSerial(newHour, newMinute, newSecond) Application.Wait waitTime Application.SendKeys "{Enter}", True '次の使用例は、10 秒を過ぎるとメッセージを表示します。 If Application.Wait(Now + TimeValue("0:00:10")) Then MsgBox "時間が過ぎました。" End If End Sub ExcelからPDFファイルを検索して印刷したいのですが、 見よう見まねで作ってみたもののエラーが出てしまってよく分かりません。 指摘できるところご指導よろしくお願いします。

  • エクセルVBA、入力しないと閉じないInputBox

    必ず何かを入力しないと閉じないInputBoxを作ろうと思います。 以下のコードで入力がなければ閉じないというか、Line:に戻るので、何度でも現れるInputBoxになるようですが、このやり方は正しいですか? 通常はどうやるのでしょうか? Sub test() Dim a line: a = Application.InputBox("必ず入力して下さい。", "Input!") If Len(a) = 0 Or a = False Then GoTo line MsgBox "有難う。" & a & " ですね。", , "(o。_。)oペコッ" End Sub

専門家に質問してみよう