[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートフィルタで集計後にVBAマクロでデータを取得したい』(kokit)
オートフィルタで集計した後に、その集計されたデータのみを VBAマクロで1件ずつデータ取得したいのですが 出来ますでしょうか?
[エクセルのバージョン] Excel2003
[OSのバージョン] WindowsXP
最終的にはどの様な事がなさりたいのですかね? 或いは、kokitさんが作ったコードでは どの様な問題点が有っての御質問なのですかね?
オートフィルタで絞り込みを行った後 有る一行が表示されている行か、されていない行かは 行の状態を見ないと分かりません。
場合によっては、オートフィルタを使用せずに 条件に一致する行かそうでない行か を 確認するのと同じ様なコードに成ると思います。
ダミーシートでも作成し オートフィルタで絞り込んだ後のデータを コピーし、貼り付けたデータを使用し 処理を行っていくのが速いかもしれません。
こちらの過去ログはご参考に成りそうでしょうか? [[20080330111413]]『3行おきに30行ずつの転記』(aki)
(HANA)
>その集計されたデータのみをVBAマクロで1件ずつデータ取得したいのですが出来ますでしょうか?
集計表(データ)だけの表にしてしまいたいということでしょうか。 そうであれば、表示されていない行(非表示行)を下から順に行削除するマクロを 作ればいいようですが。(元データは保管しておいてくださいね。) (夏雲)
HANAさんのおっしゃるように別シートに書き出せば良いのでは。 オートフィルタで抽出した後で実行します。 Sub Test鮎() 'Selection.AutoFilter Field:=1, Criteria1:="=*1*", Operator:=xlAnd 'オートフィルタで抽出 Sheets("Sheet1").Cells.Copy Destination:=Sheets("Sheet2").Cells(1, 1) Sheets("Sheet1").ShowAllData 'Sheets("Sheet1").Cells.Delete 'Shift:=xlUp '元のSheet1を消すとき 'Sheets("Sheet2").Cells.Copy Destination:=Sheets("Sheet1").Cells(1, 1) End Sub
(川野鮎太郎)
>表示されていない行を削除するようなマクロのサンプルはありますでしょうか
完璧ではありませんが,オートフィルタ後に下記マクロを実行して 末尾データの下の行(空白行)の番号を訊いてきますので数値を入れると,見える行だけになります。 (夏雲)(コピーデータで試してください。)
Sub test() Dim lr As Integer Dim i As Integer lr = InputBox("末尾データ行の下の行番号入力 例 32") For i = lr To 1 Step -1 If Rows(i).Hidden = True Then Rows(i).Delete
End If Next
End Sub
皆さんに知恵を拝借して,直しました。 A列にデータがある仮定です。(夏雲)
Sub test() Dim lr As Integer Dim i As Integer lr = Range("A1").CurrentRegion.Rows.Count
For i = lr To 1 Step -1 If Rows(i).Hidden = True Then Rows(i).Delete
End If Next
End Sub
皆さんに知恵を拝借して下記のようにも直して みました。こちらはデータのある場所には影響されないと思います。(夏雲)
Sub test3() Dim lr As Integer Dim i As Integer With ActiveSheet.AutoFilter.Range lr = .Row + .Rows.Count - 1 End With
For i = lr To 1 Step -1 If Rows(i).Hidden = True Then Rows(i).Delete
End If Next
End Sub
場合によっては、 オートフィルタで要らない行を表示させ 表示されている行を削除した方が 処理時間が短くて済むかもしれませんね。 To,夏雲さん test3のコードですが、iは「1」まで 行かない方が良いのでは?
(HANA)
>To,夏雲さん >test3のコードですが、iは「1」まで > 行かない方が良いのでは?
test3に限りませんが,正確には(正しくは)その通りですね。 一行目は必ず△マーク用に必ず表示されますので削除されないので 2まででOKですが,結果は同じですね。(夏雲)
To,夏雲さん
私がtest3に限って書いたのは >データのある場所には影響されないと思います。 と書いて居られるからです。
オートフィルタの見出し行より上に 非表示行が設定されている場合は 削除されてしまいます。
オートフィルタの範囲より下に 非表示行が設定されている場合は 削除されません。
オートフィルタがどの範囲にあるか分からないけど その範囲で非表示の行は削除する ので有れば iは、オートフィルタの見出し行まで と しておくのが良いと思います。
testの二つのコードに付いては そもそも「1行目から範囲の最終行までの間で」 と言うコードになっているので、1行目まで走査すれば良いと思います。 オートフィルタによる非表示行作成の場合は 書いて居られるように、2まででOKですが結果は同じですから。
(HANA)
>データのある場所には影響されないと思います。 この私の意味は, lr = Range("A1").CurrentRegion.Rows.Count を使ったコードではA列を使って,範囲を判断していますので必ず A列にデータがなければ使えません。 そういう意味で,最後のコードはA列などの特定列のデータ有無に 影響されず利用できるという意味です。 ( 見出しについては一般的な1行目を想定していました。)
(夏雲)
あっっ、 「もしかして、列方向の事かも?」 と思って戻ってきたのですが・・・・ 既に >A列などの特定列のデータ と言う書き込みが・・・。
ただ、せっかくですので 行方向も影響されない物をにしておいた方が 汎用性が高まるように思います。
Sub オートフィルタ範囲の非表示行削除() Dim i As Integer With ActiveSheet If .AutoFilterMode = False Then MsgBox "オートフィルタが設定されていません。" Exit Sub End If With .AutoFilter.Range For i = .Row + .Rows.Count - 1 To .Row Step -1 If Rows(i).Hidden = True Then Rows(i).Delete End If Next End With End With End Sub
ただ、当初のご質問からすると こちらの過去ログ (このスレから見ると、未来のログですが・・・) も参考になると思いますので、リンクしておきます。 [[20080812102739]]『オートフィルタで抽出された各行をマクロで選択』(うめ)
(HANA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.