• 締切済み

エクセルのマクロで指定条件一致行をグループ化したい

エクセル2007を使用しています。 次の様なシートで、特定列で条件(ブランク)に一致する行を一括して グループ化するコードを教えてください。      A       B      C       D 1    コード  科目      実績   予算 2   5000  販売収入    100    90 3   5001  受取手数料    4   5002  その他収入 5      【売上高】 100    90 この様な会計の管理帳票で、1シート約800行あり、シートが部門毎に 全部で約100シートが一つのブックに収めてあります。 全部のシートに対して、例えばC列がブランクの行を一括してグループ化 させる様なマクロのコードを教えていただきたいと思います。 (この場合だと3~4行目) 他の部門では使わない補助科目が多く、折りたたまないと使い物に ならないため、現在は手作業で行っております。 どうぞよろしくお願い致します。 

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

方法1) >一括してグループ化するコードを教えてください。 「飛び飛びの複数の行」を一括して「グループ化」する事は出来ません。 従ってマクロを使っても、例えば次のようにします。 sub macro1()  dim w as worksheet  dim h as range  on error resume next  for each w in worksheets   w.range("A1").clearoutline   for each h in application.intersect(w.usedrange, w.range("C:C")).specialcells(xlcelltypeblanks).areas    h.entirerow.group   next   w.outline.showlevels rowlevels:=1  next end sub #補足 既にグループ化処理済みのシートにさらにグループをかけると、レベルが勝手にどんどん深まっていきます。 方法2) >他の部門では使わない補助科目が多く、折りたたまないと使い物にならない 「グループ化」じゃなく「折りたためればよい」だけなら、単に行を隠す操作を一括で行うことはできます。 sub macro2()  dim w as worksheet  on error resume next  for each w in worksheets   w.range("A1").clearoutline   application.intersect(w.usedrange, w.range("C:C")).specialcells(xlcelltypeblanks).entirerow.hidden = true  next end sub #注意 いずれの方法も、ご質問で言ってる「空白」は「ほんとに空っぽのセル」の意味で、数式等でたとえば「""」が計算されているなどではありません。

clorver
質問者

お礼

keithin様 質問内容に対して完璧に動作致しました。 どうもありがとうございました。 追加で回答補足として質問してしまいました。 恐縮ですがよろしくお願いしたいと思います。 以上、どうもありがとうございました。

clorver
質問者

補足

keithin様 早々にご回答頂きましてどうもありがとうございました。 今実行させてみましたところ、グループ化、折りたたみ共に 完璧に動作致しました。 大変助かりました。 NO1のtom04様も同様の実行結果でしたが、keithinの 実行結果がより高速に動作しました。 なお、厚かましいとは思いますが、条件を追加してみたいの ですが、ご教授願えればと思います。 1.グループ化対象の開始行を7行目からとする。 2.ブランクの判定対象列をC列とD列のどちらもブランクで あった場合のみグループ化する。 もしご覧になりましたら教えて頂ければ大変助かります。 以上、よろしくお願い致します。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 一例です。 標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test() Dim i, k As Long For k = 1 To Worksheets.Count For i = 1 To Worksheets(k).Cells(Rows.Count, 1).End(xlUp).Row If Worksheets(k).Cells(i, 3) = "" Then With Worksheets(k).Rows(i) .Group .Hidden = True End With End If Next i Next k End Sub こんな感じではどうでしょうか?m(_ _)m

clorver
質問者

お礼

早速ご回答頂きましてどうもありがとうございました。 お返事が遅れてしまい申し訳ありませんでした。 今実行させてみましたところ、依頼通りに動作致しました。 どうもありがとうございました。

