• 締切済み

RangeのGroupについて(ExcelVBA)

Excel(2003)のVBAで、RangeオブジェクトのGroupメソッドについて質問です。 Rows(範囲).Groupで、行のグループ化ができます。 最大7層まで入れ子構造に出来るようです。 質問ですが、次の様なものです。 1)複数の階層が設定されている場合に一気にGroupを解除する方法  ・Rows.Ungroupでは、1層目は、一気に解除されるが、2層目以後が残る 2)複数の階層が設定されている場合に、任意の層のみ解除する方法  ・例えば、第2層目のGroupのみ解除するには、第2層が設定されている行を選択して   Selection.Rows.Ungroupを実行すれば、解除出来るが、第2層のみ一気に解除する方法はありますか? 3)任意のRangeが、どのGroupに属しているのか?判別する方法 4)そもそもGroupのコレクションはあるのでしょうか? 説明が悪いので、わかりにくいと思いますが、よろしくお願いいたします。

みんなの回答

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

関連するご質問なのでぎりぎりセーフの感もありますが,ご質問を詰め込みすぎです。 >一気にGroupを解除する方法 rows.clearoutline のように。 >第2層のみ一気に解除する方法 ありません 第2層以上の行をこまめにUnGroupするしかありません >どのGroupに属しているのか rangeオブジェクト.entirerow.outlinelevel で取得できます ただし実験して確かめてください,通常「第一層」と思われる行は第2層です。 >Groupのコレクション ありません。それぞれの行のプロパティです。

