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

(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も見ています

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

この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ベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

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

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

Aベストアンサー

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

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

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

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

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エクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

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

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

Aベストアンサー

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

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

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を見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報