[[20141026081409]] 『重複レコードにチェックを入れる方法』(qq11qqq) ページの最後に飛ぶ

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

 

『重複レコードにチェックを入れる方法』(qq11qqq)

数多くのデーターの中から、以下のように同系統のデータが有る場合に、ABC列に○×をつけたいのてすが、どのようにしたらいいのでしょうか。

1.「会社名」「種類」「費用」が同じで、「地点1」「地点2」が入れ替わっているレコードの重複と考え、重複する後のレコードのA列に×を入れる。

A    B    C     会社名 種類  地点1 地点2  費用

			○○社	001	福岡	東京	\50,000
			○○社	001	東京	福岡	\50,000
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

A    B    C     会社名 種類  地点1 地点2  費用

			○○社	001	福岡	東京	\50,000
×			○○社	001	東京	福岡	\50,000

2.「会社名」「種類」「地点1」「地点2」「費用」が同じの重複レコードを、後のレコードのB列に×を入れる。

A    B    C     会社名 種類  地点1 地点2  費用

			○○社	001	東京	福岡	\50,000
			○○社	001	東京	福岡	\50,000
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

A    B    C     会社名 種類  地点1 地点2  費用

			○○社	001	東京	福岡	\50,000
	×		○○社	001	東京	福岡	\50,000

3.「会社名」「種類」「地点1」「地点2」が同じで、「費用」が異なるレコードには、両方のレコードのC列に○を入れる。

A    B    C     会社名 種類  地点1 地点2  費用

			○○社	001	東京	福岡	\60,000
			○○社	001	東京	福岡	\70,000
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

A    B    C     会社名 種類  地点1 地点2  費用

		○	○○社	001	東京	福岡	\60,000
		○	○○社	001	東京	福岡	\70,000

4.「会社名」「種類」が同じで、「地点1」「地点2」が入れ替わっていて、「費用」が異なるレコードには、「地点1」「地点2」の入れ替わりを同一にし、両方のレコードのC列に○を入れる。

A    B    C     会社名 種類  地点1 地点2  費用

			○○社	001	福岡	東京	\60,000
			○○社	001	東京	福岡	\70,000
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

A    B    C     会社名 種類  地点1 地点2  費用

		○	○○社	001	東京	福岡	\60,000
		○	○○社	001	東京	福岡	\70,000

どなたか教えていただけないでしょうか。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 条件1と条件4ですが、
 条件4で並べ替えをして良いなら、条件1でも構わないですか?

 つまり並べ替えを先に実施すれば、条件2と条件3の判断だけでいいと思うのですが。

 先に並べ替えしてもよいでしょうか?
(稲葉) 2014/10/27(月) 09:35

 たたき台
 新しいシートに出力します。
    Option Explicit

    Sub ts()
        Dim tbl
        Dim i
        Dim s1 As String, s2 As String
        Dim con As String
        tbl = Range("A1", Cells(Rows.Count, "H").End(xlUp)).Value
        '//地点を並べ替え
        For i = 1 To UBound(tbl, 1)
            s1 = tbl(i, 6): s2 = tbl(i, 7)
            If StrCmp(s1, s2) Then
                tbl(i, 6) = s2
                tbl(i, 7) = s1
            End If
        Next i

        '//会社名〜地点2までを一つの文字列として比較し、同じなら費用を比較する
        Dim dic As Object
        Dim ii As Long
        Set dic = CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(tbl, 1)
            con = ""
            For ii = 4 To 7                        '//会社名から地点2まで
                con = con & Chr(2) & tbl(i, ii)
            Next ii
            If Not dic.exists(con) Then
                dic.Add con, CreateObject("Scripting.Dictionary")
                dic(con).Add tbl(i, 8), ""         '//費用追加
            Else
                If dic(con).exists(tbl(i, 8)) Then '//費用の比較
                    tbl(i, 2) = "×"
                Else
                    tbl(i, 3) = "○"
                End If
            End If
        Next i

        '新しいシートを追加して出力
        With Sheets.Add
            .Range("A1").Resize(UBound(tbl, 1), UBound(tbl, 2)).Value = tbl
            '//0から始まる数値文字列対応(必要なければ消す)
            With .Range("E1").Resize(UBound(tbl, 1) - 1).Offset(1)
                .Value = Evaluate("IF(ROW(1:" & UBound(tbl, 1) & "),""'"" & RIGHT(""00""&" & .Address & ",3))")
            End With
        End With
    End Sub
    Function StrCmp(ByVal str1 As String, ByVal str2) As Boolean
        '//str1の方が大きい場合、True
        '//違う文字で合計数値が同じになることってどのくらいありますかね・・・
        Dim i As Long
        Dim c1 As Long, c2 As Long
        For i = 1 To Len(str1)
            c1 = c1 + AscW(Mid(str1, i, 1))
        Next i
        For i = 1 To Len(str2)
            c2 = c2 + AscW(Mid(str2, i, 1))
        Next i
        If c1 > c2 Then
            StrCmp = True
        Else
            StrCmp = False
        End If
    End Function
(稲葉) 2014/10/27(月) 10:33

 あらもう解決済?
http://oshiete.goo.ne.jp/qa/8803407.html?from=qa
(稲葉) 2014/10/27(月) 11:24

遅くなって済みませんでした。
理解し、設定するのに時間がかかり、やっと今、なんとか解決しました。
お陰で、たすかりました。
本当に、ありがとうございました。
(qq11qqq) 2014/10/28(火) 15:40

コメント返信:

[ 一覧(最新更新順) ]


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