• ベストアンサー
  • 困ってます

下記作業をVBAマクロを作ってボタンに登録したい

  • 質問No.9727673
  • 閲覧数92
  • ありがとう数2
  • 回答数5

お礼率 37% (6/16)

VBA勉強中です。
これまでマクロ登録した内容を弄る しかできませんでした。

下記のマクロの例をどなたかご教示下さいませんか?

ご回答を基にしっかり勉強していきたいと思います。

------------
よろしければ添付画像のフォーマットも併せて参照ください。
------------
【行追加ボタン】
・A列の最終行の一つ下に行を追加する(初回は3行目→A3~E3)
・追加した行のC列の書式を文字列に設定
・追加した行のC列に"0001"、D列に"9"を入力する
・追加した行のA列をアクティブにする

【前行コピーボタン】
・A列の最終行の一つ下に直前行をコピーする
・追加した行のA列をアクティブにする

【済ボタン】
・操作している行のE列に"済"を入力する

【保存ボタン】
・A~E列の3行目から最終行までをコピーする
・新規ブックを作成し、A3に貼り付け
・新規ブックを[C:\Users\test\Desktop] へ 名前を [yyyymmdd.xlsx](今日の日付)にして保存
・[yyyymmdd.xlsx]を閉じる

【終了ボタン】
・A~E列の3行目より下を削除し(上方向)、上書き保存せずにExcelを終了する
------------

ご回答頂ければ幸いです。

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

  • 回答No.1
  • ベストアンサー

ベストアンサー率 56% (743/1316)

Excel(エクセル) カテゴリマスター
>【行追加ボタン】
> ・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件)

  • 回答No.5

ベストアンサー率 27% (4524/16175)

1段階ことにマクロの記録を取って、コードを印刷して、操作とコードを睨み、対応関係を調べる(考える)ことから始めるべきだと思う。
>ボタンに登録したい
これも
・ボタンに登録や
・ショートカットや
・ブックオープン時の自動実行 など
色々考えられる。WEBなど調べること。
ーー
また余り初めから、自分以外の人が、このブックやシートを使うことを考慮しない方がよい。抑制的にして、問題・課題を考えること。
操作や入力チェックやガイダンスやデータ保護などのこと。
この点を充実しようとすると、なかなかVBAの範囲でも難しいことに直面する。
特に他ソフトとの連携などは、素人はすぐ持ち出すが、本当は難しい。
VBAを何年もやってからにすべきだ。
ーー
こんな要望の仕方だと、ソフト業者に発注するようなことの、極くスモールな
事になってしまうだろう。あるいはVBAスクールで勉強するとか。
ここは、無料の回答コーナーとはいえ、ソフト作成には、原材料はないとはいえ、コードを作成するのは、作成時間やテストデータを作成するには時間がかかるのです。これを無料の範疇と捉える考えこそ、問題と思う。やりすぎではないか。
このコーナーには、VBAの課題の丸投げは禁止かなと思っていたが、現状は、緩んでいるようだ。
もっと行きずまった点や前に進めない個別の質問に絞って、質問すべきでしょう。
OKWAVEには、スモールソフトの作成依頼は認めているのかな。
  • 回答No.4

ベストアンサー率 30% (29/94)

[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
  • 回答No.3

ベストアンサー率 30% (29/94)

アプリを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
お礼コメント
konrar51

お礼率 37% (6/16)

ご解説ありがとうございます。
頂いた回答を基に、一度といわず何度も自分で記録して編集します。

ご協力ありがとうございました。
投稿日時:2020/03/26 15:30
  • 回答No.2

ベストアンサー率 56% (387/690)

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
このページは、勉強を初めたところなら、大変役に立つと思います。
お礼コメント
konrar51

お礼率 37% (6/16)

ご解説ありがとうございます。
頂いた回答を基に、一度といわず何度も自分で記録して編集してみます。

ご教示頂きありがとうございました。
投稿日時:2020/03/26 15:31
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