- ベストアンサー
マクロの実行について
エクセルで料金計算をする、セル1Aに開始時刻を入力しセル1Bに終了時刻を入力するとセル1Cに料金が出力されるというマクロファイルを作りました。 現状1Aと1Bを入力しマクロ実行のスイッチを押して1Cを出力する、というやり方をしているのですが、スイッチを押す手間を省くために、1Aを入力しておいて1Bを入力したらスイッチを押さなくても自動的に1Cが出力されるようにしたいと考えています。 そのような設定をすることはできますか? ご回答よろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ワークシートイベントプロシージャを利用すれば可能です。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("B1")) Is Nothing Then Exit Sub ~料金計算処理~ End Sub
その他の回答 (4)
- KURUMITO
- ベストアンサー率42% (1835/4283)
シート見出しでシート名を右クリックし「コードの表示」で表示される画面に次のマクロを入力します。 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
お礼
ご解答ありがとうございます。
- mt2008
- ベストアンサー率52% (885/1701)
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)
お礼
ご解答ありがとうございます。 Functionプロシージャは利用したことがありませんでしたが勉強してみます。
- mt2008
- ベストアンサー率52% (885/1701)
そのマクロに少し手を加えてユーザ関数にしてしまえば?
お礼
ご解答ありがとうございます。
- mu2011
- ベストアンサー率38% (1910/4994)
NO1です。 誤りがありましたので訂正します。 前回の1行目は次のコードに変更して下さい。 Private Sub Worksheet_Change(ByVal Target As Range)
お礼
ご解答ありがとうございます。
お礼
ご解答ありがとうございます。 解決しました。