- ベストアンサー
エクセルのマクロについて
エクセルで、毎日12行のデータが増えていくシートがあるのですが、集計の都合でどうしても最終行に関数式があり、その式の1行上に毎日「12行挿入」してデータを入れてます。毎日行挿入を何回も繰り返すのは面倒なので、マクロを記録しましたが、挿入する列番号が絶対参照?だったらしく、翌日は変な所に12行挿入してしまいます。マクロで毎日最終行の一つ上に12行挿入する方法をご存知の方、その方法を教えてください。
- takuya_9769
- お礼率76% (58/76)
- オフィス系ソフト
- 回答数7
- ありがとう数5
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
マクロ記録をして、それを修正しながら覚えるのが良いと思います。 記録マクロが下記のようだとしたら、 Sub Macro1() Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert '・ '・ End Sub 日本語に約すと Sub Macro1() 選択した所に行挿入 選択した所に行挿入 選択した所に行挿入 '・ '・ End Sub って感じでしょうか。 選択した所に挿入しているので、最終行を選択してやれば良いわけです。 A列が最終行を保持している列として、下記の操作を記録します。 1.何にもデータが無い列の何処かのセル(例ではG1)を選択 2.Ctrlキーを押しながら↓キーを押す 3.Ctrlキーを押しながら←キーを押す 4.Ctrlキーを押しながら↑キーを押す 5.記録終了 Sub Macro2() Range("G1").Select Selection.End(xlDown).Select Selection.End(xlToLeft).Select Selection.End(xlUp).Select End Sub 後は二つをつなげると完成です。 Macro2のSub Macro2()~End Subの間をMacro1の一番うえにコピーします。 Sub Macro1() '↓Macro2より Range("G1").Select Selection.End(xlDown).Select Selection.End(xlToLeft).Select Selection.End(xlUp).Select '↑Macro2より Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert '・ '・ End Sub 慣れてくるとマクロ記録は無駄な行が多いのに気付くようになります。 同じ処理はループに直すとか、無駄にSelectしている行を削るとか、色々試してスキルアップして行けば良いでしょう。いずれ #3さんのようにシンプルに書けるようになるために。
その他の回答 (6)
- imogasi
- ベストアンサー率27% (4737/17068)
#5です。 下記はどうでしょうか。F列までの6としていますが 本番の実情に合わせて変えて下さい。 Sub text01() d = Range("a1").CurrentRegion.Rows.Count ' MsgBox d Range(Cells(d - 1, 1), Cells(d - 1 + 11, 6)).Select Selection.Insert (xlDown) For i = 1 To 6 Cells(d - 1, i) = Cells(d - 1 + 12, i) Cells(d - 1 + 12, i) = "" Next i End Sub
お礼
ちょっと難しいですが、コピー&ペーストで使ってみます。どうもありがとうございました。
- ki-aaa
- ベストアンサー率49% (105/213)
行の挿入の方法はすでにかかれている方法で良いと思います。 しかし、実際の処理としては、最終行をコピーし、12行下に貼り付けて、元の、最終行をクリアした方が簡単です。この方法だと、$A$1:A30みたいな式は、自動的に$A$1:A42に、変更されます。 もちろん、行の挿入でも、INDIRECTや OFFSET使って、関数を書けばできます。 でわでわ
お礼
ありがとうございます。毎日12行挿入するため、OFFSETは使いまくっております(笑)。
- imogasi
- ベストアンサー率27% (4737/17068)
1つ気になることが在ります。例えば C1:C5を合計するためにC6に=Sum(c1:c5)で出している時、C6をポイントして、何行かを挿入すると、C6の式は下の行へ移動しますが、式は=Sum(c1:c5)のままです。エクセル2000。 途中の行をポイントして、行挿入すると=Sum(c1:c5)のC5の部分がC8とかに変化してくれます。 本質問では当然「行まで」の部分も変化してくれないと ダメだと思いますが、既回答のマクロは大丈夫でしょうか。私は悪戦苦闘中ですが。
補足
質問では便宜上「最終行」と書きましたが、集計や分析の為の関数が常に正しい範囲を対象にさせるため、最終行の一つ上に空白行があり、その空白の一つ上に行挿入しているので大丈夫なんです。説明不足ですみません。
- GuruGuru22
- ベストアンサー率51% (177/346)
マクロを編集しなければ、 実現は難しいかと思います。 覚える気があるのなら、 http://www.moug.net/skillup/buef/vy003-1.htm とか見てくださいな。 ちなみに A列の最終行の一つ上に12行挿入するのはこんな感じ。 Sub LinesInsert() With Range("A65536") Range(.End(xlUp), .End(xlUp).Offset(11)).Insert xlDown End With End Sub
お礼
ありがとうございます。・・・ちょっとまだ私には理解できませんでした。マクロの編集方法さえ知らないので・・・。勉強して上記の例を使わせていただきます。
- otake2002
- ベストアンサー率29% (18/61)
こんばんは。 マクロを勉強し始めて一週間の初心者が、恐れ多くも回答してしまおうと・・・m(__)m 自動記録を使ったマクロの作成で、通常の操作ではセルの参照は絶対参照でおこなわれますよね? で、ですね、それを相対参照でおこなう方法が以下のサイトに記述されています。 あ、そんなことはもうご存知? し、失礼しましたっ!(笑) http://softplaza.biglobe.ne.jp/text/1999sp/vba/vba1_3.htm 私もNo,1様の仰るような、直接Editorを作れるように、早くなりたいです♪
お礼
参考URLで勉強してみます。ありがとうございました。
- kakusuke
- ベストアンサー率36% (95/259)
最終行に関数をセットしたほうが 早いんじゃないでしょうかってことで、 Public Sub SaishugyoSet1() Dim lngX As Long '行番号 Dim lngY As Long '列番号 For lngX = 65536 To 1 step - 1 If Sheet1.Cells(lngX, 1).Value <> "" Then If lngX > 1 Then Sheet1.Cells(lngX+1, 1).Value = _ WorksheetFunction.Sum _ (Sheet1.Range(Cells(1, 1), _ Cells(lngX, 1))) 'sum関数 End If Exit For End If Next End Sub 最終行をずらすってのは Public Sub SaishugyoSet2() Dim lngX As Long '行番号 Dim lngY As Long '列番号 For lngY = 1 To 255 For lngX = 65536 To 1 step - 1 If Sheet1.Cells(lngX, 1).Value <> "" Then If lngX > 1 Then Sheet1.Cells(lngX + 12, 1).Value = _ Sheet1.Cells(lngX, 1).Value Sheet1.Cells(lngX, 1).Value = "" End If Exit For End If Next Next End Sub 適当に書いてみましたが、 時間がかかりそうです。
補足
早速のご回答ありがとうございます。・・・しかし、全く分かりません。私はマクロを編集したことが無く、いつも実際の入力をマクロに記録していただけなので・・・。すみません。実際に行挿入するときに(マクロを記録している時に)最終行の一つ上に行挿入する方法を(あれば)知りたいのです。例えばF4を押しながら行挿入するとか・・・?そんなのってないのでしょうか?
関連するQ&A
- エクセルマクロ、集計行の上に空白行挿入
エクセルデータがA、B、C、D、E列1000行まであります。 C列基準でE列を合計するマクロを作成しましたが(集計行はデータの下に挿入)、実行の結果、新たに挿入される集計行の上に空白行を1行挿入していくということを、作成したマクロに付加できるでしょうか? ご教授頂きたく、お願いします。
- ベストアンサー
- オフィス系ソフト
- Excel;取得した列データーの使用法
エクセルマクロで ある列のデーターの最終行を求め、 となりの列の最終行からその行までLOOKUP関数を オートフィルで貼り付け、更にその関数で参照した データーを文字列にして再読込じの負荷を軽減する マクロを考えています。 最終行をもとめるのマクロはよく見ますが、 その使用方法がわかりません。 どうやって代入すればよいのか・・・ マクロの勉強を始めたばかりで、出来れば明日くらいに このマクロを作りたいのですが・・・ お願いします。
- 締切済み
- オフィス系ソフト
- エクセルのマクロについて
エクセルのマクロについて教えてください。 毎月、データをダウンロードし、VLOOKUP関数などを使って、 必要項目を入れ、ピポットテーブルで合計を出すという 作業をしています。マクロを使ったら、簡単にできるのでは ないかとやってみましたが、マクロで登録しても 毎月集計をするデータの件数が異なるため、 VLOOK関数で入力されるのが、そのマクロで登録したときの ものまでで、残りのセルが空欄になっていたり、 ピポットテーブルの集計は、データの範囲を選びなおしたり しないといけませんでした。 いい方法はないでしょうか。 マクロに作業を記録して、そのシートではなく、 ほかのファイルのシートで 実行する場合は、そのマクロを登録したときのファイル(シート)を 毎回開かなければならないのでしょうか。 基本的なことがわかっていません。 教えてください。
- 締切済み
- その他(インターネット・Webサービス)
- エクセル・マクロについて教えてください
こんにちは。エクセルのマクロについて教えてください。 エクセルの表で毎日20000~30000行くらいのデータがあり、フィルタを掛けてやるのもいいですが、業務効率を考えて、マクロを使用したいと思っています。 実行したい内容は、C列(担当)は8と721以外は削除、F列(地域)は渋谷と品川以外は削除、G列(コード)は1000未満と空白行は削除、H列(数量)は0以下を削除 簡易記録マクロで記録してみましたが、毎回データの内容が異なるため、H列のマイナスが削除されていなかったり等、実行したい結果が得ることができませんでした。 マクロも少し勉強していますが本やネットでも検索したりしましたが、うまくできませんでした。ご教授ください。
- ベストアンサー
- Excel(エクセル)
- エクセルのVBAマクロについて
エクセルのVBAマクロについて、添付のような物を考えているのですが、宜しくお願いします。 B3~E15に関数を入れて、TRUE となったデーターを表示 させるまでは出来たのですが、このデーターをF~I列へ上から順に (空白行は詰めて)順次記録して行きたいのです。 B3~E15に表示させるデーターは、別シートから抽出し、 切り替えますので、結果を表示させたら、ボタンを押して記録し、 再度別データーを入れたらその下に記録して行くような仕組み を考えております。 宜しくお願いします。
- ベストアンサー
- 会計ソフト
- エクセルのマクロ機能について
もう一度 助けてください エクセルの集計表である列の移動 並べ替えをエクセルのマクロ機能でつくりました ボタンを押すだけで うまくいっていたのですが データーが増え行を増やそうと 前のマクロを削除して また最初から作ろうとしたところ 記録できません 静的変数が64KBを超えたとかでます 編集 削除しようにも実行とキャンセルしか使えません いろいろほん(VBA)を見ましたが 私のレペルでは100年無理です 簡単なエクセルのマクロにも 範囲があるんですか あるひとつのシートだけマクロを残しています 手作業の集計や決まった作業はたいへんです
- ベストアンサー
- オフィス系ソフト
- エクセルマクロ 罫線の引き方について
マクロの自動記録を使用して罫線を引きたいと考えています。 A1からD17の表があるとして、そこに罫線を引きたいのですが、最終行が17とは限りません。最終行がD150ということも考えられます。(列はDで固定) この場合どのようにしたらよいのでしょうか?? まだマクロの自動記録しか使用したこがない初心者ですが、教えていただけたらと思います。
- 締切済み
- SE・インフラ・Webエンジニア
- Excelのマクロで、開いた時に、行と日付が入るようにしたい
教えてください。WinXP、Excel2000を使って、A1に日付、B1に記録をつけていて、枠線で囲んで、毎日記録しているのですが、一回一回、行を挿入するのが大変なので、マクロもしくはVBAで、ファイルを開いた瞬間に、自動的に1行挿入され、かつAの列に、その当日の日付が入るようにするにはどうしたらよいでしょうか?
- ベストアンサー
- オフィス系ソフト
- Excel フィルタした値をセルに表示する関数
図のような表をつくり、表にはテーブル書式を設定しています。 B列で社名でフィルターをかけると、C列、D列の数値の集計は、SUBTOTAL関数(109)で行っており、フィルターをかけた最終行にその集計数値が表示されます(下部画像のようになる)。 ついでに、B列の最終行に、フィルターをかけた値(ここでは文字列の"あいう会社")を表示させたいのですが、どの関数を使えばよいのかわかりません。 フィルターに使った文字列を抽出する関数、 あるいはフィルタした値は常にB列の上から2行目にくるので、 これを参照してB列の最終行のセルに表示させる方法 はあるでしょうか?
- 締切済み
- Excel(エクセル)
- エクセルのマクロで
エクセルのマクロでこんな処理はできるでしょうか? 元データ表に A列からC列まである数値が5000行にわたって入っています。 例 A B C 1行目 1 4 6 2行目 4 7 8 3行目 5 6 4 4行目 7 8 2 ・ ・ 今、1行目と2行目の間に新たな行を挿入し、 C1セルの値を新たに挿入した行のA列からC列に貼り付けたい。 同様に現時点での2行目と3行目の間に新たな行を挿入し 今度はC2セルの値をその行に貼り付けます。 上の例で言うとこうなります。これを最後の行まで繰り返します。 A B C 1行目 1 4 6 2行目 6 6 6 3行目 4 7 8 4行目 8 8 8 5行目 5 6 4 6行目 4 4 4 7行目 7 8 2 8行目 2 2 2 ・ ・ 元データは5000行あるので、都合1万行になるということです。 このような処理はできるでしょうか? お教えいただけたら幸いです。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
お礼
マクロを勉強しないと・・・タグさえ知らないので・・・。ありがとうございました。