• 締切済み

excel マクロ ○○集計 の下に空白行を2行入れる

Win XP Office2000 マクロ初心者です。 エクセル集計機能を使って作った表の太字で表示される○○集計の 行の下に空白行を2行挿入したいのです。 普通に行の挿入をすると○○集計の上に入ってしまいます。 Sub 行の挿入() Selection.SpecialCells(xlCellTypeFormulas,).Select Selection.EntireRow.Insert End Sub このマクロに何かを加えるとできると思うのですが、よろしくお願いします

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >このマクロに何かを加えるとできると思うのですが、 SpecialCells ですと、返ってややこしいと思います。そこで採れたRangeオブジェクトは、Areas になって一様ではありませんから、分解しなければなりません。数式で取れたRangeオブジェクトは、最終は、「総計」がありますと、そのRangeオブジェクトを一行にしなければなりません。 まして、「集計」という文字は、左隣のセルにありますから、以下のようなマクロになってしまいます。 '----------------------------------------------------------------- 'なるべく、標準モジュールが良いです。 Sub TestMacro1() Dim rng As Range Dim i As Long On Error Resume Next   Set rng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas)   If rng Is Nothing Then Exit Sub On Error GoTo 0     For i = rng.Areas.Count To 1 Step -1    If rng.Areas(i).Cells(1).Offset(, -1).Value Like "*集計" Then     rng.Areas(i).Cells(2, 1).Offset(, -1). _       Resize(2, rng.Areas(i).Columns.Count + 1).Insert xlShiftDown    End If   Next i   Set rng = Nothing End Sub ----------------------------------------------------------------- '単純に、範囲を取って、下から、集計という文字を探すという程度ではどうでしょうか? Sub TestMacro2()  Dim rng As Range  Dim i As Long  Dim j As Integer  Set rng = ActiveSheet.Range("A1").CurrentRegion  j = rng.Columns.Count  If rng Is Nothing Then MsgBox "範囲の設定を確認してください。", 48  With rng.Columns(1)  For i = .Cells.Count To 1 Step -1   If .Cells(i, 1).Value Like "*集計" Then     .Cells(i + 1, 1).Resize(2, j).Insert xlShiftDown   End If  Next i  End With  Set rng = Nothing End Sub ----------------------------------------------------------------- ただ、こうしたOutline の後の編集は、そのまま行うと後の誤動作の可能性がありますから、最初から、並べ替えで作るか、「集計」をClearしてから、マクロを行ったほうが安全のような気がします。

usamimik
質問者

お礼

お答えありがとうございます。 Sub TestMacro2()の方が良いかもしれません。 それに、思いつきだったので実際集計した表に行を挿入とかは アウトラインがぐちゃぐちゃになり、使い物になりませんでした。 Wendy02さんのおっしゃるとおりですね。 もう少し考えてみようと思います。 ありがとうございました。