関連するQ&A

  • エクセル マクロ 複数条件と部分一致

    1対多数の検索 と 複数条件(部分一致と全部一致)のためコードがよくわかりません。 例えば、xlpart、Match、Index、Offset を使い下記の処理ができる方法はありますでしょうか。 下記A~C列のリストがあります。(10000行程度) (Sheet1)   A       B      C    1 0075926  VU    SerialA  2 0623450  VU     SerialA ・ 3 0002356  WM    SerialA  4 0157592  WM    SerialB ・ 5 0023456  WM    SerialB (・・・以下10000行程度続く) (1) Sheet2の検索値A1に部分一致するものを、Sheet1のA列から選ぶ。 (2) 複数の検索結果値がでてしまうので、さらにSheet2のB1と「全部一致」する ものをSheet1のB列から選ぶ。 (3) 上記(1)、(2)の条件を満たすものをSheet1のA列から1つ選ぶ。さらにその行の C列を転記する。(複数該当する場合は上位記載のものでかまいません。) ※数値はエクセルの書式設定で文字列にしてあります。 (検索前のSheet2)   A       B        C 1 7592    WM 2 2345    VU (以下10000行程度続く) (検索後のSheet2)   A      B         C     D 1 7592    WM    0157592  SerialB      ※7592は、Sheet1のA4に該当する。 2 2345    VU    0623450   SerialA     ※2345は、Sheet1のA2に該当する。 (以下10000行程度続く) 部分一致の後の全部一致の複合的なコードの組み方がわかりません。 繰り返し処理(ForやLoop)をよく理解していないからだと思います。どなたかご教示くださいますでしょうか。大変困っておりよろしくお願いいたします。(WindowsXp、Office2003)

  • excelマクロで複数の行を一回でグループ化

    例えば以下のようなデータでA列からC列を一括でグループ化し、D列の合計額を集計したいのですが、どなたかコードをお教えいただきたくお願いいたします。 A列    B列    C列    D列 100    100    100    125 100    100    200    664 100    100    300    333 100    200    100    545 100    200    200    545 100    200    300    113 200    100    100    445 200    100    200    455 200    100    300    668 200    200    100    788 200    200    200    644 200    200    300    446 よろしくお願いいたします。

  • 条件に一致する行のみを選択し・・・

    全ての行のうち、C列にNote_on_cを含んでおり、かつI列が整数の行のみを選択し、それぞれの行のF列の数値を一括で加算/原産する方法はありますか? 例えば図の場合、15と20が整数かつNote_on_cという文字が入っているので、これらのF列の数値を一括で、+5したいのですが、どうすればよいのでしょうか。

  • エクセルマクロ:空白行を除いてコピー

    マクロで次の作業を処理したいのですが、どのようなコードを書けばよいのでしょうか?教えてください。よろしくお願いします。 ○sheet1 ☆左側 列B~Hをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 D列には固定の文字列が与えられており、E列はブランクで、D・Eともに非表示にしておきたい。 B10~B59には、固定で1~50の数字が順番に与えられている。 C10~C59、G10~G59、H10~H59には数値が、F10~F59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ☆右側 列J~Pをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 J10~J59には、固定で51~100の数字が順番に与えられている。 K10~K59、M10~M59、O10~O59、P10~P59には数値が、L10~L59、N10~N59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ○sheet2 sheet1のボタンをクリックし、sheet2を表示させ、 sheet1の値を次のようにsheet2に貼付けたい。 sheet2のB8~H107の範囲内で上から、sheet1の左側B10~H59と右側J10~P59の空白を含む行を除いた セット(列B~H、列J~P)のみをコピーし、左側と右側を連続して、値のみ貼付けたい。 ※C列とK列の空白を判定すれば良い ※並べ替えなどのために別シートを置きたくない ※非表示列の扱い方

  • マクロによる条件での行の入力と削除

     初めまして、よろしくお願いします。  次のような二枚のシートがあります  シート1      A  B  C   1     2       ・      99      100 23    101 25   102 31   103 34  104 43  105 44  106 49  107 50  108 55  109 60  110  111  ・  ・  シート2      A  B  C   1     2       ・      99      100 23  1 2 3   101 25  4 5 6 102 31  7 8 9     103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 55  5 6 7 109 60  8 9 0 110  111  ・  ・ シート1とシート2のA列に入っている数字が通し番号です。シート2では加えてその通し番号のデーター数字がB列、C列、D列に入っています。 のこシート1の通し番号31が削除、代わりに通し番5番と51番を追加し、  シート1      A  B  C   1     2       ・      99      100  5 101 23    102 25     103 34  104 43  105 44  106 49  107 50  108 51 109 55  110 60  111  112  ・  ・ マクロを実行すると  シート2      A  B  C   1     2       ・      99      100  5 101 23  1 2 3   102 25  4 5 6    103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 51 109 55  5 6 7 110 60  8 9 0 111  112  ・  ・ シート2がこように通し番号31が入っていた行番102行が削除され、新たに通し番5番が行番100に、51番が行番108に挿入追加されるマクロを教えていただきたく、よろしくお願いします。

  • エクセルマクロで条件に該当する数値を探す

    エクセル初心者です。 シート1のA1~A18に1~18の数値がランダムに入っています。(重複した値は無し) シート2の3行目C3~T3にも1~18の数値がランダムに入っています。(空欄あり、重複した数値は無し) シート2の2行目C2~T2までは左から順に1~18の数値が入っています。(順位表示) 以上の条件下で下記の作業をマクロで実行させる式を教えてください。 シート1のA1~A18の値と同じ値を、 シート2の3行目C3~T3の中からどのセル(列)に入っているかを確認して、さらに該当する列の2行目C2~T2の値を、シート3の1行目A1~R1に表示させる。 例:シート1のA1=3、A2=2、A3=1の時、 シート2のC3=3、D3=1、E3=2でした。 シート2のC2=1、D2=2、E2=3です(この行の数値は毎回同じ) 上記の時シート3にはA1=1、B1=3、C1=2となります。 *シート1のA列A1~A18とシート3の1行目A1~R1の位置関係はリンクしています。(列→行) シート1 A列 1 3 2 シート2   A列 B列 C列 D列 E列 2行見出し見出し1  2  3 3行見出し見出し3  1  2 シート3 A列 B列 C列  2  1  3 ご理解頂けたでしょうか? 初心者ですので分かりやすい回答を宜しくお願いいたします。

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

    お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートの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のB列に整理番号(順不同)が書かれてあり、シート2のC列にも整理番号(順不同)が書かれてあります。 シート1は約数千行・100列、シート2は約数万行・100列です。このシート1のB1と同じ整理番号をシート2のC列より上から検索して、最初に見つかったセル(仮にC7)を含む行をシート3にコピーする。 次にB2について同様にしてシート3にコピーする。この時の検索範囲はC8以下(C7以上は検索範囲外)とする。 同様な作業を続けて、最終的には、シート3のC列がシート1のB列と同じにしたい。 これをマクロで組みたい。どなたかご教授お願いいたします。

  • excelのマクロで条件による行の挿入

    列AとBがあり列Aに学校のクラス名A組、B組、C組・・・(20クラスほど)と氏名が 入るエクセルシートがあるのですが 先頭行はA組から始まり5行区切りで数え、(A組も5行のうちに入る) その5行内に次のB組が入らないように空白行を挿入したいです もし、5行以内にB組がない場合、次の5行でまたB組があるか判定しなければ氏名5つ あれば空白をいれてというのを20クラスぶん作るマクロは可能でしょうか? VBAの知識がさっぱりないので途方にくれています。 元のデータの例   マクロ実行後 列A   列B      列A   列B A組           A組   氏名1 111      氏名1 111  氏名2 222      氏名2 222 B組           空白行挿入 氏名3 333      空白行挿入 氏名4 444      B組 氏名5 555      氏名3 333 氏名6 666      氏名4 444 氏名7 777      氏名5 555 C組 氏名6 666              氏名7 777              空白行挿入              空白行挿入              空白行挿入              空白行挿入              C組  

  • エクセル人事データの行の削除・抽出

    莫大な人事データがあります。A列には部門コード10桁 B列には部署名1 C列には部署名2 D列には名前・・・基本給・手当・住所・連絡先等々列だけでも100はあります。行は個人別に並んでおり、名前は重複しませんが、部門コードは重複します。 10005500 財務 10005550 人事 10006000 総務 といった形でデータマスターは完成させました。部署も300ほどあるので、オートフィルタで行を抽出することは困難に近いです。チェックボックスをクリックしまくるのは億劫とミスの元です。 さて、そんなデータがあるなか、シート2に部門コード表を作成し、シート1のマスターのうち部門コードに該当する列だけを抽出したいのです。 難なく使える機能はLOOKUP関数、条件付き書式、フィルタ、条件書式などです。 大量の複数条件を指定して、マスターをいじることはできますか。 よろしくお願いいたします。

専門家に質問してみよう