[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『重複レコードにチェックを入れる方法』(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
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.