[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『奇数行だけオートフィルタ』(taiyo)
下記の表で予定だけを日別に集計して、結果の表のようにしたいんですが、 以前質問させていただいた時は予定の行だけで、実行の行はありませんでした。
以前の質問→[[20090812114659]]『フィルタオプションの繰り返しを簡略化』
以前の質問で頂いた回答を参考に今は下記のマクロを使用していますが、 このままだと、実行も拾ってしまうのか結果がおかしくなってしまいます。
下記のマクロに何か追加して、結果の表のようには出来ないでしょうか?
よろしくお願いいたします。
A・・・・ L M N O P Q ・・・AQ 3 会社名 1日 2日 3日 4日 5日・・・31日 4 5 A社 予定 ○ 6 実行 ○ ○ 7 B社 予定 ○ 8 実行 ○ 9 C社 予定 ○ 10 実行 ○ 11 D社 予定 ○ 12 実行 13 E社 予定 14 実行 ○
《結果の表》
AT AU AV AW AX AY 1 2 3 4 51日 2日 3日 4日 5日 6日 ・・・ 6A社 C社 7B社 D社 8 9
Dim x, y
Dim i As Long, j As Long, cnt As Long
x = Range("A1:AQ2000").Value '基になるデータを配列xに読み込む
ReDim y(1 To 2000, 1 To 43) 'xと同じ程度の配列yを準備する
For i = 13 To 43 '○を調べる列を順次見ていく。M列からならFor i = 13 To 43 のような感じ
cnt = 0 '列単位でカウントを0に戻す
For j = 5 To 2000 'データの行順に○を調べる。5行目からならFor j = 5 To 2000のような感じ
If x(j, i) <> "" Then
cnt = cnt + 1
y(cnt, i - 12) = x(j, 2) 'y(1,1)から該当データを入れたいので、y(cnt, i - 11) = のようにiの開始値が12ならi-11として1になるようにする
End If
Next j
Next i
Range("AT4:BX4").Value = Range("M3:AQ3").Value '列見出しをコピーしているだけなので適切な範囲に修正。= Range("H3:AL3").Value のような感じ
Range("AT5").Resize(UBound(y), UBound(y, 2)).Value = y
[エクセルのバージョン]Excel2000 [OSのバージョン]WindowsXP
現状の作りを出来るだけ維持しながら考えるならば、 予定/実行が入っている列はL列、すなわち x(j, 12) になるんでしょうから、 この値が"予定"ならば処理するような形を取ってみるのが早いかも知れません。 (ご近所PG)
ありがとうございます。
マクロは初心者なので、出来ればどこにどのように入力したら良いのか 具体的に教えていただけますか?
宜しくお願い致します。
(taiyo)
ここです。
For j = 5 To 2000 'データの行順に○を調べる。5行目からならFor j = 5 To 2000のような感じ
If x(j, 12) = "予定" Then 'L列が"予定"の行ならば処理する
If x(j, i) <> "" Then
cnt = cnt + 1
y(cnt, i - 12) = x(j, 2) 'y(1,1)から該当データを入れたいので、y(cnt, i - 11) = のようにiの開始値が12ならi-11として1になるようにする
End If
End If
Next j
脳内でコンパイルしただけなので、動かなかったらごめんなさい。
現状のものと今回の改修を追加したものとで、何がどう違って動くのか。
それをステップ実行で一つ一つ確認しつつ試すと、マクロの勘所が分かるかと思います。
もし「ステップ実行」についてよくわからない場合、このサイトの全文検索などで検索してみてください。
過去に説明された事例があります。
(ご近所PG)
ご近所PGさん
出来ました。 ありがとうございました。 ホントたすかりました。
(taiyo)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.