• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【VBA】オートフィルタ後のデータの扱いについて)

VBAのオートフィルタ後のデータを二次元配列に取得する方法

このQ&Aのポイント
  • VBAでオートフィルタ後のデータをVariant型の変数に取得する際、二次元配列を使用する方法をご紹介します
  • 例えば、[点数]列を[50点以上]でオートフィルタした結果を取得する場合、ActiveSheet.Range("A2:C42").SpecialCells(xlCellTypeVisible)を使用します
  • しかし、現在のコードではオートフィルタ後のデータのうち、21行目のデータしか取得できない問題があります

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

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

飛び飛びのセル範囲をそういう具合に格納することはできません。 素直にエクセルの機能を使って Sub macro1()  Dim arr As Variant  Dim w As Worksheet, w0 As Worksheet  Set w0 = ActiveSheet  Set w = Worksheets.Add  w0.Range("A2:C42").Copy Destination:=w.Range("A1")  arr = w.Range("A1").CurrentRegion  Application.DisplayAlerts = False  w.Delete  Application.DisplayAlerts = True End Sub のような格好で目的を達成するのが良いと思います。

noname#142160
質問者

お礼

やはり都合のいいものはないのですね。 ご回答ありがとうございました。

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

関連するQ&A

  • Excel VBA オートフィルタ後、置換

    下図のようにオートフィルターで絞り込んだ後、 この「田中」を「佐藤」に変えたいと思っています。 フィルターで絞り込むところまでは作れましたが、 その後「田中」のセルを参照し、「佐藤」に編集する方法がわかりません。 置換という方法もありますが、今回はそれは使わず、 範囲選択しまとめて変更ということがしたいと思っています。 どのようにプログラムを組めばいいでしょうか? 回答よろしくお願い致します。

  • Excelのオートフィルタで抽出したものを配列で取得したい

    Excel2003 vba お世話になります。以下のようなコードを書いているのですが、意図しない動きをしているのでご教授願いたいです。 No|名前 |食べられる 1 |リンゴ|○ 2 |テレビ| 3 |電話 | 4 |バナナ|○ 5 |ミカン|○ 上のようなデータにオートフィルタをかけて、○がついているデータだけを配列に取り込もうとしています。 Dim Buff As Variant Cells(1, 1).AutoFilter field:=3, Criteria1:="○" Range("A1").CurrentRegion.Select Buff = Range("A2", "C6").SpecialCells(xlCellTypeVisible) '一番上はフィールド名なのでA2から フィルタがかかった状態で見えている「リンゴ」「バナナ」「ミカン」のデータだけをBuffに取り込んでいるつもりなのですが、Buffの中には1行目にかかれている「リンゴ」のデータしか入ってきません。 フィルタがかかっている時は違うデータの取り方があるのでしょうか。 よろしくお願いします。

  • VBAオートフィルターの使い方

    VBAオートフィルターの使い方 情報_test.xlsに存在する氏名をキーワードとして抽出し別のファイルに貼り付ける操作をAutoFilterを使用して実行コードを記述しました。filterまでは機能するようですが、別のファイルに貼り付けるところがうまく機能していないようです。実行させるとエラーにはならず、貼り付け先シートが空白のままになっています。どこに間違いがあるのでしょうか。 Sub Macro14() ' Application.ScreenUpdating = False ' Dim jikkou As Integer Dim mymsg As String jikkou = MsgBox("このエクセルファイルに集約された情報をもとに担当者毎の入力ファイルを作成します。既存のファイルが更新されます。", vbYesNo) Select Case jikkou Case vbYes ' Workbooks.Open "S:¥情報入力ファイル¥情報_高橋.xls" ActiveSheet.Unprotect ActiveSheet.Cells.Clear ' 'オートフィルターで担当者別に情報を抽出しそれぞれのファイルに書き出す ' Workbooks("情報_test.xls").Worksheets("情報入力").Range("A1").AutoFilter _ field:=14, Criteria1:="高橋" Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Workbooks("情報_高橋.xls").Worksheets("情報").Range("A1") End Select End Sub

  • オートフィルタで抽出した表の集計

    はじめまして。さっそくですが質問させていただきます。 現在、以下のような表があるとします。 行列   A     B     C     1  日付    名前   金額 2 2006年10月  田中   \1000 3 2006年11月  佐藤   \200 4 2006年11月  田中   \500 5 2006年12月  鈴木   \820 6 2007年 1月  鈴木   \323 7 2007年 1月  田中   \750 ここで、A列にオートフィルタをかけて、表示されるセルのみの総合計はSUBTOTALで取れるのですが、さらにB列の人名ごとの合計を取る方法がわかりません。 例えば2006年11月のみを表示した場合、 行列  C    D 9  総合計= ¥700  ←これはSUBTOTAL(9,C1:C6)で解決 10   田中= ¥500 11   佐藤= ¥200 12   鈴木= ¥0 と、出るようにしたいのです。 オートフィルタをかけるのはA列の日付だけではなくD以降にもデータが入力されていてオートフィルタをかける場合があるとしますが人名は3つ(田中・佐藤・鈴木)のみです。 また、実際のデータはとても行数が多いので手作業で可視セルの人名ごとのトータルを毎回打つのは大変ですし、そのデータは多くの人が使うのでオートフィルタをかけるだけで、現在可視状態のセルの総合計・可視状態の田中の合計・可視状態の佐藤の合計・可視状態の鈴木の合計が一度に出るようにしたいのです。 自分としては自作関数を作成し、一応は求める結果が出るようにしたのですが、自作関数を使うとファイルを開く時に「マクロを有効にしますか?」と聞かれてしまうのが難点です。もっと簡単な方法があれば教えていただきたいです。何卒よろしくお願いします

  • オートフィルタ抽出データをコピーするマクロについて

    マクロについて勉強中の者です。 "Sheet1"にあるデータをオートフィルタで抽出し、 "Sheet2"に抽出データのみをコピーをしたいと思っています。 Range("A10:G59").Select Selection.ClearContents With Worksheets("Sheet1").Range("A1") .AutoFilter .AutoFilter Field:=1, Criteria1:="○" .CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Worksheets("Sheet2").Range("A9") End With End Sub としてみたのですが、 これを実行すると、オートフィルタが1行目(A1)ではなく、 2行目で設定されてしまい、抽出データがずれてしまいます。    A    B    C 1 品 名  仕入先  発注数 ←タイトル行に設定したい 2 りんご  ヤマト   10  ← この行に▼が設定される 色々調べた結果のマクロなので、どこが悪いのか見当がつきません。 解りやすく教えていただける方がおられましたら、よろしくお願い致します m(__)m

  • VBAでオートフィルタの可視セルクリア後空白行削除がうまくできません

    VBA初心者です。 オートフィルターで抽出した行を削除したくて、以下のように書いたのですが、最後の一文でエラーになってしまいます。 ◆エラー内容◆ 実行時エラー1004 重複する選択範囲に対してそのコマンドを使用することはできません。 ◆書いたVBA◆   Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:="=1111", Operator:=xlAnd 'オートフィルターで「1111」を抽出 Dim r As Range Set r = Range(Range("A3"), Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible) r.ClearContents 'A列の可視セルの値をクリア Range("A2").Select Selection.AutoFilter 'オートフィルターの解除 r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'A列が空白の行は削除→ ココがエラーになります --------------------------------------------------------- 元のファイル構成は2行目に項目名で、3行目からデータが入っています。 いろいろ調べたのですが、よくわからなかったので教えていただければ 幸いです。 宜しくお願いします。

  • エクセルのオートフィルタについて

    エクセルのオートフィルタについて教えてください。 エクセル2003です。 データ-並べ替え で複数の列に対してレベルごとに昇順で並べ替えをしますが、これをオートフィルタではできないのでしょうか? 例えば、A列にクラスデータがあり、それをオートフィルタで昇順にしておいて、それをレベル1として、B列に点数があり、それをオートフィルタで降順にして、それをレベル2とするような使い方です。

  • Excel VBAにて、SpecialCells(xlCellTypeVisible) に関する質問

    Excel VBAにて、SpecialCells(xlCellTypeVisible) に関する質問です。 セル ("A1:B7")に表があります。 a b 1 1 1 1 2 2 2 2 3 3 3 3 下記のVBAにて、temp2の値が、1となります。これが分かりません。 当方、欲しいのは、オートフィルタ後の見えている行の数です。 temp1=6は、オートフィルタで、選択されたセルs+ヘッダの計6こということで理解しています。 temp3=2は、列の数として、合っています。 Sub Macro1() Dim aa As Range Set aa = Range("A1:B7") aa.AutoFilter Field:=2, Criteria1:="2" temp1 = aa.SpecialCells(xlCellTypeVisible).Cells.Count 'temp1=6 temp2 = aa.SpecialCells(xlCellTypeVisible).Rows.Count 'temp2=1 temp3 = aa.SpecialCells(xlCellTypeVisible).Columns.Count 'temp3=2 End Sub 考え方として、間違ってはいないと思うのですが、行の数を求めるには、どのようにすれば良いでしょうか?

  • VBA オートフィルタの設定・解除

    VBAで、データの並べ替えを行った後、1番最後に行ごと選択してオートフィルタを次の様に設定しています。 ' オートフィルタつける Rows( 変数1 & ":" & 変数2).Select Selection.AutoFilter ----------------------------------------------- これだと、1回目のプログラムは正常に動くのですが、 次に同じシートを利用して、またプログラムを動かすと、 シート上にオートフィルタが既に設定されているままになっているので、 オートフィルタを解除して終わってしまいます。 なので、【すでにオートフィルタがシート上で設定されている場合は、オートフィルタを解除する】 ということをプログラムに組み込みたいのですが、そういった式(?)は ありますでしょうか。 ※初心者で、わかりにくい文章になっているかと思いますが、  何卒宜しくお願い致します。

  • エクセルのオートフィルタ機能について

    エクセルのオートフィルタ機能について エクセルのオートフィルタで、オプション機能を使えばそのセルの一部の文字(例「田中太郎、田中次郎」がセルの項目のとき、抽出条件を「田中」+「含む」とする)を含む全てのセルを抽出できますが、オプション機能を使わずに、最初からオートフィルタのリストとしてセルの項目の一部分(例の「田中」)を設定しておくことは可能でしょうか?