エクセルのマクロでこんなことはできますか?

(1)まずプログラムを実行する。
(2)実行中に、プログラムは「○○○を入力してください」などというメッセージを発し入力待ち状態で停止する。
(3)使用者が指定されたセルに適切な数値などを入力しENTERを押す。
(4)プログラムは実行を再開する。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

「入力待ち状態で停止」している状態ではワークシートへの入力はできないので、Inputbox関数を使うことになります。

入力結果を所定のセルに返してあげればOKかと。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("B2") Then Range("B3") = Range("B2") / 2
If Target = Range("C2") Then Range("C3") = InputBox("入力せよ")
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
InputBox関数なるものがあったのですか…!HELPで探しても探し方が悪いのか、難航していたのですが、関連でMsgBox関数の存在も知ることができましたので大変喜んでおります。
ありがとうございました。

お礼日時:2001/09/29 19:00

InputBoxもそれなりに使えますが、見た目がちょっとアレなのと、機能が乏しいのとがあるので、も少し凝った入力画面を作りたいときも結構あります。



で、そういうときに使うのが、「ユーザーフォーム」です。
VBAの編集画面を開いて、[挿入]-[ユーザーフォーム]で作成できます。

作成にはある程度のVBAの知識が要求されますが、これが使えると結構便利ですよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
面白そうですね。いろいろ凝ってみたいと思います。結構凝り性なので…

お礼日時:2001/09/29 19:05

下記の様にInputBoxメソッドを使うと、「入力待ち状態で停止」している状態でワークシートへの入力ができると思いますが・・・こういう主旨でしょうか?



InputBoxメソッドを使えば、使用者は指定されたセルがどこかを意識し、そこを選択し入力する必要もないように思えます。Typeも色々指定できます。ご参考に。

Sub myDataInput()
  '
  ' 処理1・・・
  '
  Range("A1") = Application.InputBox(prompt:="A1に入力する値", Type:=1)
  '
  ' 処理2・・・
  '
  Range("B1") = Application.InputBox(prompt:="B1に入力する文字", Type:=2)
  '
  ' 処理3・・・
  '
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。勉強になりました。
でもsnoopyさんの方が早かったので…ポイントは…ごめんなさい…

お礼日時:2001/09/29 19:03

私も始めたばかりでよくわからないんですが、ifが使えるんじゃないかと思います。



If Sheets("シート名").Range("セル番号") = 数字 then
   続くプログラム
End If

自分で書いといてなんですけど・・・なんかもっと簡単な方法もありそうですね。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
でもこの方法ですと、あらかじめそのセルに数字を入れておかないとダメなのでは?
私がやりたいのは、あるところまで実行させて一旦プログラムを停止させ、それまでの計算結果に応じた数値を入力するというものですので、申し訳ありませんがちょっと無理な気がします。
すみません。

お礼日時:2001/09/29 18:55

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QENTER押さなくても数式にて変更され文字に対してマクロ実行できますか?

A2にコードを入力するとC2にSheet2のC列から数式で文字が現れます。
その自動で現れた文字に対し、マクロを実行させたいのですが出来ますでしょうか?

C2には以下の数式が入ってます
=VLOOKUP(A2,Sheet2,3,FALSE)



今、設定しているマクロは



Private Sub Worksheet_Change_1(ByVal Target As Range)

If Target.Address = "$C$2" Then

If Target.Value = "A" Then


' 前の奴を開いていたら閉じる
Call WindowsMediaPlayer1.Close

' "movie.wmv"っていう名前のファイルを再生する
FilePath = ThisWorkbook.Path & "\" & "testA.wmv"

' ファイル名を設定する
WindowsMediaPlayer1.URL = FilePath

' 再生を開始する
Call WindowsMediaPlayer1.Controls.Play



ElseIf Target.Value = "B" Then


' 前の奴を開いていたら閉じる
Call WindowsMediaPlayer1.Close

' "movie.wmv"っていう名前のファイルを再生する
FilePath = ThisWorkbook.Path & "\" & "testB.wmv"

