Excel VBA質問箱 IV

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

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


10880 / 13646 ツリー ←次へ | 前へ→

【19404】最も新しい年のデータを選ぶ mai 04/10/31(日) 17:15 質問[未読]
【19405】Re:最も新しい年のデータを選ぶ ちゃっぴ 04/10/31(日) 17:30 回答[未読]
【19417】Re:最も新しい年のデータを選ぶ mai 04/11/1(月) 10:42 質問[未読]
【19418】Re:最も新しい年のデータを選ぶ かみちゃん 04/11/1(月) 12:24 発言[未読]
【19419】Re:最も新しい年のデータを選ぶ Jaka 04/11/1(月) 12:27 回答[未読]
【19422】Re:最も新しい年のデータを選ぶ mai 04/11/1(月) 13:38 お礼[未読]

【19404】最も新しい年のデータを選ぶ
質問  mai  - 04/10/31(日) 17:15 -

引用なし
パスワード
   初歩的な質問でごめんなさい。

今、店ごとに最近購入した物品のデータのみを表示しようと思っています。
元データは
A   B    C
店名  購入年  購入物品
1号店  1987   コピー機
1号店   1987   映写機
1号店  1994   プリンタ
1号店  2000   スクリーン
1号店  2000   コピー機
2号店  1995   スキャナ
となっています。

例えば
1号店のデータでは最も最近である2000年以外の
データ行を削除したいのです。
オートフィルタをマクロ記録しようとしましたが
店毎に購入年がバラバラなために一括して作業できません。

どうしたらよいでしょうか?

【19405】Re:最も新しい年のデータを選ぶ
回答  ちゃっぴ  - 04/10/31(日) 17:30 -

引用なし
パスワード
   店名をKey1に、購入年をKey2に指定して、Sortしてやれば
簡単にできるでしょう。

あとの処理は、ちょっと考えてみてください。

【19417】Re:最も新しい年のデータを選ぶ
質問  mai  - 04/11/1(月) 10:42 -

引用なし
パスワード
   ▼ちゃっぴ さん:
説明不足でごめんなさい。
Sortはできているのですがそのあとの処理がむしろ
わかりませんでした。

例えば

店舗ごとに数字(店舗番号)を割り振る

同店舗内の
購入年の平均を取得

平均未満の購入年を含む行を削除

店舗番号をループ

なんかでいいのでしょうか?
でも実際に同店舗内の購入年の平均を取得
するコードはどのように記述すればよいのか
わかりません。


>店名をKey1に、購入年をKey2に指定して、Sortしてやれば
>簡単にできるでしょう。
>あとの処理は、ちょっと考えてみてください。

【19418】Re:最も新しい年のデータを選ぶ
発言  かみちゃん  - 04/11/1(月) 12:24 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>でも実際に同店舗内の購入年の平均を取得
>するコードはどのように記述すればよいのか

当初の質問は、各店舗ごとの購入年の最大値(1号店だと2000年)以外のデータを削除したいということではなかったのでしょうか?
平均となると、まったく話が違ってくると思います。
ご質問を再度整理していただけないでしょうか?

【19419】Re:最も新しい年のデータを選ぶ
回答  Jaka  - 04/11/1(月) 12:27 -

引用なし
パスワード
   Sub vivi()
  Dim VsR1 As Range, VsR2 As Range, VsR3 As Range, MxYer As Long
  Dim cc As Range, tb() As String
  AER = Range("A65536").End(xlUp).Row
  Range("A1:A" & AER).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
  Set VsR1 = Range("A2:A" & AER).SpecialCells(xlVisible)
  ActiveSheet.ShowAllData
  ReDim tb(1 To VsR1.Count)
  For Each cc In VsR1
    i = i + 1
    tb(i) = cc
  Next
  Set VsR1 = Nothing
  For i = 1 To UBound(tb)
    AER = Range("A65536").End(xlUp).Row
    Range("A1").AutoFilter Field:=1, Criteria1:=tb(i)
    Set VsR2 = Range("B2:B" & AER).SpecialCells(xlVisible)
    MxYer = Application.Max(VsR2)
    Range("A1").AutoFilter Field:=2, Criteria1:="<" & MxYer, Operator:=xlAnd
    Set VsR3 = Range("B2:B" & AER).SpecialCells(xlVisible)
    VsR3.EntireRow.Delete
    ActiveSheet.ShowAllData
    DoEvents
  Next
  Set VsR2 = Nothing: Set VsR3 = Nothing
  Erase tb
End Sub

【19422】Re:最も新しい年のデータを選ぶ
お礼  mai  - 04/11/1(月) 13:38 -

引用なし
パスワード
   Jakaさん、皆さんどうもありがとうございます。
思っていたとおりの作業ができました。
データが2万件ぐらいあったので手動でやらずに
助かりました。

Jakaさんのコードをみて私もここまで出来るように
なりたいなぁ、と思いました。

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