- ベストアンサー
VBAのオートフィルタ後のデータを二次元配列に取得する方法
- VBAでオートフィルタ後のデータをVariant型の変数に取得する際、二次元配列を使用する方法をご紹介します
- 例えば、[点数]列を[50点以上]でオートフィルタした結果を取得する場合、ActiveSheet.Range("A2:C42").SpecialCells(xlCellTypeVisible)を使用します
- しかし、現在のコードではオートフィルタ後のデータのうち、21行目のデータしか取得できない問題があります
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連する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
- ベストアンサー
- Visual Basic
- オートフィルタで抽出した表の集計
はじめまして。さっそくですが質問させていただきます。 現在、以下のような表があるとします。 行列 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行目からデータが入っています。 いろいろ調べたのですが、よくわからなかったので教えていただければ 幸いです。 宜しくお願いします。
- 締切済み
- Visual Basic
- エクセルのオートフィルタについて
エクセルのオートフィルタについて教えてください。 エクセル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回目のプログラムは正常に動くのですが、 次に同じシートを利用して、またプログラムを動かすと、 シート上にオートフィルタが既に設定されているままになっているので、 オートフィルタを解除して終わってしまいます。 なので、【すでにオートフィルタがシート上で設定されている場合は、オートフィルタを解除する】 ということをプログラムに組み込みたいのですが、そういった式(?)は ありますでしょうか。 ※初心者で、わかりにくい文章になっているかと思いますが、 何卒宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
- エクセルのオートフィルタ機能について
エクセルのオートフィルタ機能について エクセルのオートフィルタで、オプション機能を使えばそのセルの一部の文字(例「田中太郎、田中次郎」がセルの項目のとき、抽出条件を「田中」+「含む」とする)を含む全てのセルを抽出できますが、オプション機能を使わずに、最初からオートフィルタのリストとしてセルの項目の一部分(例の「田中」)を設定しておくことは可能でしょうか?
- ベストアンサー
- その他(インターネット・Webサービス)
お礼
やはり都合のいいものはないのですね。 ご回答ありがとうございました。