' ファイル名を設定する
WindowsMediaPlayer1.URL = FilePath

' 再生を開始する
Call WindowsMediaPlayer1.Controls.Play

End If
End If


End Sub

こんな感じです。

宜しくお願いします。

A2にコードを入力するとC2にSheet2のC列から数式で文字が現れます。
その自動で現れた文字に対し、マクロを実行させたいのですが出来ますでしょうか?

C2には以下の数式が入ってます
=VLOOKUP(A2,Sheet2,3,FALSE)



今、設定しているマクロは



Private Sub Worksheet_Change_1(ByVal Target As Range)

If Target.Address = "$C$2" Then

If Target.Value = "A" Then


' 前の奴を開いていたら閉じる
Call WindowsMediaPlayer1.Close

' "movie.wmv"っていう名前のファイルを再生...続きを読む

Aベストアンサー

あらま、こちらにも同じような質問をされていましたね。
とりあえず
If Target.Address = "$A$2" Then

If Range("C2").Value = "A" Then
で試してみて・・・

Q数値入力のユーザーコントロール

小数点以下の桁数を指定できるユーザーコントロールの作成をしたいのですが、良いサンプルは無いでしょうか?

Aベストアンサー

マスクエディットコントロール
と言おうとしたら、結構自作されている方がいらっしゃるみたいですね^^

http://dobon.net/vb/bbs/log3-4/2243.html#2269

参考URL:http://dobon.net/vb/bbs/log3-4/2243.html#2269

QVB6プログラムの実行中でのこと

VB6で作成したプログラムを実行していると、突然フリーズしたように
約10秒程止まる場合があります。一度、この現象が現れるとそれ以降は普通に
動作します。
実行するたびにこのようになります。
考えられる原因や対応方法などありましたら教えてください。

Aベストアンサー

今読み直して気が付いたのですが、、、

>止まる時は決まっていないのですが、Tabキーでの移動やコマンドボタンを
>クリックした時が多いような気がします。

もしかしてですが・・・・
SetFocusやGotFocus/LostFocusのイベント類を使用していませんか?
もし、コントロールAがフォーカスを受けた時、処理によってはコントロールBにフォーカスを移動させるなど・・・
フォーカス永久ループっていうことも考えられます。

以前に書いたように、1度目と2度目の実行は、メモリにロードされていない/されているという違いがあります。
よって、1つの処理についてのPCへの不可が比べ物にならないくらいかかります。
先に挙げたGotFocus/LostFocusイベントは、OSの状況によって左右されることもあります。

フォーカス永久ループの調査方法として、各GotFocusイベントにDebug.Print ActiveControl.Nameなどと記してみてください。

それと、、、思い出したのでついでに書いておきます。
Command1.FontBold = True とかしてませんか?
以前に経験したのですが、VB4ならこれでよいのですが、VB6のときたまにフォーカス永久ループになった経験があります。
Command1.Font.Bold = True とすることで回避できました。

FontBoldとFont.Boldの違いが、HP上では違いがわかりづらいですね。
一度、このページをテキストか何かにコピペして読んだらわかりやすいかも?

今読み直して気が付いたのですが、、、

>止まる時は決まっていないのですが、Tabキーでの移動やコマンドボタンを
>クリックした時が多いような気がします。

もしかしてですが・・・・
SetFocusやGotFocus/LostFocusのイベント類を使用していませんか?
もし、コントロールAがフォーカスを受けた時、処理によってはコントロールBにフォーカスを移動させるなど・・・
フォーカス永久ループっていうことも考えられます。

以前に書いたように、1度目と2度目の実行は、メモリにロードされていない/...続きを読む

Qテキストボックスで数値入力制限

数値しか入力できないようにしているテキストボックスがあります。が、どこを見てもそんな処理は入ってないように見えるんです。
マスクではなくテキストボックスでです。
キープレスでもゴットフォーカスにもそんなロジックはありませんでした。
プロパティには存在しないと思っています。
ソースがあるのにどこに書いてるかわからないというバカぶりですが、どなたかアドバイスお願いします。

