[[20210903111013]] 『条件のデータを抽出し、並び替える方法』(D) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件のデータを抽出し、並び替える方法』(D)

再投稿です。失礼します。

エクセルの書籍を見ながら、試行錯誤しておりますが、
全く先に進めないので、助けていただきたいです。

「貼り付けシートのデータ」タブへ、データを貼り付けるだけで、
「データ反映シート」の状態にしたいです。

貼り付けシートのデータ

	A	B		C		D			
1	名前	参加日		バージョン	番号
2	Aさん	2021/1/2	2        	2
3	Bさん	2021/4/3	4              
4	Cさん	2022/2/13    2               4
5	Aさん	2021/5/3     2     	        2
6	Dさん	2021/4/5    2       	
7	Eさん	2021/1/24       3        	6
8	Cさん	2023/3/25    2          

ソートしたい:Cのバージョンが「2」でかつ、Dの番号が「空白セル以外」のもの。
→上記の条件を満たす、Aの名前とBの参加日を抽出して別シートに反映させたいです。
また、きれば、 Aの名前を順番に並べ替え、
名前の個数が重複していれば、その個数もカウントしたいです。

データ反映シート

	A	B		C
1	名前	参加日		名前カウント
2	Aさん	2021/1/2     2
3	Aさん	2021/5/3         
4	Cさん	2022/2/13        1
5	Eさん	2021/1/24        1

可能な範囲で、教えていただけると大変助かります。
よろしくお願います。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 こんにちわ〜 ^^
そのぉ
Eさんはバージョン番号が3ですが
後でアップされた方は、ここより、表示崩れがひどく、私だけか
とは思うのですが。よく理解出来ません。
何が正解なのか、再精査いただいて、こちらの方で再度、ご質問を
アップされると、多数、アドバイスが有るかもしれません。。。←多分^^;
m(__)m
(隠居Z) 2021/09/03(金) 12:12

コメントありがとうございます。
Eさんは該当ではありませんでした、申し訳ありません。
もう一度、整理したものをアップします。

貼り付けシートのデータ

	A	B		C		D			
1	名前	参加日		バージョン	番号
2	Aさん	2021/1/2	2        	2
3	Bさん	2021/4/3	4              
4	Cさん	2022/2/13    2              4
5	Aさん	2021/5/3     2     	    2
6	Dさん	2021/4/5    2       	
7	Eさん	2021/1/24       3        	6
8	Cさん	2023/3/25    2          

ソートしたい:Cのバージョンが「2」でかつ、Dの番号が「空白セル以外」のもの。
→上記の条件を満たす、Aの名前とBの参加日を抽出して別シートに反映させたいです。
また、きれば、 Aの名前を順番に並べ替え、
名前の個数が重複していれば、その個数もカウントしたいです。

データ反映シート

	A	B		C
1	名前	参加日		名前カウント
2	Aさん	2021/1/2     2
3	Aさん	2021/5/3         
4	Cさん	2022/2/13        1

可能な範囲で、教えていただけると大変助かります。
よろしくお願います。
< 使用 Excel:Excel2016、使用 OS:Windows10 >

(D) 2021/09/03(金) 12:24


私の環境でも文字化けしていてよく分かりませんでしたが、再整理していだいたのでなんとなく理解来ました。

まず、「ソートしたい」ですが、仰ってることはソート(並び替え)ではなく抽出だとおもいます。
一方で名前のほうは、ソート(並び替え)というわけですね。

そこで疑問なのですが、名前のソートについて順番にこだわりはありますか?
実際にはAさん、Bさん...では無いと思いますから、並び替えのルールによっては思った結果にならないとおもいます。

並び替え順番には拘らないのであれば

 (1) A〜D列にオートフィルタを設定する
 (2) オートフィルタでバージョンが「2」、かつ、番号が「空白セル以外」を【抽出】する
 (3)抽出結果のうちA〜B列を項目行ごとコピーする
 (4)「データ反映」シートのA1セルに貼付する
 (5)A列基準でA〜B列の並び替えをする
 (6)C2セルに以下の数式を入力して必要なだけ(フィル)コピー
    =IF(COUNTIF(A$2:A2,A2)=1,COUNTIF(A:A,A2),"")

のようにしてみてはどうですか?

(もこな2) 2021/09/03(金) 12:46


 こんばんは ^^
作ってみました。名前カウントは結構、複雑そうでしたので、もこな2さんの
数式を、まんま、拝借致しました。← 自分では考え付かない。。。^^;
シート名はSheet1、Sheet2になっています。そのまま使えるものでは有りませんので
何かの参考程度にお止めくださいませ。でわ。m(_ _)m
Option Explicit
Sub OneInstanceMain()
    Dim i             As Long
    Dim n             As Long
    Dim v()           As Variant
    Dim w()           As Variant
    Dim r             As Range
    Dim t             As Double
    t = Timer
    With Worksheets("Sheet1")
        v = .Cells(1).CurrentRegion.Value
    End With
    For i = 2 To UBound(v, 1)
        If v(i, 3) = 2 And v(i, 4) <> "" Then
            ReDim Preserve w(n)
            w(n) = Array(v(i, 1), v(i, 2))
            n = n + 1
        End If
    Next
    With Worksheets("Sheet2")
        .UsedRange.Clear
        .Cells(1, 1).Resize(, 3) = Array("名  前", "参加日", "名前カウント")
        .Cells(2, 1).Resize(UBound(w) + 1, 2) = Application.Index(w, 0, 0)
        .UsedRange.Columns.AutoFit
        .Cells(1).CurrentRegion.Sort key1:=.Columns(1), order1:=xlAscending, Header:=xlYes
        Set r = Intersect(.Columns(3), .UsedRange)
        Set r = r.Offset(1).Resize(r.Rows.Count - 1)
        r.Formula = "=IF(COUNTIF(A$2:A2,A2)=1,COUNTIF(A:A,A2),"""")"
        r.Value = r.Value
    End With
    Erase v, w
    MsgBox "終了 " & Format(Int(Timer - t) / 24 / 60 / 60, "hh : mm : ss") & _
                      Format((Timer - t) - Int(Timer - t), ".000") & " 秒"
End Sub
(隠居Z) 2021/09/03(金) 19:37

19:40
Eraseステートメント
修正致しました。m(__)m
(隠居Z) 2021/09/03(金) 19:43

 データ反映シートのコードモジュールへ
 (データ反映シートのシートタブを右クリック - コードの表示)

 データ反映シートを選択するたびにデータが更新されます。

 Private Sub Worksheet_Activate()
     Dim r As Range
     Cells(1).CurrentRegion.ClearContents
     With Sheets("貼り付けシートのデータ").Cells(1).CurrentRegion
         Set r = .Offset(, .Columns.Count + 1).Range("a1:a2")
         r(2).Formula = "=and(c2=2,d2<>"""")"
         .AdvancedFilter 2, r, Cells(1)
         r.Clear
     End With
     With Cells(1).CurrentRegion
         .Columns(4).Clear
         .Cells(1, 3) = "名前のカウント"
         .Columns(3).Offset(1).Resize(.Rows.Count - 1).Formula = _
         "=if(countif(a$2:a2,a2)=1,countif(a$2:a$" & .Rows.Count & ",a2),"""")"
         .Sort .Cells(1), , , , , , , 1
     End With
 End Sub
( seiya) 2021/09/03(金) 21:26

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.