• 締切済み

オートフィルターで抽出されたデータの参照方法について

1000件以上のデータをA,B、C列にオートフィルターをかけて抽出されたデータのA,B、C列およびD列目の値を参照する式を組みたいのですが、当然のことながらオートフィルターをかける都度、表示されるセル番地が変わるので式がくめません。 多分、マクロでコピーしてどこかにペーストすればいいのでしょうが、まったくわかりません。お教えください。

  • moooon
  • お礼率70% (118/167)

みんなの回答

  • vbafriend
  • ベストアンサー率47% (17/36)
回答No.6

こんばんは。 Sheet1にデータが入力してあるのであれば、私のコードできちんと動くはずです。 >記述してある白い部分の上には、右が「Worksheet」左に「BeforeRightClick」と出ています。 どうしてでしょうね? この意味が私には理解できませんが、もう一度コードすべてをきちんとコピー&ペーストしてみて下さい。 エクセル2000で動作確認済みなので、動くと思います。 操作の仕方は、コードをコピー&ペースト後 ・データを抽出する。 ・抽出されたデータの下の部分にマウスポインターをあわせて右クリックしてみて下さい。

  • vbafriend
  • ベストアンサー率47% (17/36)
回答No.5

こんにちは。うまく動かないようですね。こちらではきちんと動作していますので、そちら側の問題だと思います。 まず考えられる点としては、データが入力されているシートとコードが書かれているシートが一致していないことが考えられます。その辺をチェックしてみて下さい。 もし解らない時は、データの入力されているシートがシートタブの左から何番目になっているかを教えて下さい。 お手数をおかけいたしますが、よろしくお願いいたします。

moooon
質問者

補足