Aベストアンサー

Win32APIのSetWindowLong(GetWindowLongも併用)でウィンドウスタイルを変更することで、数字入力専用のテキストボックスに変更できるそうです。
GetWindowLongで得たウィンドウスタイルにES_NUMBER(&H2000)を付加して、SetWindowLongを利用してウィンドウスタイルを変更する方法です。
このコードがどこかで使用されていませんか?

QVBAで数値入力について

Excel VBAで、UserFormにTextBoxを配置しています。
TextBoxに入力された数値は、半角数値で正数で小数点以下の桁数は1までと制限したいです。

現在は下記のプログラムにしているのですが、「1.2.3」と入力されるとエラーが表示されずに通ってしまいます。。。
どのようにしたらよいのでしょうか。

For i = To Len(TextBox1.Text)
If Not Mid(TextBox1.Text, i, 1) Like "[0-9 And .]" Then
Message"半角数値ではありません"
Exit Sub
End If
Next i

If Val(Text1.Text) = 0 Or TextBox1.Text = "" Then
Message"数値を入力してください"
Exit Sub
End If

Aベストアンサー

こんばんは。

どのイベントをお使いかわかりませんが、期待値以外の入力をアラート表示
するよりは、いっそ入力自体を阻止する方がストレスの無い仕様かも。
ということで、別案を提案します。

もし TextBox が複数あるようなら一度次のような仕組みをクラス化しておくと
良いと思います。若干コードが煩わしくなりますが...

 # 余談ですが、IsNumeric は例えば IsNumeric("3E3") で True を返すなど、
 # 幾つかの文字列で予想外の結果を返します

Private Sub UserForm_Initialize()
  ' IME を無効にしておけば半角入力される
  TextBox1.IMEMode = fmIMEModeDisable
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  ' 余計なピリオドはカットする
  With TextBox1
    If Right$(.Text, 1) = "." Then
      .Text = Left$(.Text, Len(.Text) - 1)
    End If
  End With
End Sub

Private Sub TextBox1_KeyDown( _
    ByVal KeyCode As MSForms.ReturnInteger, _
    ByVal Shift As Integer _
)

  Dim sTxt As String
  Dim iPos As Long
  Dim iSel As Long
  
  With TextBox1
    sTxt = .Text
    iSel = .SelStart
  End With
  Select Case KeyCode
    ' 数字は OK。ただし少数第一位まで
    Case vbKey0 To vbKey9, vbKeyNumpad0 To vbKeyNumpad9
       iPos = InStr(sTxt, ".")
       If InStr(sTxt, ".") > 0 Then
        If iSel > iPos Then
          KeyCode = 0
        End If
       End If
    ' 特定の制御キー
    Case vbKeyReturn, vbKeySeparator, vbKeyTab, vbKeyBack, _
       vbKeyDelete, vbKeyLeft To vbKeyDown
    ' マイナス
    Case vbKeySubtract, 189
       If InStr(sTxt, "-") > 0 Or iSel > 1 Then KeyCode = 0
    ' ピリオド
    Case vbKeyDecimal, 190
       If InStr(sTxt, ".") > 0 Then KeyCode = 0
    ' その他キーは入力をキャンセルする
    Case Else
       KeyCode = 0
  End Select

End Sub

こんばんは。

どのイベントをお使いかわかりませんが、期待値以外の入力をアラート表示
するよりは、いっそ入力自体を阻止する方がストレスの無い仕様かも。
ということで、別案を提案します。

もし TextBox が複数あるようなら一度次のような仕組みをクラス化しておくと
良いと思います。若干コードが煩わしくなりますが...

 # 余談ですが、IsNumeric は例えば IsNumeric("3E3") で True を返すなど、
 # 幾つかの文字列で予想外の結果を返します

Private Sub UserForm_Initialize()
  ' IM...続きを読む


人気Q&Aランキング

おすすめ情報