- ベストアンサー
エクセルマクロで月を指定して別シートに表示する方法
- エクセルのマクロを使用して、指定した月を別のシートに表示することは可能ですか?
- 開始日の検索で、指定した月のデータだけを表示する方法を教えてください。
- 下記のコードを修正して、指定した月のデータを別のシートに表示するようにしてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
前回も回答しましたのでちょっとお付き合い。。。 INPUTBOXは他の方にお任せして。前回同様のレイアウトで '--------------------------------------------- ■日報シート■ 見出し行__: 1行目 データ行__: 2行目以降 '--------------------------------------------- ■集計表シート■ __A___B__C___D__E__F__ 1_部署_抽出月_ 2_●●__●__ 3 4 5_部署_NO_開始日_担当者_内容_工数_ 6 7 ●に抽出条件を入れる、 抽出月は、月だけいれる(5月は、5 ) '------------------------------------------------ Sub 検索() Dim R As Long Dim Row2 As Long '●Sheet2書込み行 Sheets("集計表").Range("A5").CurrentRegion.Clear Sheets("集計表").Range("A5:F5").Value = _ Array("依頼部署", "依頼書No.", "研磨開始日", "担当者", "作業内容", "工数") Row2 = 5 For R = 2 To Sheets("日報").Cells(Rows.Count, "A").End(xlUp).Row If Sheets("集計表").Range("A2") = Sheets("日報").Cells(R, "A") And _ Sheets("集計表").Range("B2") = Month(Sheets("日報").Cells(R, "C")) Then Row2 = Row2 + 1 Sheets("集計表").Cells(Row2, "A") = Sheets("日報").Cells(R, "A") Sheets("集計表").Cells(Row2, "B") = Sheets("日報").Cells(R, "B") Sheets("集計表").Cells(Row2, "C") = Sheets("日報").Cells(R, "C") Sheets("集計表").Cells(Row2, "D") = Sheets("日報").Cells(R, "E") Sheets("集計表").Cells(Row2, "E") = Sheets("日報").Cells(R, "I") Sheets("集計表").Cells(Row2, "F") = Sheets("日報").Cells(R, "J") End If Next R '●抽出結果を日付で並べ替え If Row2 = 5 Then MsgBox "該当データなし!" Else Sheets("集計表").Range("A5:F" & Row2).Sort _ Key1:=Range("C6"), Order1:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin End If Sheets("集計表").Select End Sub '------------------------------------------------------ ●見やすくするために Sheets("集計表").Cells(Row2, "A").Valueなどの Valueプロパティは省略していますが、 これは意味がわかっていたら省略してもOKです。 今回のコードでは省略してもOKですが、なるべく付けるようにしてください。 ●当然ですが、検査値が月だけですので 当然ですがデータが数年分(2008~2010年)あったとき、 2008年の5月のデータ抽出はできません。 以上です。
その他の回答 (4)
- myRange
- ベストアンサー率71% (339/472)
またまたまた、myRangeです。 日報のデータがたっぷりあるとチェックしにくいでしょうから 日報のC列でエラーになるセルに色をつけましょうか。 下記コードを走らせてください。結果は次のようになります。 赤色: エラーになるデータ 黄色: 空白(エラーにはならない) '--------------------------------- Sub test33() Dim R As Long Dim D On Error Resume Next For R = 2 To Sheets("日報").Cells(Rows.Count, "A").End(xlUp).Row Sheets("日報").Cells(R, "C").Interior.ColorIndex = xlNone If Month(Sheets("日報").Cells(R, "C")) = 99 Then End If If Err.Number > 0 Then Sheets("日報").Cells(R, "C").Interior.ColorIndex = 3 Err.Clear End If If Sheets("日報").Cells(R, "C") = "" Then Sheets("日報").Cells(R, "C").Interior.ColorIndex = 6 End If Next R End Sub '----------------------------------- 以上です。
お礼
何度もすみません。 ありがとうございます! おかげで助かっています。 このコードも使って何とかやってみます!
- myRange
- ベストアンサー率71% (339/472)
またまた登場、myRangeです。 >頼ってばかりで済みませんが、実行時エラーが >If Sheets("集計表").Range("A2") = Sheets("日報").Cells(R, "A") And _ Sheets("集計表").Range("B2") = Month(Sheets("日報").Cells(R, "C")) Then >のところででます >少し変えてみてもうまくいきません! エラーが出たら、どのようなエラーかのメッセージが表示されてるはずなのでそれも提示しないといけませんね。 恐らく、「型が一致しません」では? それから、コードを変更するするのはエラーの原因が分かってからですよ。 闇雲に変更してエラーを回避できるわけがありません。 ●まず、データを確認すること。 日報シートのC列にちゃんと日付が入っているかどうか確認してください。 それと、コードをよく見て、実際のセル番地とあっているか確かめてください。 以上です。
お礼
回答ありがとうございます! いままでチョコチョコいじってたしかめながら変更していたら何とかなったので 、きっといままで運がよっかったんですね。 データは平気でしたが、見出しが邪魔なだけでした。 有難うございます。
- layy
- ベストアンサー率23% (292/1222)
前回からの修正不十分で、場所と日付に対する判定をすべきところをNOを判定しようとしているってことではないですか。 メッセージボックスの機能使って左辺は何、右辺は何、と値を検証してみて下さい。
お礼
回答有難うございます! 原因がわかりました! 原因案を出していただきありがとうございます。 大元の見出しが検索の邪魔をしていたようです!
- layy
- ベストアンサー率23% (292/1222)
今は集計シートのセルに検索値をいれておいて、残りは引っ張ってくる感じですか?。 簡単なところでは、INPUTBOXの使い方を見て下さい。値入力を促す機能です。 この結果値を使うと良いです。
お礼
回答有難うございます。 INPUTBOXですね!やってみます!
お礼
今回も回答有難うございます! すごくうれしいです! 前回教えて頂いたものもすごくよかったです。 さっそくやってみます!
補足
頼ってばかりで済みませんが、実行時エラーが If Sheets("集計表").Range("A2") = Sheets("日報").Cells(R, "A") And _ Sheets("集計表").Range("B2") = Month(Sheets("日報").Cells(R, "C")) Then のところででます。 なぜでしょうか? 少し変えてみてもうまくいきません!教えてください!