[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件のデータを抽出し、並び替える方法』(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
貼り付けシートのデータ
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
データ反映シートのコードモジュールへ (データ反映シートのシートタブを右クリック - コードの表示)
データ反映シートを選択するたびにデータが更新されます。
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.