- ベストアンサー
VBAマクロ作成の質問:行追加、前行コピー、済、保存、終了ボタンについて
- VBAマクロを使用して、Excelのボタンに登録するための処理について教えてください。
- 具体的には、行追加ボタン、前行コピーボタン、済ボタン、保存ボタン、終了ボタンについて知りたいです。
- また、それぞれの機能を実装するためのVBAコードや手順も教えていただけると助かります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>【行追加ボタン】 > ・A列の最終行の一つ下に行を追加する(初回は3行目→A3~E3) 最終行は Cells(Rows.Count, "A").End(xlUp).Row で取得できるのでそれで記録でできたコードを訂正して対応 > ・追加した行のC列の書式を文字列に設定 同上 > ・追加した行のC列に"0001"、D列に"9"を入力する > ・追加した行のA列をアクティブにする 同上 > 【前行コピーボタン】 > ・A列の最終行の一つ下に直前行をコピーする > ・追加した行のA列をアクティブにする 同上 > 【済ボタン】 > ・操作している行のE列に"済"を入力する ActiveCell.Rowで操作している行を取得できるので記録でできたコードを訂正して対応 > 【保存ボタン】 > ・A~E列の3行目から最終行までをコピーする 最終行は Cells(Rows.Count, "A").End(xlUp).Row で取得できるのでそれで記録でできたコードを訂正して対応 > ・新規ブックを作成し、A3に貼り付け > ・新規ブックを[C:\Users\test\Desktop] へ 名前を [yyyymmdd.xlsx](今日の日付)にして保存 ファイル名をFormat(Date, "yyyy年mm月dd日")などにして対応 > 【終了ボタン】 > ・A~E列の3行目より下を削除し(上方向)、上書き保存せずにExcelを終了する 記録で対応
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
1段階ことにマクロの記録を取って、コードを印刷して、操作とコードを睨み、対応関係を調べる(考える)ことから始めるべきだと思う。 >ボタンに登録したい これも ・ボタンに登録や ・ショートカットや ・ブックオープン時の自動実行 など 色々考えられる。WEBなど調べること。 ーー また余り初めから、自分以外の人が、このブックやシートを使うことを考慮しない方がよい。抑制的にして、問題・課題を考えること。 操作や入力チェックやガイダンスやデータ保護などのこと。 この点を充実しようとすると、なかなかVBAの範囲でも難しいことに直面する。 特に他ソフトとの連携などは、素人はすぐ持ち出すが、本当は難しい。 VBAを何年もやってからにすべきだ。 ーー こんな要望の仕方だと、ソフト業者に発注するようなことの、極くスモールな 事になってしまうだろう。あるいはVBAスクールで勉強するとか。 ここは、無料の回答コーナーとはいえ、ソフト作成には、原材料はないとはいえ、コードを作成するのは、作成時間やテストデータを作成するには時間がかかるのです。これを無料の範疇と捉える考えこそ、問題と思う。やりすぎではないか。 このコーナーには、VBAの課題の丸投げは禁止かなと思っていたが、現状は、緩んでいるようだ。 もっと行きずまった点や前に進めない個別の質問に絞って、質問すべきでしょう。 OKWAVEには、スモールソフトの作成依頼は認めているのかな。
- masnoske
- ベストアンサー率35% (67/190)
[No.3] です。 初回は4行目にデータがないので、このままだとエラーが起きます。 なので、4行目にデータがあるかどうかを最初にチェックする必要がありますね。 条件によって処理を変えるのは If 文です。 Dim r As Long If Range("A4").Value = "" Then ' A4セルに値がない場合 r = 4 Else ' A4セルに値がある場合 r = Range("A3").End(xlDown).Row + 1 End If Rows(r & ":" & r).Insert
- masnoske
- ベストアンサー率35% (67/190)
アプリを1つ作って欲しいのような要望ですね。 まずは、マクロの記録を使って個々のモジュールを作ってみて下さい。 たとえば、以下の4つのモジュールをマクロ記録で作ります。 ・A列の最終行の一つ下に行を追加する(初回は3行目→A3~E3) ・追加した行のC列の書式を文字列に設定 ・追加した行のC列に"0001"、D列に"9"を入力する ・追加した行のA列をアクティブにする A列の最終行はどうやって捕まえるのか? A3を選択して Ctrl + ↓ でA列の最終セルに飛びます。 その結果がマクロに記録されていますから、問題は1つ解決です。 その1つ下に1行追加するというのは、マクロ記録では対応できませんので、とりあえず1つ下の行を選択して1行挿入します。 これで一連の動作が記録されました。 次にマクロ記録で対応できなった1つ下の行を選択する部分を考えます。 問題の列は、A列の最終セルの次なので、A列最終セルの行番号を知りたいですね。マクロ記録を見ると、 Range("A3").Select Selection.End(xlDown).Select Rows("7:7").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 3行目のRows("7:7")の7が自由に変化すれば良いと分かります。 なので、これを変数 r とします。 次にA列最終セルの行番号を知りたいのですが、これはセルのRowプロパティで得ることができます。 ここまででマクロを修正すると、 Dim r As Long ' r を長整数型で宣言 Range("A3").Select Selection.End(xlDown).Select r = Selection.Row + 1 ' A列最終セルの次なので + 1 Rows(r & ":" & r).Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove このように1つずつ処理をマクロ化して動作確認し、それらをつなぎ合わせればアプリが完成します。 なお、マクロ記録はその処理に不要な設定まで記録されますので、そういう部分はネットで調べるなりして削除すれば良いでしょう。 また、Select や Selection も一々指定する必要はなく、まとめることができます。 最終的には以下の3行となります。 Dim r As Long r = Range("A3").End(xlDown).Row + 1 Rows(r & ":" & r).Insert
- mdmp2
- ベストアンサー率55% (438/787)
VBAの勉強をはじめたところなら、記録マクロを作って修正するのが良いです。 開発タブの「コード」グループの「マクロの記録」をクリックして起動し、その状態でエクセルを操作します。たとえば、行を追加するとか、 記録マクロを起動すると、最初にマクロの名前と、記録する場所を瀬底するダイアログボックスが開きます。マクロの名前は任意ですが、記録する場所は、デフォルトでは「作業中のブック」になっていますので、「作業中のブック」以外でも実行したい時は、「個人用マクロブック」に変更します。 操作が終わったら記録を終了します。作成されたマクロを起動すると、先に操作したとおり、マクロが実行されます。 「コード」グループの「Visual Basic 」を開き、作成されたマクロコードを確認します。そこには不要のコードがたくさん含まれていることがありますので削除してスリム化します。 A行の下に行を追加する記録マクロを作ると、つぎのようなものが作成されていることがわかります。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Sub Macro1() '' Macro1 Macro ' ' Rows("2:2").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー マクロに関するヒントは「Office Tanaka」さんのページが充実しています。 たとえば、ブックを上書きせずに閉じるのは http://officetanaka.net/excel/vba/file/file03.htm このページは、勉強を初めたところなら、大変役に立つと思います。
お礼
ご解説ありがとうございます。 頂いた回答を基に、一度といわず何度も自分で記録して編集してみます。 ご教示頂きありがとうございました。
お礼
ご解説ありがとうございます。 頂いた回答を基に、一度といわず何度も自分で記録して編集します。 ご協力ありがとうございました。