プロが教えるわが家の防犯対策術!

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

A 回答 (6件)

こんばんは。


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

こんにちは。

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

この回答への補足

データの入力は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

と記述してマクロボタンからやってみたのですが駄目でした。

補足日時:2003/01/06 17:32
    • good
    • 0

こんばんは。

回答が遅くなり申し訳ございません。早速マクロを組んでみました。次のように操作してみて下さい。

・データが入力されているブックを開き、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列以降にコピーされると思います。

お試しになってみて下さい。

この回答への補足

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

補足日時:2003/01/06 12:27
    • good
    • 0

こんばんは。

お返事が遅くなってすみません。私が想像していたシートの構成とちょっと違うようなので、再度補足をお願いいたします。

1.オートフィルターのバーはどの行に配置しているのか。
2.1行目~6行目までの状態
2.J列~P列にC列~I列の値を表示するということでいいのかどうか。
3.値を取得した後の処理もマクロで実行させるかどうか。
4.もしマクロで実行させるのであれば、どの様なことをさせたいのか具体的に詳しく教えて下さい。

お手数をおかけいたしますが、よろしくお願いいたします。


  

この回答への補足

GOOがおやすみで補足ができませんでした。すみません。

> 1.オートフィルターのバーはどの行に配置しているのか。
7行目の項目行です。

> 2.1行目~6行目までの状態
ページのタイトルや説明等が記入してあります。

> 2.J列~P列にC列~I列の値を表示するということでいいのかどうか。
オートフィルターで抽出されたデータの最上段の行の各セルのデータを、セル番地を特定できる個所に転記できれば結構です。(そのセル番地を式に組み込みますので)

> 3.値を取得した後の処理もマクロで実行させるかどうか。
しません。

よろしくお願いします。

補足日時:2003/01/04 23:43
    • good
    • 0

初めまして。

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

お手数をおかけいたしますが、よろしくお願いいたします。

この回答への補足

さっそくご親切にありがとうございます。

データはシートの C列からI列までで、7行目は項目行、最終行は3172行です。

オートフィルターを実行した結果、抽出されたデータの最上列1行分の項目ごとの値を取得したいのです。
よろしくお願いします。

補足日時:2002/12/26 15:12
    • good
    • 0

式はどこに入れていますか?オートフィルタと同じ行や列に入っていませんか。

式を入れるタイミングは。
>セル番地が変わるので
フィルターをかけても行番号は変わらないと思います。これは、R1C1もA1方式どちらでも同じですが。

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

この回答への補足

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

補足日時:2002/12/26 11:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!