• ベストアンサー

エクセルの抽出技

エクセルで2000行×30列の表を操作しています。 フィルタオプションを使い100行の条件式で抽出し各結果をカウントしていますが条件式もデータ数も膨大の為問題点があります。 ファイルサイズが重くなる 条件式の変更や追加が大変。 VBAのプロシージャを使うとフィルタオプションは使用しないで済む方法はありますか? VBAは初級です。 お知恵を貸してくださいませんか。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAKA_R
  • ベストアンサー率32% (26/79)
回答No.14

とてもスマートでコンピュータにもやさしい1文ですね。 私も真似せねば!! もう出来上がっているかもしれませんが、あとは条件文の行と列の取得となりましたね。 どちらの文もfor-nextの中に入れてエクセルに計算させるのが楽だと思います。 列はおなじみのendで、行は面倒だけどdo-loopでカウントしたらどうでしょう?? あまりスマートな文でなくて、申し訳ないけれど、、、、

すると、全ての回答が全文表示されます。

その他の回答 (13)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

>長い関数は容量が重くなるので、VBAなら結果のみテキスト表示できる…と考えました。 おそらくフィルタオプションが問題ではなく、「長い」関数を多数のセルに入力していることが問題のように思います。 具体的にどのようなカウントをしたいのかよって使用する関数が異なりますが、例えばフィルタオプションの結果のフィルタされたセルの集計をしたいならSUBTOTAL関数を使用すればよいと思うのですが・・・・

tnb24344
質問者

お礼

subtotal関数も使っています。 フィルタオプションを使わない場合に長い関数が必要…という意味です。 分かりにくくて申し訳ありません。

すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

>フィルタオプションを使い100行の条件式で抽出し各結果をカウントしていますが条件式もデータ数も膨大の為問題点があります。 VBA(フィルタオプションの機能を使わない)で実行するよりも「フィルタオプションの設定」を利用するほうが通常は計算負荷が少なく、動きも軽くなると思います。 >ファイルサイズが重くなる フィルタオプションを行ってもファイルサイズは大きくならないと思うのですが「重い」とはファイルサイズのことではなく、データを変更したいときシートの再計算に時間がかかるということではないでしょうか? >条件式の変更や追加が大変。 VBAでやると、コードの中に設定する必要があるのでもっと大変なような気がしますが、具体的にどのような条件式を入れているのでしょうか? イメージとしては、フィルタオプションの設定に問題があるのではなく、再計算に時間がかかるような数式を多くのセルに入力していることが問題のような気がしますが、数式は使っていないのでしょうか?

tnb24344
質問者

お礼

ありがとうございます。VBAを使わずに抽出すると、フィルタオプション→実行を100回操作が必要です。 それぞれの結果(100パターン)を別シートへ転記したいので。

すると、全ての回答が全文表示されます。
  • shinkami
  • ベストアンサー率43% (179/411)
回答No.1

>VBAのプロシージャを使うとフィルタオプションは使用しないで済む方法はありますか? 可能です。 >フィルタオプションを使い100行の条件式で抽出し各結果をカウントしていますが条件式もデータ数も膨大の為問題点があります。 「フィルタオプション」をEXCELの式でどのように使うのか解りませんが  100行ともなると おそらくIF文の連続ですね  VBAの命令文にSelect Case 文があります。これは条件式を整理するのに大変有用です。 VBAでなく、一気にif文を重ねるのでは無く、計算途中のセル(列)を追加することにより、条件式を単純にすることができます。 この追加するセルは印刷する必要がないので、結果が出ればセルをm魏クリックして非表示にします。

tnb24344
質問者

お礼

回答を早速ありがとうございます。 フィルタオプションの条件式には、列見出しをコピーして下に <=50 というような式を入力しています。 selectcase で代用できるのでしょうか? 長い関数は容量が重くなるので、VBAなら結果のみテキスト表示できる… と考えました。 selectcaseで考えてみます。

すると、全ての回答が全文表示されます。

関連するQ&A