関連するQ&A

  • 指定した範囲内が空白なら行削除するマクロ

    エクセルで指定した範囲内(A列からC列まで)で何も文字が入っていなければ(空白)、行を削除する、というマクロを教えてください。 いくつか調べて、以下を試しましたが、何も動作しませんでした。 どなたかアドバイスをいただければ助かります。 よろしくお願いします。 Sub DeleteBlankRows2() Application.ScreenUpdating = False On Error Resume Next With Columns("A:C") .SpecialCells(xlCellTypeConstants).EntireRow.Hidden = True .SpecialCells(xlCellTypeFormulas).EntireRow.Hidden = True .SpecialCells(xlCellTypeComments).EntireRow.Hidden = True .SpecialCells(xlCellTypeVisible).EntireRow.Delete .EntireRow.Hidden = False End With Application.ScreenUpdating = True End Sub

  • 【マクロ】任意の行の下へ行の挿入&選択

    セルA3:DS750の表があります。 1行=1顧客として使用していますが、度々表に行を挿入して顧客を追加しています。 その為、以下のマクロを作ってみたのですが、最後に【挿入した行をActiveにする】事ができません。 ★挿入位置は、都度変わります。 ★一度に行う挿入行数は1行(多くても3行)の為、マクロは1行追加で作成しています。(行数の指定までは力量により出来ませんでした・・) ★1行目にサンプルを(非表示で)置いて、それを任意の行へ挿入させています。 1行目のサンプルを非表示のまま貼り付けると、挿入した行も非表示になってしまったので、一度再表示させてから処理させています。 サンプル行には、条件書式、数式などがところどころ入っています。 処理の最後に【'行を指定して挿入】と同じ行をActiveにする方法が知りたいです。 記録マクロをいじっただけなので見づらいと思いますが、よろしくお願い致します。 -------------------------------- Sub 挿入() '1行目を再表示 Rows("1:1").Select Selection.EntireRow.Hidden = False '1行目をcopy Rows("1:1").Select Selection.Copy '行を指定して挿入 InsertRow = InputBox("何行目の下に挿入しますか?") + 1 Cells(InsertRow, 1).Insert Shift:=xlDown '1行目を非表示 Rows("1:1").Select Selection.EntireRow.Hidden = True '挿入した行をactiveにする ・・・ end Sub -------------------------------- マクロが根本的におかしかったらすみません。。 アプローチ方法が他にある場合にもご指摘いただけると助かります。

  • マクロで不要な行を削除したい

    エクセル97を使っています。  日付 名前 品目 ・・・  1 2 3 ・ ・ といった表で、日付は2003/2/13という表示になっています。 そこで、今日以前(今日は含まない)の日付の行を削除してしまいたいのですが どうすればいいでしょうか? ちなみに、空白行を削除するのに、 Application.ScreenUpdating = False On Error Resume Next With Columns("E:F") .SpecialCells(xlCellTypeConstants).EntireRow.Hidden >=TODAY() .SpecialCells(xlCellTypeFormulas).EntireRow.Hidden >=TODAY() .SpecialCells(xlCellTypeComments).EntireRow.Hidden >=TODAY() .SpecialCells(xlCellTypeVisible).EntireRow.Delete .EntireRow.Hidden = False End With このような記述を使っています。 「今日」というとTODAY()関数ですよね。 でも、関数ってマクロに組み込めるのでしょうか? しかも「今日以前」という記述はどうすればいいのか? など考えると、わけがわからなくなりました。 今日以前の行を削除するマクロを教えてください。 ちなみに、日付の行では、曜日を追記する関数を使っております。 条件書式も3パターン使い切っております。 よって、マクロで行いたいです。 宜しくお願いします。

  • エクセルのマクロで行選択

    現在、エクセルでマクロを組んでいます。 行いたい内容としては 1.行6~1765までを選択 2. 1.で選択した行を非表示 3. 行6~"セルH2の値"までをを選択 4. 3.で選択した行を再表示 3の段階で失敗してしまいます。 Rangeメソッドに失敗しました、と出ます ソースは以下のとおりです ----- Private Sub CommandButton2_Click() Dim x As Integer Range("6:1765").EntireRow.Select Selection.EntireRow.Hidden = True x = Range("H2").Value Range("6:x").EntireRow.Select Selection.EntireRow.Hidden = False End Sub ---- 解決法がわかる方、教えてください よろしくお願いします。

  • エクセルマクロ

    マクロの初心者です。ご教示お願いします。 エクセルで複数のシートがあり、1行目から30行目は各シートに入力したデータの集計をしているため非表示にしており、集計シートに複数シートの小計が集計されています。 また各シートは31行目から40行目は各シートの凡例があります。 40行目以降、A~AE列に例えば 、名称、レベル、金額などを入力する欄があり、レベル欄には 条件書式が組まれ、AE列にはU~ADの金額の合計の計算式が組まれています。 このシートを他の人に計算式、条件書式や列の挿入削除などをいじられたくないため、 入力してもらう部分以外はシートの保護にてロックをかけていますが 1シートの中にいくつかの項目ごとに小計をとっており、項目ごとに行が多かったり少なかったりと するため、シートの保護がかかっている状態でも行挿入と削除のみはできるよう、 (行には入力してほしいセルのみロックを外し、それ以外はセルのロックをかけています。) 以下のマクロを作成しました。 Option Explicit Sub Selection_Delete() Dim ws As Worksheet Set ws = Worksheets("ノート") ws.Unprotect Password:="***" Selection.Delete ws.Protect Password:="***" Set ws = Nothing End Sub Sub Selection_Insert() Dim ws As Worksheet Set ws = Worksheets("ノート") ws.Unprotect Password:="***" ActiveCell.Rows("1:1").EntireRow.Select Selection.Copy ActiveCell.Rows("1:1").EntireRow.Select ActiveCell.Rows.Insert Shift:=xlDown Application.CutCopyMode = False ws.Protect Password:="***" Set ws = Nothing End Sub この場合ロックがかかった状態でも行挿入、削除はできるのですが、 小計行や凡例行まで挿入や削除ができてしまいます。 そこで質問は A列に”小計"と入っている行は上記マクロでも行挿入や削除ができないようにする(除外する) ことができるでしょうか? また、行挿入や、削除は40行目以降に適用させたいのですが、それも可能でしょうか? 質問文が長くなってしまい申し訳ありません。 宜しくお願い致します。

  • 行を挿入するマクロがうまくいきません。

    Sheets("りんご").Select Rows("1:1").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown Application.CutCopyMode = False End Sub というマクロは、りんごのシートにある1行をコピーして、 みかんのシートの人と名前定義してある特定の行にコピーする マクロです。この次に下のマクロを実行すると Sheets("りんご").Select Rows("2:3").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown それまでのものが残ってしまい、行がどんどん増えていってしまいます。 いずれかのマクロを実行すればリセットされて行が増えないように コピーするにはどうすればよいでしょうか・・?

  • エクセルで空白を等間隔に挿入したい

    タイトルにあるようにエクセルでマクロを使って等間隔に空白行を挿入したいのですが、 現在コードがこのようになっております。 **************************** Sub Macro1() Range("AA34").Select Do While (ActiveCell.Value <> "") For i = 1 To 10 '何行の空白? ActiveCell.Offset(1, 0).EntireRow.Insert shift:=xlDown ' Next ActiveCell.Offset(34, 0).Activate '挿入間隔? Loop MsgBox "完了" End Sub ******************************* とありまして走らせますと 24行おきに空白ができるのですが、 問題点がいくつかできました ・この場合、全体を挿入していくので(AA:AG)といった特定の列を指定したい ・空白が1列x10行と挿入されるので10行1度にしたい ・挿入していく最終行を指定したい 以上でございます ぜひ、ご教授ねがいます。

  • Excel 偶数番シートのA列が空白であるセル削除

    Excel の1つのファイル内の偶数番シートのA列が空白であるセルを行ごと削除したいのですが、下のコードではうまく動かないです。 シート番号はSheet(2)から(90)までです。 Sub 空白行削除() Dim i For i = 2 To 90 Step 2 Worksheets(i).Activate Columns("A:A").Select Selection.SpecialCells(xlCellTypeBlanks).Select Selection.EntireRow.Delete Next i End Sub

  • マクロ IF分岐 空白行は空白を返す

    指定の2列に条件付き書式設定で太字が設定してあり、2行とも太字ならその行に〇を付けるというマクロを作ってみたのですが、空白行がある場合にうまくいきません。空白行だったら、空白を返す、というふうにしたいのですが、elseのところを Cells(nRow, 21) = ""にしてもCells(nRow, 21) .clearcontentsにしても空白にならず〇が入力されてしまいます。他の空白行ではない行は正しく太字なら〇が付いているのですが、空白行は空白にするにはどうすればいいですか? Sub test() ' For nRow = 7 To 233 If Cells(nRow, 9).DisplayFormat.Font.Bold = True And Cells(nRow, 10).DisplayFormat.Font.Bold = True Then Cells(nRow, 21) = "○" Else Cells(nRow, 21) = "" End If Next nRow End Sub

  • エクセルマクロ、集計行の上に空白行挿入

    エクセルデータがA、B、C、D、E列1000行まであります。 C列基準でE列を合計するマクロを作成しましたが(集計行はデータの下に挿入)、実行の結果、新たに挿入される集計行の上に空白行を1行挿入していくということを、作成したマクロに付加できるでしょうか? ご教授頂きたく、お願いします。

専門家に質問してみよう