関連するQ&A

  • エクセルVBA 行列のグループ化判定方法

    エクセル(2003)VBAにて シートの行、列のグループ化をされているものはグループを解除したいのですが、 グループ化されていないものに解除命令をだすと 当然エラーが出ます。 Selection.Rows.Ungroup Selection.Columns.Ungroup グループ化されているかを判別する手段はありますか?

  • エクセルVBA 行のグループ化を外すマクロ

    いつもお世話になります。 6行目から55行目までと、7以降の行から55行目までの2重にグループ化している行があり、現状は Rows("6:55").Rows.Ungroup Rows("6:55").Rows.Ungroup でグループ化を解除しているのですが、3重以上や、1重しかグループ化していないことも想定しておく必要があるのです。 このコードだと、2重以上のグループ化をしていない時にエラーが起こってしまうし、3重以上だと解除しきれないのですが、何重にグループ化していても、もしくはグループ化していなくてもエラーを起こさず解除できる方法はありますでしょうか?

  • ExcelVBAで相対参照をしたい

    ExcelVBAで、任意の範囲を選択して各行ごとにある処理を行いたいと考えています。 Sheet_Name = ActiveSheet.Name range_address = Selection.Address range_address = Replace(range_address, "$", "") range_address = Left(range_address, InStr(range_address, ":") - 1) work_columns = Selection.Columns.Count '列数 Work_Rows = Selection.Rows.Count '行数 Range(range_address).Select Range(activecell_address, ActiveCell.Offset(0, work_columns)).Select 行の選択が出来れば、あとは、ソートするだけです。 と、選択範囲の左上のアドレスと、選択範囲の行数、列数の取得は出来たのですが、1行ごとの選択がうまく出来ません。(相対参照の仕方がわかっていないだけだと思いますが) やりたいことは、選択範囲を上から順に行ごとにソートしたいのですが、どなたか?詳しい方がいらっしゃいましたら教えて頂けないでしょうか?

  • EXCELのグループ化の機能

    グループ化を何階層にも設定すると、範囲の大きいグループが必ずグループ1になります。例えば、2行から5行、2行から10行、1行から13行をそれぞれグループ化すると、1行から13行のグループ表示が最左になります。これをカスタマイズすることはできないでしょうか? またそれの延長で、上記の例では2行から10行のグループは2階層目になりますが、新たに20行から25行までと22行から23行までをそれぞれグループ化する際、20行から25行のグループを2階層目に、22行から23行のグループを1階層に属させることはできますか?

  • EXECLマクロでshapeがグルーフ゜化されてるかどうかを調べる方法は?

    全shape中のテキストを処理したいので一旦図形のグループ化を解除したいのですが、ヘルプに出ている方法で全部をselectしungroupしようとするとエラーになってしまいます。 そこで、一つづつungroupしようと思います。グループ化されてないものにungroupしようとするとエラーとなるので、グループ化されているかどうかをチェックしたいのですが、方法が見つかりません。どなたかご存知でしょうか?

  • ExcelVBAでのオートフィルタの設定

    マクロ自動記録でオートフィルタの設定・解除を行うと次のようになりました。 設定の場合 Range("A1:E10").Select ' "A1:E10"は範囲の例  Selection.AutoFilter 解除の場合 Selection.AutoFilter セル範囲を選択してSelection.AutoFilterとするだけのようですが、明確に設定・解除の指定方法はないのでしょうか。

  • 行幅をなくしたいのですが…

    行幅を0にするマクロを作成したのですが、セルが結合されているとそのセルの文字まで消えてしまいます。下のマクロは一度セル結合を解除して、その文字をコピーしたままセル幅を0にして、またセル結合してコピー貼り付けるようなやり方です。最後の3行は残しといて幅を合わしています。もっと良いやり方あれば教えてください。分かりずらいかもしれませんがお願いします。 又、元の幅に合わしたいマクロも教えていただければ助かります。   Range("A4:A14").Select Selection.UnMerge Range("A4").Select Selection.Copy Range("A12").Select ActiveSheet.Paste Rows("4:11").Select Selection.RowHeight = 0 Range("A12:A14").Select Application.CutCopyMode = False Selection.Merge Rows("12:14").Select Selection.RowHeight = 14.25

  • フィルタで検索した行をマクロで削除する時のコード。

    フィルタで検索した行を一括して削除するマクロを作りました。 記録して加工したマクロで今のところ動くのですが、 理解不能の箇所があるので教えてください。 下記マクロはC列の空白行をフィルターで選択して、表示された行を削除するマクロです。(データは2行目から始まっていて、フィルターは1行目に行います。また、行は全て連続しています。) また、コメントを各コードにつけています。 ここで、コメント内の(1)で示した箇所は2行目を選ぶことになっているのですが、何故これで良いのでしょう?2行目のデータがフィルターにより隠れることもあるのですが、このコードできちんと動きます。 可視セルしか削除しないのなら、分かるのですが、 そのようなコードも無いようですし・・・ なぜこのコードで動くのか教えてください。 Rows("1:1").Select  '1行目を選ぶ Selection.AutoFilter  'オートフィルター Range("C1").Select   'C1を選ぶ Selection.AutoFilter Field:=3, Criteria1:="=" '空白行を探す。Field3は不明です Rows("2:2").Select  '(1) 2行目を選択 Range(Selection, Selection.End(xlDown)).Select '2行目から連続した最後の行までを選択 Selection.Delete Shift:=xlUp  '選んだところをDelして上に詰める。 Range("C1").Select  'C1を選ぶ Selection.AutoFilter Field:=3  'フィルタ解除 基本的なことかもしれませんが、ご教示頂ければ幸いです。 よろしくお願いします。

  • エクセルで指定した行範囲を別のシートにコピーするには?

    (1)指定した行(数値)を変数として登録する方法 tx1 = Sheets("0").Range("A1") tx2 = Sheets("0").Range("A2") tx3 = Sheets("0").Range("A3") A1=2 A2=2000 A3=2500 (2)(1)で指定した変数を使用して行範囲を他のシートSheets(”1”)、Sheets("2”)にコピーペースト。 行(”2:1999”) ←tx1 : tx2-1(A2の数値から1を引いた数値) Rows(▲▲▲▲▲▲).Select Selection.Copy Sheets("1").Select Rows("1:1").Select ActiveSheet.Paste 行(”2000:2499”) ←tx2 : tx3-1(A3の数値から1を引いた数値) Range(▲▲▲▲▲▲).Select Selection.Copy Sheets("2").Select Rows("1:1").Select ActiveSheet.Paste ▲部分がエラーになってしまい、うまくいきません。 正しい方法を教えてください。

  • 指定するセルのRange書き込み変更

    Sub 移動と削除() Range("A1").Select Selection.Cut Destination:=Range("E1") Range("A1").Select Selection.Delete Shift:=xlUp End Sub 自動マクロで作った上記の記録があります。これをA1固定ではなくA列の指定するセルにし E1もA列で指定したセルと同じ行のE列にしたいのですが書き換える方法をおしえてください。

専門家に質問してみよう