|
▼Kimiko さん:
おはようございます。
>シート2に「基準データ」があります。
>この基準データに合致するか否かをシート1の『チェックデータ』上で
>検出したいのですが、どのようにすればよいのでしょうか。
>結果として《非合致》と《新規》の表示を出したいのです。
>
この基準データが「シート2」というシート名の
セルA5〜C17(1行目は項目名)に記述されているとします。
>基準データ(シート2)
> 1 2 3
>5 項目 項目2 項目3
>6 AAA 101 a
>7 AAA 101 aa
>8 AAA 101 aaa
>9 BBB 102 b
>10 BBB 102 bb
>11 BBB 102 bbb
>12 CCC 103 c
>13 CCC 103 cc
>14 CCC 103 ccc
>15 DDD 104 d
>16 DDD 104 dd
>17 DDD 104 ddd
>
このチェックデータが「シート1」というシート名の
セルA1〜C12(1行目は項目名)に記述されているとします。
>チェックデータ(シート1)
> 1 2 3 4
>項目1 項目2 項目3 非合致(結果)
>DDD 104 dd
>BBB 102 k ×
>CCC 103 p ×
>AAA 102 aaa ×
>BBB 102 bb
>CCC 103 cc
>AAA 101 s ×
>DDD 104 dd
>AAA 103 aaa ×
>DDD 104 dd
>HHH 108 hh 新規
標準モジュールに
'==================================================================
Sub main()
Dim chkdata As Boolean
Dim chkrng As Range
Dim cadd(1 To 3) As String
Dim idx As Long
Dim rng As Range
With Worksheets("シート2")
Set chkrng = .Range("a6", .Cells(.Rows.Count, "a").End(xlUp))
If chkrng.Row > 5 Then
For idx = 1 To 3
cadd(idx) = chkrng.Offset(0, idx - 1).Address(, , , True)
Next
chkdata = True
Else
chkdata = False
End If
End With
With Worksheets("シート1")
Set rng = .Range("a2", .Cells(.Rows.Count, "a").End(xlUp))
End With
If rng.Row > 1 Then
With rng.Offset(0, 3)
If chkdata = False Then
.Value = "新規"
Else
.Formula = "=IF(COUNTIF(" & cadd(1) & ",A2)>0,IF(SUMPRODUCT((" & _
cadd(1) & "=A2)*(" & cadd(2) & _
"=B2)*(" & cadd(3) & "=C2))>0,"""",""×""),""新規"")"
.Value = .Value
End If
End With
End If
End Sub
として、mainを実行してみてください
|
|