Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2044 / 13645 ツリー ←次へ | 前へ→

【70316】日付を条件に行を削除する方法 KOKO 11/11/1(火) 14:21 質問[未読]
【70319】Re:日付を条件に行を削除する方法 kanabun 11/11/1(火) 16:42 発言[未読]
【70320】Re:日付を条件に行を削除する方法 kanabun 11/11/1(火) 16:50 発言[未読]
【70324】Re:日付を条件に行を削除する方法 KOKO 11/11/1(火) 18:28 お礼[未読]
【70322】Re:日付を条件に行を削除する方法 UO3 11/11/1(火) 17:32 発言[未読]
【70325】Re:日付を条件に行を削除する方法 KOKO 11/11/1(火) 18:30 お礼[未読]

【70316】日付を条件に行を削除する方法
質問  KOKO  - 11/11/1(火) 14:21 -

引用なし
パスワード
   お世話になっております。
BVA初心者です。

一連の作業を自動化している最中で
抽出された表の中から下記を実現したいと思っています。

A列に日付のデータが入っています。例)2011/10/31
表は抽出するたびに総データ数が変化します。
A列にデータがある中から、2012/3/31以降の
データを行ごと削除したいのですが、
どのような記述となるのでしょうか?

よろしくお願い致します。

【70319】Re:日付を条件に行を削除する方法
発言  kanabun  - 11/11/1(火) 16:42 -

引用なし
パスワード
   ▼KOKO さん:


>A列に日付のデータが入っています。例)2011/10/31
>表は抽出するたびに総データ数が変化します。
>A列にデータがある中から、2012/3/31以降の
>データを行ごと削除したいのですが、
>どのような記述となるのでしょうか?

一行目に列見出しが書いてあるとして、
AutoFilterを使ったらどうでしょ


Sub Try1()
  Dim r As Range
  Dim date1 As Date
  
  date1 = "2011/10/31"
  Set r = Range("A1", Cells(Rows.Count, 1).End(xlUp))
  r.Worksheet.AutoFilterMode = False 'フィルタ解除(念のため)
  r.AutoFilter 1, ">=" & CLng(date1) 'A列にフィルタをかける
  If r.SpecialCells(xlVisible).Count > 1 Then '1行以上該当セルがあれば
    Intersect(r, r.Offset(1)).EntireRow.Delete '行削除
  End If
  r.AutoFilter
  
End Sub


>    Intersect(r, r.Offset(1)).EntireRow.Delete '行削除

これは 範囲r と この範囲を1行下にシフトした範囲との共通する範囲のうちの
「可視セルだけを行削除」します。
つまり、単に
    r.EntireRow.Delete '行削除

とすると、可視セルだけ行削除してくれますが、そうすると1行目の見出し行
まで削除されてしまうので、そのために一行目を除外する対策です。

【70320】Re:日付を条件に行を削除する方法
発言  kanabun  - 11/11/1(火) 16:50 -

引用なし
パスワード
   >▼KOKO さん:
補足です

>  Set r = Range("A1", Cells(Rows.Count, 1).End(xlUp))

  Set r = Range("A1").CurrentRegion.resize(1)
でもいいです。

また、
>  date1 = "2011/10/31"
>  r.AutoFilter 1, ">=" & CLng(date1) 'A列にフィルタをかける

は、"2011/10/31"という日付けを シリアル値に直してフィルタ条件に
しています。こうすると、セルの書式に影響されずに抽出できるので。

【70322】Re:日付を条件に行を削除する方法
発言  UO3  - 11/11/1(火) 17:32 -

引用なし
パスワード
   ▼KOKO さん:

こんにちは

既にkanabunさんからお答えが出ていますが別の考え方で
2012/3/31より若い日付の行を残すという方法もあるかもしれません。

オートフィルターならこの残す条件で抽出したものを別のシートにコピペ。
あるいはフィルターオプションで、別シートに抽出。

(で、必要なら、元シートを置き換え、別シートを削除)
>

【70324】Re:日付を条件に行を削除する方法
お礼  KOKO  - 11/11/1(火) 18:28 -

引用なし
パスワード
   ▼kanabun さん:

ご回答ありがとうございました!
コメントがありとてもわかりやすかったです。
これをもとに勉強したいと思います。

ありがとうございました。

>>▼KOKO さん:
>補足です
>
>>  Set r = Range("A1", Cells(Rows.Count, 1).End(xlUp))
>は
>   Set r = Range("A1").CurrentRegion.resize(1)
>でもいいです。
>
>また、
>>  date1 = "2011/10/31"
>>  r.AutoFilter 1, ">=" & CLng(date1) 'A列にフィルタをかける
>
>は、"2011/10/31"という日付けを シリアル値に直してフィルタ条件に
>しています。こうすると、セルの書式に影響されずに抽出できるので。

【70325】Re:日付を条件に行を削除する方法
お礼  KOKO  - 11/11/1(火) 18:30 -

引用なし
パスワード
   ▼UO3 さん:

ありがとうございます!

いろいろな考え方があり、大変勉強になります。


>▼KOKO さん:
>
>こんにちは
>
>既にkanabunさんからお答えが出ていますが別の考え方で
>2012/3/31より若い日付の行を残すという方法もあるかもしれません。
>
>オートフィルターならこの残す条件で抽出したものを別のシートにコピペ。
>あるいはフィルターオプションで、別シートに抽出。
>
>(で、必要なら、元シートを置き換え、別シートを削除)
>>

2044 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free