• ベストアンサー

マクロの実行について

エクセルで料金計算をする、セル1Aに開始時刻を入力しセル1Bに終了時刻を入力するとセル1Cに料金が出力されるというマクロファイルを作りました。 現状1Aと1Bを入力しマクロ実行のスイッチを押して1Cを出力する、というやり方をしているのですが、スイッチを押す手間を省くために、1Aを入力しておいて1Bを入力したらスイッチを押さなくても自動的に1Cが出力されるようにしたいと考えています。 そのような設定をすることはできますか? ご回答よろしくお願い致します。

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

ワークシートイベントプロシージャを利用すれば可能です。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("B1")) Is Nothing Then Exit Sub  ~料金計算処理~ End Sub

bensharman
質問者

お礼

ご解答ありがとうございます。 解決しました。

その他の回答 (4)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

シート見出しでシート名を右クリックし「コードの表示」で表示される画面に次のマクロを入力します。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub If Cells(Target.Row, "A") <> "" Then Cells(Target.Row, "C") = 計算式 End If End Sub

bensharman
質問者

お礼

ご解答ありがとうございます。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

ANo.3です。 説明を付けた方が良いかと思いましたので…… 以下の様にSubではなく、Functionでマクロを作成し、冒頭でA1,B1が空白かどうかのチェックを入れて置きます。 Function Sample(AA As Range, BB As Range)   Sample = ""   If AA = "" Or BB = "" Then Exit Function      '---ここに処理を書く      Sample = 処理で計算した料金  End Function で、シートのC1には以下の式を入れます =Sample(A1,B1)

bensharman
質問者

お礼

ご解答ありがとうございます。 Functionプロシージャは利用したことがありませんでしたが勉強してみます。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

そのマクロに少し手を加えてユーザ関数にしてしまえば?

bensharman
質問者

お礼

ご解答ありがとうございます。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

NO1です。 誤りがありましたので訂正します。 前回の1行目は次のコードに変更して下さい。 Private Sub Worksheet_Change(ByVal Target As Range)

bensharman
質問者

お礼

ご解答ありがとうございます。

関連するQ&A