- ベストアンサー
エクセル メッセージボックスの出し方
エクセルでオートシェイプでボタンを作り、ボタンをクリックするとsheet2へデーターが入力されるようにマクロで作りました。 (1)入力ボタンを押したらメッセージボックスで”記録されました”と画面に表したいのですが・・教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Sub 入力() Dim LastRow As Long With Worksheets("データ") LastRow = Worksheets("データ").Range("A" & Rows.Count).End(xlUp).Row + 1 '<- 多分ここにデータを書き込むコードが有るのだと思います MsgBox "処理が終りました。" 'と、ここに書きます End With End Sub ---------------------------------- あと、 With Worksheets("データ") が有るので、 LastRow = Worksheets("データ").Range("A"...... の、Worksheets("データ"). は無くても大丈夫じゃないでしょうか LastRow = Range("A" & Rows.Count).End(xlUp).Row + 1 で、動くと思います
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。良く考えたら、質問が不完全。 どこへ(どのセルに)入力しているのか書いてない。 >データーが入力されるように・・ 入力しないなら、 どんなデータ?定数?現アクチブセルの値? 初心者でも状況を文章でなら説明できるはずだし、できないなら正確な質問はできないわけです。 ーー ボタンをクリックした機会を捉えて、メッセージを出すのは回答のとおりやれば簡単です。 しかしデータを入れてエンタを押したセルを、ボタンを押した機会に 割り出すのはできません。 なぜかというと、データ入力したあとアクチブセルを任意に動かしたり、動かさなくても、入力後に下、横(上、左)へ動くアクチブセルが動く仕組みがあるからです。特殊な例では、VBAで如何様にもできますから。 まあ後者は、無理すればVBAで入力したセルを取れると思いますが。 ーー ですからワークシートのChangeイベントなど使い、Target引数に頼って、セルの値とアドレスを表示できます。 ーー あるいはデータのSheet2のセット先アドレスを入力者にメッセージで伝えたいのかな。 ーー その際、私の質問(補足依頼)の>(1)はSheet2のセルがどこか書いてないのですが、既存入力済み行の直下行かな。 に答えていたいてないのはどうなったのですか。 #1の、お礼のコードでは、今まで入力したA列の次ぎの行に入れるのらしいが。Range=・・がお礼には出てない。 ーー Sheet1のChangeイベントに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then n = Worksheets("Sheet2").Range("A65536").End(xlUp).Row ' MsgBox n Worksheets("Sheet2").Cells(n + 1, "A") = Target MsgBox "Sheet2のA" & n + 1 & "にデータをセット" Else MsgBox "入力対象列以外" End If End Sub Sheet1のA列に入力されるものだけを対象にする例 ーー VBAの学習でもイベントの考えに対処するのは、相当後になります。 しかし初心者の発想はエクセルを使い始めたら、すぐこれができたら (何々したとき、何々を自動でさせる)と思う人が多い。
お礼
迷惑かけてすいません。親切に書いていただきありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
ボタンをクリックしたとき、何々する、というのは Clickイベントのプロシージュアーをシートモジュールに作らないとなりません。 中には昔式にOnClick=”ルーチン名"というのもありますが。 例えばSheet1にコマンドボタンを張り付け編集状態で、ダブルクリックして出てくるSheet1のシートモジュールに、 (1)セルに値の設定 と (2)MsgBox ”メッセージ文” を順に並べて書きます。 (1)はSheet2のセルがどこか書いてないのですが、既存入力済み行の直下行かな。
お礼
ありがとうございます。私は初心者です。ので具体的な記述を教えてください。ちなみに入力ボタンをクリックしたら、Sheet2へ記録されます、それと同時にMsgBoxで記録されましたと表示したいです。
- ASIMOV
- ベストアンサー率41% (982/2351)
Msgbox "記録されました" です
お礼
回答ありがとうございます。具体的に記述を教えてください。 Sub 入力() Dim LastRow As Long With Worksheets("データ") LastRow = Worksheets("データ").Range("A" & Rows.Count).End(xlUp).Row + 1 End With End Sub Sub 情報を知らせるメッセージボックス() MsgBox "処理が終りました。" End Sub ちなみにこの様に書いたのですが、作動しません。どうしてですか?
お礼
本当にありがつございます。ASIMOVさんの回答でやってみたら出来ました。自分は End Sub の後ろに書いていたため共有出来なかったんでしょうね。まだまだ未熟です。