これで楽に!?VBA活用こんにちは、Ryoです。Excelで表を扱うことはたくさんありますが、その中の便利な機能の一つに表をフィールドごとにグループ化して集計する方法があります。この機能はVBAでも扱うことが出来るので、今回はグループ化して集計、解除、アウトラインの折り畳みや展開について書いていきます。1.サンプル概要サンプルとして以下画像のような簡易的な表を使用します。この表のA列(Date)をグループ化し、C列の数量(Quantity)合計を集計する処理を行うと、以下の通りになります。Date欄が日付ごとにグループ化され、それぞれの集計と総計を自動的に処理してくれますので、便利な機能ですね。画像の左側に表示されているアウトラインも折り畳みや展開の処理を行うことができます。画像では全て表示されている状態でしたが、レベル1だけの表示では以下にようになります。レベル2までの展開であれば、このようになります。これらのグループ化は当然ながら解除する処理も出来ます。解除後の状態は以下画像の通りで、集計処理した際に自動生成された数式などは残ります。以上のサンプルについて書いていきます。Sub改行して記述してますから3行ですが、実質1行で済みます。このように表をフィールドごとにグループ化して集計するにはSubTotalメソッドを使用します。オブジェクト.SubTotal(GroupBy,Function,TotalList,Replace,PageBreaks,SummaryBelowData)この構文にある引数GroupByにグループ化する列を指定、引数Functionに集計方法を指定、引数TotalListに集計する列を指定します。これら3つの引数指定は必須で、以降の引数4つについてはオプションとなっています。その他引数については特に記事では触れませんので、ご興味がある場合は英語ですがこちらのMSDNをご参照ください。TotalList:=3とするものです。引数Functionに設定する値は他に以下がありますので、用途に応じて使い分けることも可能です。補足ですが、サンプルコード記述中にあるCurrentRegionは「空白セルで囲まれた領域」を選択してくれるものです。...(以降は同じ)としてもOKなので、ご参考までに。Subアウトラインの展開や折り畳みを行う場合は、ShowLevelsメソッドを使用します。オブジェクト.ShowLevels(RowLevels,ColumnLevels)引数RowLevelsは行のレベル、引数ColumnLevelsは列のレベルを指定するもので、いずれか片方の値は必ず指定する必要があります。Sample2()はレベル1のみ表示、Sample3()はレベル2まで表示、Sample4()はすべて展開となっており、すべて展開したい場合は実際に設定されているレベルよりも大きな値を設定すればOKです。これらをボタンなどに登録しておくと1クリックで展開や折り畳みが出来るので用途によっては便利な場合もあるかと思います。Subグループ化を解除する場合はClearOutlieメソッドを使用します。オブジェクト.ClearOutlineこのオブジェクトには解除対象を指定しますので、セルA2を含む表全体のグループ解除であればRange(“A2”).CurrentRegion.ClearOutlineのようになります。ClearOutlineメソッドは部分的にグループ解除することもできます。その場合は解除したい行や列を指定すればOKなので、本サンプルの3~5行目を解除したい時はこのような記述になります。Sub3.まとめVBAを扱ってデータ収集を行う機会は多いと思いますが、そのデータを集計していく作業を補助する機能としては有用ではないかと思います。この処理を実行すると自動的に集計などを行ってくれますがグループ化解除しても元の表に戻してくれる訳ではありませんので、そこが必要な場合は別シートにコピーしてから実行するなどの配慮が必要になりますから、その点だけご注意を。以上、【VBA】表をグループ化し集計/解除、折り畳みや展開を行う方法についてでした!今回の記事が何かの参考になれば幸いです。【VBA】ウィンドウ枠の固定を行うExcelで表示するデータ量が増えてくると便利なのが「ウィンドウ枠」の固定ですよね。この固定や解除をVBAでもFreezaPanesプロパティを使うことで実行できます。以前の記事「行/列の非表示」サンプルコード内で例として使用していますが、今回は内容について改めて書いていこうと思います。記事を読む【VBA】図形(オートシェイプ)やシェイプ内文字の色を操作する先日の記事でVBAによるシート内に図形(オートシェイプ)を作成する内容を書きましたが、実際使用する上では作成した図形に色を塗りたい、枠線も塗りつぶした色に合わせたい、図形内に表示した文字の色を変えたい・・・等々思うことがありますよね。そこで今回はその指定方法について書いてみたいと思います。記事を読む【VBA】ブラウザを起動し指定URLを表示するVBAを扱う中で用途によっては直接ブラウザを起動したいこともあるかと思います。ChromeならRunメソッドを使うことで実行できますので、今回はその内容について書いていきたいと思います。記事を読む【VBA】クイック分析機能を表示するExcel2013よりクイック分析機能が加わりましたが、その機能をVBAを使って「書式」「ツールチップのみ」「グラフ」「スパークライン」「テーブル」「合計」を表示させることができますので、今回はその内容について書いていきます。記事を読む【VBA】参照しているライブラリ一覧を取得するExcelVBAではライブラリに対し参照設定を行いますが、それらの内容をReferencesプロパティを使用して簡単に取得して一覧表示することも可能なので、今回はその内容について書いていこうと思います。記事を読む【VBA】セル範囲やスクロールを制限するExcelで不特定多数の人間がデータ入力をする際に選択できる範囲を限定したいことがあると思います。VBAではスクロール可能な範囲を限定するScrollAreaプロパティを使うことで、指定した領域以外のセル選択やスクロールを不可と出来ますので、今回はその内容について書いていきたいと思います。記事を読む【VBA】ファイル操作(開く/閉じる/コピー/削除/ファイル名取得)Excelを使って日々仕事をする中で切り離せないのはファイルに関連する操作ですが、VBAも同様にファイルに対して「開く」「閉じる」「コピー」や、場合によっては「削除」、「ファイル名の取得」や「一覧」で取得したい等がありますから使う頻度も多くなりますので、今回はこのファイル操作に関して書いてみたいと思います。記事を読む【VBA】ワークシートに空白セルやセル範囲を挿入するExcelでデータを処理する際に新旧データの入替などを目的として、空白のセル(範囲)を挿入したいケースもあるかと思います。セル挿入後のシフト方向は右や下に指定できるので、知っておくと何かと役立つ場面も多いと思いますので、今回はその内容について書いてみたいと思います。記事を読む【VBA】PowerPointのスライドショーを実行するExcelの資料から関連するパワーポイントの資料にスムーズにつなげたい場合なども状況によってはあるかもしれません。その場合はVBAのRunメソッドを使うことでExcelからPowerPointを起動し、スライドショーを実行することも出来ますので、今回はその内容について書いていきます。記事を読む【VBA】セル内の文字列角度を操作するVBAで処理する過程において文字列を入力することは多々ありますが、様式などによっては右上がり/右下がりの角度を付けたり、縦書きにしたいこともありますよね。そんな時に使えるセル内での文字列角度操作と覚えておくと有用なセル内の文字に合わせてセル幅や高さを自動調整する方法について今回は書いてみたいと思います。※当サイトはロリポップ!のハイスピードプランです。はじめまして!Ryoと申します。中小企業製造メーカー勤務で主に生産技術業務に勤しむ一方、社内PC管理やVBAで業務効率化を図る日々を送っていますので、これまでの経験や実践してきた内容をここで発信していきたいと考えています。困った時の一助になれるようなブログ作りを目指します。「自恃ろぐ」はAmazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。