質問: エクセルのオートフィルタを使わないフィルタ方法を伝授してください。 エクセルで日報を作成しています。 1sheetに365日分のセルを作成。 a1のセルに3月と入力すると以下の365行が「3月1日~3月31日」の 31行分の1か月分が表示になるようにするにはどんなテクニックが必要でしょうか?エクセルを終了して、その条件はキープしていて欲しい。 《元データ》 a列 b列 c列 d列 1 月 2 3 月日 曜日 本日の容量 残容量 合計 4 1月1日 月 150 20 170 5 1月2日 火 150 20 170 6 1月3日 水 200 20 220 7 : 368 12月31日........ 《入力結果》 a列 b列 c列 d列 1 3 月 ←このつきの前に「表示月」を入力 例えば「3」 2 3 月日 曜日 本日の容量 残容量 合計 4 3月1日 木 5 3月2日 金 6 3月3日 土 : 34 3月31日土 が表示される。
回答: no.2です。 > タイトル行に当たる「月日,曜日,本日の容量,残容量,合計」が > 消えてしまいます。 あれおかしいですね。タイトル行は質問文にあるとおり3行目から始まってますか? > やはり「オートフィルター」のマークがb1にも入ってしまうものなのですよね? これは仕方がないです。a列だけなら▼マークを非表示にできるのですが、他の列はどうしてもマークが出てしまいます。 それが出るのが嫌なのでオートフィルタを使いたくないのであれば、アプローチを変えて、オートフィルタを使わずに、指定した月以外は非表示にするマクロにしてみました。no.2の回答の手順でマクロの画面を開き、元のマクロは消して以下をコピーして貼り付けてみてください。 no.2の回答と同様に、a1に月の数字を入力すると、その月だけの表示になります。a1を空白にするか、0などの数値を入力すると1年分の表示に戻ります。 private sub worksheet_change(byval target as range) if target.address <> "$a$1" then exit sub application.screenupdating = false dim i as integer const maxrow as integer = 370 for i = 4 to maxrow if target.value < 1 or target.value > 12 then rows(i).hidden = false elseif month(cells(i, 1).value) = cells(1, 1).value then rows(i).hidden = false else rows(i).hidden = true end if next application.screenupdating = true end sub