• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:下記作業をVBAマクロを作ってボタンに登録したい)

VBAマクロ作成の質問:行追加、前行コピー、済、保存、終了ボタンについて

このQ&Aのポイント
  • VBAマクロを使用して、Excelのボタンに登録するための処理について教えてください。
  • 具体的には、行追加ボタン、前行コピーボタン、済ボタン、保存ボタン、終了ボタンについて知りたいです。
  • また、それぞれの機能を実装するためのVBAコードや手順も教えていただけると助かります。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.1

>【行追加ボタン】 > ・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/17068)
回答No.5

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

全文を見る
すると、全ての回答が全文表示されます。
  • masnoske
  • ベストアンサー率35% (67/190)
回答No.4

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

アプリを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
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
  • mdmp2
  • ベストアンサー率55% (438/787)
回答No.2

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
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • (VBA一部使用中)手作業部分を減らしたいです・・

    こんばんは、 EXCEL2010を使っています。 A.xlsm B.xlsm C.xlsm BOOK1.xlsx ~ BOOK10.xlsx(ファイルごとに行数はバラバラ、列数はA~Dで固定) というファイルがあり、すべて開いている状態です。 使用しているのはすべてSheet1のみです。 1.BOOK1.xlsxのA~D列を手動でコピー 2.A.xlsmのA~D列にBOOK1.xlsxのA~D列を手動で貼付け macro1というマクロを実行(A~E列をマクロでB.xlsmのA~E列にコピー&貼付け) 3.B.xlsmでmacro2というマクロを実行(I1~K1に数値が出現、マクロでコピー状態) 4.C.xlsmのB18~D18に手動で貼付け 5.1に戻ってBOOK2.xlsxで以下同じ作業   C19~D19に貼付け   これをBOOK10.xlsxまで続けて保存 これをA,B,Cのファイルを使用したまま マクロを使って簡略化することは可能でしょうか? (例えばボタンを押したら1~4までを自動でやってくれるような) よろしくお願いいたします。

  • エクセル 行を追加したら自動マクロでコピー

    A列に行を追加したら自動マクロで(1)と(2)を行いたいのですが、 どのようなマクロを作成すれば良いのでしょうか? (1)C1列~E1列を選択 (2)C1列~E1列をオートフィルで下までコピー

  • 【マクロ】初心者です。色々教えていただきたいことがありますのでご教授く

    【マクロ】初心者です。色々教えていただきたいことがありますのでご教授ください。 やりたいことは下記になります。 元データ A B C 1 2 3 4 5 6 新データ D E F 3 1 2 3 1 2 6 4 5 6 4 5 かなり簡略化で書いていますがやりたいことを記述していきます。 (1)マクロの記述しているブックのシート1にボタンを作成する。 ボタンから別のブックの元データ(CSVファイル)を選択。 元データのブックのシート1をマクロブックのシート2にコピーします。 コピーデータを加工、修正していきます。 (2)次に列のデータを入れ替えます。 これは法則がないので一行目の行をみて判断します。 (ex.C行の列ならD行に挿入する) (3)列を入れ替えた後、 3 1 2 6 4 5 になっていますがこれを 3 1 2 3 1 2 6 4 5 6 4 5 というふうに一行を二行にしていきます。 (4)最後にorder byします。 1、3、2列目の順にorder byします。 以上がやりたいことになります。 特に(1)がよくわからずボタンを使用時に 別ブックのデータをコピー、貼り付けるのは どうしたらいいのでしょうか? どなたかご教授ください。 よろしくお願いします。

  • エクセルVBA、マクロについて教えてください。

    https://box.yahoo.co.jp/guest/viewer?sid=box-l-62itttdrrgzrvsaxkvu53tmg3a-1001&uniqid=d4c90186-7ae6-4c7a-8f04-a499509147fc&viewtype=detail サンプルブックを見て頂きたいのですが、シートに分けておりますが、それぞれ別ブックとなります。 エクセルブックAにはシート1-シート10まであります。 ブックAのデータをVBAを使って、ブックBに転記したいのですが、 今はVBAがわからないため、作業列、関数を使って読み取っているのですが、検索をかけると、とても遅いため、関数を消すと早く検索が出来たため、VBAでデータを転記出来たらいいなと思っております。 いくつか条件があるのですが、 ブックAのAQ-ATが作業列としており、 ブックBのG-Uまで関数を入れております。 G4==SUMIFS('[ブックA.xlsx]シート1'!$AD:$AD,'[ブックA.xlsx]シート1'!$AQ:$AQ,$A4,'[ブックA.xlsx]シート1'!$AS:$AS,$F$2,'[ブックA.xlsx]シート1'!$AT:$AT,G$2) H4==SUMIFS('[ブックA.xlsx]シート1'!$AD:$AD,'[ブックA.xlsx]シート1'!$AQ:$AQ,$A5,'[ブックA.xlsx]シート1'!$AS:$AS,$F$2,'[ブックA.xlsx]シート1'!$AT:$AT,H$2) I4==SUMIFS('[ブックA.xlsx]シート1'!$AD:$AD,'[ブックA.xlsx]シート1'!$AQ:$AQ,$A4,'[ブックA.xlsx]シート1'!$AS:$AS,$F$2,'[ブックA.xlsx]シート1'!$AT:$AT,I$2) 同じような関数をG-Uまで入れております。 このような関数を入れております。 E4==VLOOKUP(A4,'[ブックA.xlsx]シート1'!$B:$AC,28,FALSE) この関数をなくすとAdvancedFilterが早くなるので、ここの部分を転記出来たらと考えております。 ブックAとブックBはブックAのB列のコードとブックBのA列のコードが一致すれば、転記すると言った感じです。 決まっている部分は、商品コードは重複しないのと、ブックAのB列は結合されております。 結合セルのため、作業列を使用しておりました。 ブックAの基準をかえずに転記できる方法があればおしえてください。

  • Excel VBA 外部データ(CSV)の自動読込について 

    VBAに関して昨日基本書を読み始めたばかりの初心者です。 業務の効率化が急務であるという手前勝手な都合により、 さっそくの他力本願で失礼とは思いますが 以下のケーススタディについてアウトラインだけでも助言をいただけないでしょうか。 帳票[yyyymmdd].csv ←末尾に年月日 日毎にCSVファイルが存在する A1:A10 B1:B10 C1:C10 の範囲の値を 期間集計.xlsx のそれぞれシート別のyyyymmdd列1行~10行にコピーする sheet1の[yyyymmdd]列1行:10行 ←A1:A10の値 sheet2の[yyyymmdd]列1行:10行 ←B1:B10の値 sheet3の[yyyymmdd]列1行:10行 ←C1:C10の値 過去数年分の日毎帳票を一括で自動処理したいと思い、 マクロの記録機能を使用したのですがどうしてもうまくいきませんでした。 特にわからないポイントが ・CSVファイルを開かずに参照する処理  (Excelで開かずにどうしてセルの範囲を指定できるのかという矛盾が生じてる気はするのですが・・・) ・自動的に帳票[yyyymmdd].csvを昇順に参照する処理 ・それをyyyymmddに対応した列にコピーする処理  以上のVBA処理についての助言をいただけますようよろしくお願いします。 Excelのバージョンは2007です。

  • 最終行に貼り付けるマクロ

    個人の住所録ブックAがあります。 1行目 作成日 郵便番号 住所 名前  です。(これは常に1行です) この1行をコピーして、共有のブックBに追加して保存したいのです。 共有のブックBは、パスワード(****)があります。 そして、これまでのデータが入っています。 その最終行を検索して貼り付けるマクロを教えてください。 エクセル2003です。 よろしくお願いします。

  • エクセル:マクロの起動条件

    お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートのC列でデータが入っている最下行の行番号とA列のデータが入って最下行の行番号の差が100以下だった場合、マクロを実行する。 (なおC列の行番号の方が必ず大きいです) ちなみに実行したいマクロは1~6の手順です。 1.ブックを開いたとき 2.「入力用」という名前のシートのC列でデータが入っている最下行の行番号とA列のデータが入っている最下行の行番号の差が100以下だった場合 3.「入力用」というシートにかかっているシートの保護をはずし 4.データが入っているC列の最下行のA~Z列を選択して、50行分 下にコピーする。  (例えば、C列の最下行が350行の場合、A350~Z350まで を選択したあと400行まで下にコピーする。) 5.再度シートの保護をかけ 6.A列でデータが入っている最下行の1つ下のセルを選択する ちなみに、2の条件に当てはまらないときはマクロを実行しません。 またC列の最下行よりA列の最下行が大きい数字になることはないはずですが、もし同じかA列の方が大きい場合、「エラー:C列よりA列が大きくなっています」と画面に表示させたい。 なお、行番号の差:100、選択するA~Z行、50行分下にコピー は変わる可能性があるので、修正する場合どの部分を修正すればよいかも教えてください。 よろしくお願いします。

  • 今日の日付が入った行のデータを取得するマクロ

    エクセルで別のブックに入っているデータを今日の日付が入っている行にコピーする、あるいはその行から貼り付けるマクロを教えてください。 具体的には例えば、 1)日付が順番にBook1 A列に縦に並んでいます。 Book 2にあるA1:D1のデータをBook1のA列にある本日の日付の横、例えばA10にあるとすればB10:E10にコピー・貼り付けしたい。 2)同様に日付が順番にA列に縦に並んでいて、本日の日付がA10にあり、B10:E10のデータをそのひとつ下のB11:E11にコピー・貼り付けしたい。 宜しくお願いいたします。

  • エクセルのマクロ(行を挿入し連番を振る)

    ボタンを押すと以下のことを実行するマクロを作成することはできますか? A列2行目から 書類a 書類b 書類c 書類d 書類e C列2行目から 5 3 2 4 3 と入っています。C列は各書類の枚数です。 ボタンを押すと書類aと書類bの間に4行空白行が挿入され、A列とC列は増やした4行にそれぞれ書類a、5がコピーされ、B列には2列目から6列目まで1.2.3.4.5と連番が振られる。 というマクロです。 B列C列で1/5 2/5 3/5 4/5 5/5 であるという表現がしたいのです。(/は入りません) 書類が1枚の場合はB列C列共に空白で1/1とは入りません。 C列に入る書類の枚数により行が挿入されその書類の枚数分の連番が振られるようなマクロが作りたいです。 毎日何百行も手作業で挿入しコピーし連番を振る作業をしています。 決まった行数を増やすとか上の行をコピーするマクロならわかるのですが、C列の値を見て挿入する行数を判断するようなマクロができるのかわかりません。 どなたか教えて頂けないでしょうか。

  • EXCEL2010マクロ「繰り返し作業」の方法

    EXCEL2010 で「繰り返し作業」を行うマクロを組みたいのですがうまくいきません。どなたかご教授ください。 作業内容は下記の通りです。 【作業内容】  ・「B3:C3」をコピーし、「E4:F4」へ値化で貼り付け後、   「E4:F4」を印刷する。  次に、  ・「B4:C4」をコピーし、「E4:F4」へ値化で貼り付け後、   「E4:F4」を印刷する。  次に、  ・「B5:C5」をコピーし、「E4:F4」へ値化で貼り付け後、   「E4:F4」を印刷する。   ※商品が、無くなるまでくり返す。 (補足事項)  ・商品件数、数量は日々変動致します。  ・貼り付け先は全て同じです       B列  C列 E列 F列 3行目 商品A 500個 4行目 商品B 400個 商品A 500個 5行目 商品C 300個 6行目 商品D 200個 7行目 商品E 100個 以上、よろしくお願いいたします ※OKWaveより補足:「富士通FMV」についての質問です。

このQ&Aのポイント
  • 2台ルーター接続(無線LANの接続方法)について、ご教示ください。
  • ルーターを直列に2段接続することに問題はないのでしょうか?
  • 無線が非常に不安定です。改善策等がありましたらご教示お願いします。
回答を見る

専門家に質問してみよう