- ベストアンサー
オートフィルタの使い方と注意点
- オートフィルタを使用する際に、複数の列に同じ条件で一括でフィルタをかける方法を知りたい。
- オートフィルタを使用して表を作成している際、1日ずつフィルタをかけるのが大変になってくる。
- オートフィルタを使う際の注意点として、作業中にわかりづらくなることがあるので注意が必要。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>「Sub 色付け()」から「End Sub 」までを・・・ (1)開発タブ>Visual Basicを選択。VBE画面が表示されます。(Alt+F11でも可) (2)表示されたVBE画面のメニューで、挿入>標準モジュールとします。 (3)表示された標準モジュールに「Sub 色付け()」から「End Sub 」までをコピーして貼り付けます。 (4)Excel Sheetに戻ります。(Alt+F11でも可) (5)色を付けたいセル領域を選択します。 広いセル領域の選択は、領域の左上セルを選択した状態で、 名前ボックスに右下セルを入力して、「B2:h34」のようにして、 Shift+Enterとすれば簡単に選択できます。慣れれば簡単です。 (6)開発タブ>マクロ>色付け を実行します。 マクロは、選択したセル領域の色付けをクリアした後、色付けを行っています。 従って、1回色付けをした後、データ修正があれば、修正した後、再度マクロ色付けを実行してください。 マクロは色付けを行った後、選択領域が選択されたままです。どこかセルをクリックすればいいんですが、最後の2行目の「End With」の前に、「 .Cells(1, 1).Select」を挿入すれば、選択した領域の左上セルが選択された状態で終わります。試してみてください。 Next .Cells(1, 1).Select End With End Sub
その他の回答 (3)
- msMike
- ベストアンサー率20% (364/1804)
》 …すればその方に個人的に質問できるものだと勘違いしておりました。 そうなんですよ。私も同じ苦い経験をしたことがあります。
お礼
そうですよね(笑) あの表記だと勘違いしてしまうのも無理はないと思いました。。
- nishi6
- ベストアンサー率67% (869/1280)
実を言うと、Excelでフィルター機能を使ったことはほとんどありません。 理由は、質問に書かれているように、面倒くさいのと作業や処理が個人の知識や技量に依存して、大事な確認が難しくなることです。 経験からですが、Excelで1つの同じ作業が時間単位の場合、何らかの別方法がありました。Excelの機能を使ったり、無ければマクロということになります。 社内では、5分以上かかる作業は別方法(正確、確認が簡単、誰でもできる作業)があると言っていました。 この質問の場合、フィルターをかけることに注力した方法を考えてもあまり効果がないように思えます。 添付図を見る限り、色付けは簡単な理屈に見えます。しかし、内容について少し疑問があります。 (1)この添付図は、1日から7日(8日)までに対応する結果? (2)10008行と10011行の3日にオレンジ色が付いているのはなぜ? (3)例えば、10002行で、10日に「2」とかになってもどこにも色はつかない? (4)1日から7日までの処理の次は、8日から14日、15日から21日となっていく? (5)前月末のデータは今月初めに影響しない? (6)3回以上の返品は無い? 私なら、2か月分のデータを登録し、2か月分で色をつけるか、選択して1週間ごとに色を付けると思います。 「1週間」ごとの作業の意味が、月初めの1日からだと、月末の数日はどうする?というような疑問も起きてきます。 実際の処理内容が分からないので、勝手なことを書いているとおもいます。ご容赦を。 フィルターのかけ方は難しいので、マクロを考えました。 色をつけたいセル(日付の方)を選択して、マクロ「色付け」を実行します。 10008行と10011行の3日にはオレンジ色が付きませんでした。広いセル領域の選択は、名前ボックスを使えば簡単です。 Sub 色付け() Dim rng As Range '// セル Dim rw As Long '// 行カウンタ Dim topRw As Long '// A列の行 Dim col As Long '// 列カウンタ Dim col1 As Long '// 1回目の列 Dim col2 As Long '// 2回目の列 Dim col3 As Long '// 3回目の列 With Selection .Interior.ColorIndex = 0 '// 塗りつぶしを消す topRw = .Cells(1, 1).Row '// A列の行 '// 選択した範囲を行単位で調べる For rw = 1 To .Rows.Count '// 返品を調べる If Range("A" & (topRw + rw - 1)) = "返品" Then '// 各日の入力を調べる For col = 1 To .Columns.Count If .Cells(rw, col) <> "" Then If col1 = 0 Then '// 1回目 col1 = col ElseIf col1 <> 0 And col2 = 0 Then '// 2回目 col2 = col Else col3 = 99 ''// 3回目以上の入力を避ける End If End If Next '// 色付け If col1 <> 0 And col2 <> 0 Then .Cells(rw, col1).Interior.ColorIndex = 40 '// オレンジ .Cells(rw, col2).Interior.ColorIndex = 37 '// 青 End If col1 = 0: col2 = 0 End If Next End With End Sub
補足
遅い時間にも関わらず、またまたご回答ありがとうございます。 まず、疑問点についてですが (1)この添付図は、1日から7日(8日)までに対応する結果? 厳密にいえば毎週金曜日~木曜日(添付していただいた表に基づくと月~土)ですが 1日を非表示にするのを忘れておりました。 (2)10008行と10011行の3日にオレンジ色が付いているのはなぜ? 申し訳ありません。 単純に色づけミスなので、本来なら色づけなしです。 (3)例えば、10002行で、10日に「2」とかになってもどこにも色はつかない? はい。 10日は次の週なので、対象外になるので色はつきません。 (4)1日から7日までの処理の次は、8日から14日、15日から21日となっていく? はい。 ただし、月の最終日が週の途中でもそこまでで集計します。 (今月ですと、9/30は月曜日ですが、その週は10/3までではなく30日までです。) (5)前月末のデータは今月初めに影響しない? はい。影響しません。 月が変わった時点でリセット?されます。 (6)3回以上の返品は無い? はい。ありません。 正直上司から依頼されたものを処理してるだけなので、色々疑問に思う箇所もあります。 (これらの処理で完成した表に基づいて何らかの分析をするそうですが。。) マクロを考えて頂きありがとうございました。 私の求めている結果は添付して頂いた画像であってると思います。 ただ、マクロ自体あまり詳しくなくて 「マクロの記録」から登録してする方法しかやり方がわかりません。。 たくさん書いていただいた「Sub 色付け()」から「End Sub 」までを 「開発」から「visual basic」を開いてどこかにコピペすれば実行できるのでしょうか?
- msMike
- ベストアンサー率20% (364/1804)
》 先程は的確な… 「先程は」ではドレのことか一般人には分かりません。URLで示すべきです。 例えば貴方のこの質問の場合はブラウザの上端に記されている https://okwave.jp/qa/q9657501.html?f=mail_favorite_new のことです。 「先程」に該当するソレをコピーして貼り付ければ御の字です。
お礼
大変失礼いたしました。 以前別の質問でいろいろアドバイスをくださった方に個別に質問がしたくて 「このユーザーに質問する」から質問すればその方に個人的に質問できるものだと勘違いしておりました。 その方法で質問してもすべてに公開されるんですね。 私の知識不足でした。。。 この質問は一旦削除して、改めて質問しなおすことにします。 ご指摘いただきありがとうございました。
お礼
お礼が遅くなり申し訳ありません。。 結局今回教えて頂いたやり方ではうまくできませんでしたが 何度となく親切丁寧にお答えくださったので こちらをベストアンサーにさせていただきます。 この度はありがとうございました(^^♪
補足
先程実際に登録して実行してみましたが 色が消えただけでした。。 金曜日から木曜日まで列をまるごと選択してから実行したり 列まるごとではなく、表の部分だけ選択してみたりしましたが やはり結果は同じでした。。 選択の仕方がおかしったのでしょうか?