「みんな教えて! 選手権!!」開催のお知らせ

エクセル及びマクロ初心者です。
お手柔らかにお願いいたします。

<現状>
※ソフトから顧客データをCSVに書き出し不必要なデータを削除、リストを作成している状態です。
※毎月行っている業務ですので、特定の日付(前月の末日)が変わります。
(29日までだったり30日だったり)
<実行したい操作>
I列に記載されているスラッシュで区切られた年月日(前月の末日)を特定し、その日以降のデータを行ごと削除したい。
<例-10月分のリスト作成->
前月末日が(2016/9/30)であることを特定、2016/10/1~全て削除

グチャグチャのCSVデータをマクロで一挙リストに仕上げたいと思っています。
マクロ記憶やサイト検索にてどうにか他の問題は解決できたのですが、ここで躓いてしまいました。

コードの例や検索ワードなど教えて頂けたら幸いです。
宜しくお願いいたします。

「エクセル マクロ "特定の日付"以降を削」の質問画像

質問者からの補足コメント

  • 返信ありがとうございます。

    >今月以降の削除ではダメですか?
    ・月末に行う業務なので、先月末日がいいです!なので、後者のを試させて頂きました!ありがとうございます。しかし、構文エラーが発生してしまうのですがなぜでしょうか...勉強不足で申し訳けございません。
    >セルのみ削除ですか?それとも行削除でしょうか?
    ・行ごと削除が嬉しいです(*_*)

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/11/12 18:59

A 回答 (4件)

こんな形で出来そうです。


---------------------------------------------------------------
Sub Sample()
Dim 行 As Long
Dim 月初 As Date
Application.ScreenUpdating = False
月初 = CDate(Format(Date, "yyyy/mm") & "/01")
For 行 = Cells(Rows.Count, 9).End(xlUp).Row To 1 Step -1
With Cells(行, 9)
If IsDate(.Value) Then
If .Value >= 月初 Then
Rows(行).Delete Shift:=xlUp
End If
End If
End With
Next
Application.ScreenUpdating = True
End Sub
---------------------------------------------------------------
※ このように比較の仕方で「今月の初日」を使っても問題ありません。
※ 何万行とかあると数十秒かかることがあります。
※ I列でソートしてもよければ瞬時に終了させることができます。
    • good
    • 0
この回答へのお礼

サンプルコード、大変重宝致しました。
ありがとうございました!!

お礼日時:2016/11/15 12:14

NO3です。

失礼しました
月末は
D1に=Dtae (A1,B1+1,0)

フィルターオプションの抽出条件で
=">=" & Date(A1,B1,1)

="<" & Date(A1,B1+1,1)
と翌月の月初未満でも同じになります。
フィルターオプションについては
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filte …
等で紹介されています。
    • good
    • 1
この回答へのお礼

フィルターオプションを初めて知りました(*_*)
大変、勉強になりました。
今回は、早急に対応して頂いた方をベストアンサーにさせて頂きます。
本当に、ありがとうございました。

お礼日時:2016/11/15 12:10

二つほど提案です。


1、毎月月初と月末の日付取得
  別シートでも構いませんので
  A1 2016
  B1 11   と入れて
  C1に=Date(A1,B1,1) で月初
  D1に=Dtae (A1,B1,0) で月末が取得できます。

2、期限内のデータの抽出
  エクセルにはフィルターオプションと云う機能があります。
  (オートフィルターではありません)
  別シートに、1で求めた記述の範囲内の行部分だけ一瞬で抽出してくれます。
  毎回設定するのは嫌であれば、マクロの記録でコードが出来ます。
    • good
    • 0

・今月以降の削除ではダメですか?


(今月の初日は「CDate(Format(Date, "yyyy/mm") & "/01")」でもとめられます。先月の末日は「CDate(Format(Date, "yyyy/mm") & "/01") - 1」でもとめられます。)
・セルのみ削除ですか?それとも行削除でしょうか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A