[[20230305172523]] 『重複除き後の情報転記(マクロ)』(くるみ) ページの最後に飛ぶ

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

 

『重複除き後の情報転記(マクロ)』(くるみ)

教えてください。
まず、E列にA列コードの重複を除いたものを表示したい。但し、B列の対象が×のものはその対象から外す。
(例えば「あ, お」は×があるが〇もあるため残す。「え」は×のみなのでE列に表示しない。

次に、F列に対応するコードのC列区分を入れたいが、条件として下記を反映したい。
・同一コードで区分が異なる場合は行が上のものを転記すればOK。「い」のケース
・同一コードで区分が空欄が一つでもあれば、空欄を優先させたい。

元データ

 A列	B列	C列
 コード	対象	区分
 あ	〇	a
 い	〇	b
 あ	〇	
 う	〇	a
 え	×	b
 お	〇	
 あ	×	
 あ	〇	b
 い	〇	a
 お	×	a

結果表示

 E列	   F列
 重複除き  区分

下記のような結果としたい

 E列	   F列
 重複除き  区分
 あ	   
 い	   b
 う	   a
 お	

対象のものを重複削除してE列に表示する所までは出来たのですが、
F列に区分を表示する方法がわかりません。
マクロでやりたいですが、厳しかったら関数で考えてそれをマクロに埋め込むでもいいのですが、複雑でうまくいきません。
よろしくお願いします。

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


正しい結果が出るか検証してません。

Sub test()

    Dim dic As Object
    Dim i As Long
    Dim a As String, c As String
    Set dic = CreateObject("scripting.dictionary")
    For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        If Cells(i, "B") <> "×" Then
            a = Cells(i, "A")
            c = Cells(i, "C")
            If dic.exists(a) = False Then
                dic(a) = c
            ElseIf c = "" Then
                dic(a) = c
            End If
        End If
    Next
    With Range("E2").Resize(dic.Count)
        .Value = Application.Transpose(dic.keys)
        .Offset(, 1) = Application.Transpose(dic.items)
    End With
End Sub
(缶ピー) 2023/03/05(日) 18:05:33

缶ピー様
ありがとうございます。
dictionaryは使用したことがなかったので、今後勉強してみます。
ご提示いただいたコードで試したところ、正しい結果になりました。
(くるみ) 2023/03/05(日) 20:33:28

コメント返信:

[ 一覧(最新更新順) ]


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