データの入力はsheet1です。 テストとして7行目が項目、データは8~15行にしか入れてありません。 コードは、VBA Projectのsheet1(Sheet1)にペーストしました。 記述してある白い部分の上には、右が「Worksheet」左に「BeforeRightClick」と出ています。 どうしてでしょうね? なお、 試しに、標準モジュールに Sub TEST() Dim i As Integer Dim myRow As Integer 'If Target.Row < 8 Then Exit Sub '(ここがエラーになったので「'」を入れた) For i = 8 To Cells(Rows.Count, 1).End(xlUp).Row If Rows(i & ":" & i).Hidden = False Then Range("C" & i & ":" & "I" & i).Copy Destination:=Range("J1") Exit Sub End If Next i End Sub と記述してマクロボタンからやってみたのですが駄目でした。

  • vbafriend
  • ベストアンサー率47% (17/36)
回答No.4

こんばんは。回答が遅くなり申し訳ございません。早速マクロを組んでみました。次のように操作してみて下さい。 ・データが入力されているブックを開き、ALT+F11キーを押してVBE画面を開き、画面左上のVBAProjectと書かれている下のSheet1にマウスポインターをあわせダブルクリックし、左側の白い部分に下記のコードをコピー&ペーストする。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim i As Integer Dim myRow As Integer If Target.Row < 8 Then Exit Sub For i = 8 To Cells(Rows.Count, 1).End(xlUp).Row If Rows(i & ":" & i).Hidden = False Then Range("C" & i & ":" & "I" & i).Copy Destination:=Range("J1") Exit Sub End If Next i End Sub ・再度ALT+F11を押してエクセルの画面にもどり、抽出をした後、8行目以降の適当なセルにマウスポインターをあわせて右クリックする。 マクロが走り出し、抽出された一番上の行のデータがJ列以降にコピーされると思います。 お試しになってみて下さい。

moooon
質問者

補足

さっそくありがとうございます。 そのとおりやってみましたが、動かないというか、コピーされないのですが・・・・。

  • vbafriend
  • ベストアンサー率47% (17/36)
回答No.3

こんばんは。お返事が遅くなってすみません。私が想像していたシートの構成とちょっと違うようなので、再度補足をお願いいたします。 1.オートフィルターのバーはどの行に配置しているのか。 2.1行目~6行目までの状態 2.J列~P列にC列~I列の値を表示するということでいいのかどうか。 3.値を取得した後の処理もマクロで実行させるかどうか。 4.もしマクロで実行させるのであれば、どの様なことをさせたいのか具体的に詳しく教えて下さい。 お手数をおかけいたしますが、よろしくお願いいたします。   

moooon
質問者

補足

GOOがおやすみで補足ができませんでした。すみません。 > 1.オートフィルターのバーはどの行に配置しているのか。 7行目の項目行です。 > 2.1行目~6行目までの状態 ページのタイトルや説明等が記入してあります。 > 2.J列~P列にC列~I列の値を表示するということでいいのかどうか。 オートフィルターで抽出されたデータの最上段の行の各セルのデータを、セル番地を特定できる個所に転記できれば結構です。(そのセル番地を式に組み込みますので) > 3.値を取得した後の処理もマクロで実行させるかどうか。 しません。 よろしくお願いします。

  • vbafriend
  • ベストアンサー率47% (17/36)
回答No.2

初めまして。マクロを組めば貴方様のおやりになりたいことは簡単に出来るかと思います。 もしよろしければコピー&ペーストするだけで実行することが出来るサンプルマクロを組んでみたいと思います。ご希望の節は、次のことを教えて下さい。 ・項目行があるのか・ないのか。あるとしたら何行目が項目行なのか。 ・データは何列目まで入力されているのか お手数をおかけいたしますが、よろしくお願いいたします。

moooon
質問者

補足

さっそくご親切にありがとうございます。 データはシートの C列からI列までで、7行目は項目行、最終行は3172行です。 オートフィルターを実行した結果、抽出されたデータの最上列1行分の項目ごとの値を取得したいのです。 よろしくお願いします。

  • dejiji-
  • ベストアンサー率38% (327/858)
回答No.1

式はどこに入れていますか?オートフィルタと同じ行や列に入っていませんか。式を入れるタイミングは。 >セル番地が変わるので フィルターをかけても行番号は変わらないと思います。これは、R1C1もA1方式どちらでも同じですが。 出来るなら、別シートに入れてみて下さい。フィルターをかけても計算できると思いますが。(私は出来ましたが、エクセル2000です。) 同じシートに組むなら、オートフィルターをかけてから、フィルターの範囲外(出来れば行列とも範囲外にしてください。具体的には、表の範囲の右下ぐらいですかね。)にフィルターをかけた状態で式を入力します。これで多分式が消えることなく表示されるはずですが。 表の範囲外に式を入力してもその後、フィルターをかけると式が表示されなくなることがあります。 もし質問をはずしていたらスイマセン。

moooon
質問者

補足

わたしの書き方がまずかったようです。 たくさんのデータ行のうちオートフィルターの条件に合致して抽出されるデータ行は1つしかないのです。それが8行目のこともあれば1000行目かもしれません。 フィルターで抽出され表の一番上に表示されますが、そこのセル番地はA8かもしれず、A1000かもしれません。だからセル番地(行番号)が変わると書いたのです。 抽出されたデータを参照した式を作りたいのです。

関連するQ&A

  • オートフィルタ後の、マクロでの値の参照に関して

    オートフィルタ後の、マクロでの値の参照に関して 下記を悩んでいます。教えて頂ければ幸いです。 マクロで、あるデーター表から、オートフィルタを使用し、必要なデーターを 抽出し、マクロ内に戻し、その後の計算で使用したいと考えています。 A列、B列、C列にそれぞれ、検索条件を指定し、オートフィルタ後、下記のような状態になります。 参照したい値は、D列になります。 下記のような例では、2.5と2.7の値をマクロ内に戻したいです。 (例:オートフィルタ後) 1行  A▼  B▼  C▼  D 16行 **  **   **  2.5   20行 **  **   **  2.7 *2~15行目は見えなくなっています。 *17~19行目は見えなくなっています。 セルを参照し、マクロ内に戻すには、どのような構文(マクロ)の記述が必要でしょうか? 【備考】 ・上記の例では、セルはD16、D20となりますが、抽出条件によっては、行番号が変わってしまいます。 ・抽出後のD列のデーター数は、常に2つです。 よろしくお願いします。

  • マクロでオートフィルターの抽出が出来ない

    下記のデーターをマクロで作成しましたが、2010/03/01は抽出するが、2010/03/02以降は デバッグが発生して上手くいきません。 どの様にすれば解決できるのか、ご教授お願いします。 現状) AファイルのA列のオートフィルタオプションで、抽出条件の指定にBファイルの C6をコピーして、「Ctrl」+「V」で貼り付け抽出すると2010/03/01の24時間分の データーが抽出されます。2010/03/02を抽出するとデバッグが発生する。 データーの詳細) Aファイルに「元データー Sheet」があり、A6~A44647に、 1ヶ月分の日付が記載されてます。 (B6~B44647には、24時間を1分間隔でのデーターがあります) A列の日付は、2010/03/01~2010/03/31のデーターがあり、 「セルの書式設定」を確認すると、「標準」設定で表記されてます。 オートフィルタによりA列の、各1日分のデーターを抽出させます。 Bファイルの「作成日指定 Sheet」のB3に2010/3/1を入力すると C6には「=$B$3」で「2010/03/01」と表示する様に「セルの書式設定」 「ユーザー定義」で「yyyy/mm/dd」を選択してます。(C36まで設定) 以下C7に「=$B$3+1」で、C8には「=$B$3+2」で、C36までで「2010/03/31」 と表示させてます。

  • EXECEL2000でオートフィルター貼り付けの方法

    EXECEL2000のSheet1(A~P列)にデータが有り、オートフィルターにて データを抽出後、抽出データをコピーして別シートに溜まっている データの末尾にペーストするマクロを組みたいのですがどう組んだら良いのか? 教えてください!

  • オートフィルタ抽出データに連番をつけるマクロ

    オートフィルタで抽出したデータに連番をふりたいと思っています。このサイトで調べた結果、オートフィルタをかけてのオートフィルでの連番入力はできないと知りました。 現在しようとしているのは   A  B  C 1 クラス NO 氏名   2 1    ○△ 3 2    □× 4 1    ★♪ というデータがあり、項目にオートフィルタをかけている状態です。クラスを抽出した場合にそのクラスでの通し番号(連番)を付けたいのです。SUBTOTAL関数だと、連番が表示されるのはオートフィルタで抽出している間だけです。SUBTOTALでつけられた連番を、オートフィルタを解除しても残しておくにはどうしたらよいでしょうか。やはりコピー&ペーストしかないのでしょうか?似たような質問が多々ありますが、コピー&ペースト以外の方法をご存知の方、どうか教えて下さい。

  • エクセルのオートフィルタでのデータ抽出&カウント

    エクセルのローデータでのオートフィルタでのデータ抽出&カウントで困っています。 A列にNo.、B列にデータB、C列にデータC、D列にデータDがあるとします。 それぞれの列に1~9までの数字があり、 それぞれの列、 データの一番下(正確には1行開けて)にはSUMやCOUNTIFなどの関数(計算式)が入っています。 で、これをフィルターにかけ抽出した際、この抽出したデータのみで計算の値を表示したいのですが、 やってみると 全データの計算の値で表示されてしまいます。 どうすればよいのでしょうか? 大変困っています。 よろしくお願いいたします。

  • Excelのオートフィルタでデータ抽出するマクロについて

    オートフィルタで指定した期間のデータ抽出のマクロを作成しているのですが上手くいきません。 例えばA列に 10月29日 11月1日 11月3日 11月5日 と日付を入力しており、B列、C列にデータを入力していたとして D列1行目に10月31日、D列2行目に11月4日と入力し D列1行目からD列2行目までと指定したデータを抽出するマクロを教えていただけませんか。 マクロ初心者で、困っております。どうかよろしく御願いします。

  • エクセル・オートフィルタを使わず関数で抽出をするには

    excelのデータで、該当する項目のある行のみの抽出をオートフィルタもマクロも使用せずに、関数で行う方法があれば教えてください。     A B 1  桃太郎 123456 2  猿   122222 3  キジ  123555 4  桃太郎 122245    … 1000 桃太郎 002145 ↑このような表で「桃太郎」だけを抽出したいのです。 イメージとしては、ボックスに「桃太郎」と入力するだけで結果が一覧として出るようなものを作りたいのです。 さらにB列が昇順に並び替えされていると、なおよいのです。 随時更新するデータなので、その都度の最新の表が欲しいのです。 オートフィルタ→並べ替えをすれば簡単なのですが、エクセルを全く使えないような人がいる職場環境でして、教えるのが面倒というのとデータがぐちゃぐちゃになったら困るので、誰でも簡単にできる方法はないものかと考えています。 また環境的にマクロはあまり使いたくないのです。 よろしくお願いします。

  • オートフィルターで抽出後の集計 ユーザー定義関数

    以下のようなテーブルがあったとします。(図参照) A列 ID B列 数値A C列 数値B D列 抽出A E列 抽出B フィルターでD列E列で抽出した後に、B列の数値、例えば数値が1~3あるとします。 それぞれ1~3のC列の数値の合計の式をユーザー定義関数で作ることは出来ますでしょうか? コードかけません宜しくお願いします。 式1 フィルター抽出後のB列の1という数字のみのC列の数値の合計 式2 フィルター抽出後のB列の2   同様 式3 フィルター抽出後のB列の3   同様 VBAの知識はあまりありませんが、モジュールの追加とコードを貼り付ける作業は出来ます。 エクセル2013 64bitです。 宜しくお願いします。

  • オートフィルタ抽出データのみ

    エクセルで オートフィルタで 抽出するさいに その列に打ち込まれている内容が選択できますが その打ち込まれているものだけ 別シートにほしいのですが 方法はありますか? 下記のエクセルシートで フィルタした場合 Aの抽出データの「青 赤 黄」を別シートに  A  B  C  D 1 青 10 済 A社 2 赤 50 未 B社 3 黄 10 済 A社 4 赤 10 未 B社 5 青 11 済 F社 6 ↓  A  B  C  D 1 青 2 赤 3 黄 4 5 上記のようにしたい場合どうしたらいいかお願いします。

  • マクロでオートフィルタを使い、抽出した表の特定の列に一定のデータを入れたい

    マクロを使い、オートフィルタをし、A列の人名でデータを抽出しました。 この抽出した表のB列全てに、「本社」という文字列を入れる為には、どうすれば良いでしょうか? 皆様の知恵をお貸し下さい。 よろしくお願い致します。

専門家に質問してみよう