|
▼β さん:
サンプル4の方ですっきりしました!
確かにその書き方をすれば一致しないものがあった時点でメッセージを出してくれますね!
さらにご相談で申し訳ありません。
一致しないものを探すときに、”or”を使うものが出てきてしまいそうです。
例)
Sheet1
もも
れもん
りんご
みかん
かき
すいか
一致してるか探す対象
れもん 黄色
いちご 赤
りんご 赤
ぶどう 紫
このとき、”いちご”か”りんご”はどちらかがあれば一致しているとカウントする、という風にしたいです。どちらかあり、且つ、一致しているか探す対象のその他の”れもん”と”ぶどう”もあれば、今度は以前教えていただいた、Sheet2で一致条件探す処理をする。どちらも無ければその時点で、結果表示で”赤”と表示させたいです
で、今まで頂いたサンプル1~4を利用しようとするとなかなか難しそうで・・・
そこで、ないものを探す対象は多くないので、全てコードに書いた方が簡単なのかな、と・・・・
例)
コード ”れもん”があるか なければ”黄色”と表示 あれば次を検索
コード ”いちご”か”りんご”があるか なければ”赤”と表示 あれば次を検索
コード ”ぶどう”があるか なければ”紫”と表示 あれば一致検索をするコード
のような感じで・・・ごめんなさいわかりづらくて
>▼あや さん:
>
>アップした Sample2 では、アンマッチのものすべてを配列に格納し、
>それらすべてを表示しています。コードでは表示していませんが、
>アンマッチ件数も、配列の要素の数で求めることができます。
>
>Sample2 では Sheet4 を相手にしていましたので、それを Sheet2 にかえ
>最後のメッセージのみを、配列の最初の要素(つまり最初に引っかかったもの)から
>表示したものが以下の Sample3 です。
>
>で、本格的に(?)1つひっかかったら、それでおしまいにしたコードが
>Sample4 です。
>
>Sub Sample3()
> Dim r As Range
> Dim c As Range
> Dim f As Range
> Dim vntA As Variant
> Dim vntB As Variant
>
> With Sheets("Sheet1")
> Set r = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
> End With
>
> With Sheets("Sheet2")
> For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
> Set f = r.Find(What:=c.Value, LookAt:=xlWhole)
> If f Is Nothing Then
> If IsArray(vntA) Then
> ReDim Preserve vntA(1 To UBound(vntA) + 1)
> ReDim Preserve vntB(1 To UBound(vntB) + 1)
> Else
> ReDim vntA(1 To 1)
> ReDim vntB(1 To 1)
> End If
>
> vntA(UBound(vntA)) = c.Value
> vntB(UBound(vntB)) = c.Offset(, 1).Value
>
> End If
> Next
> End With
>
> If IsArray(vntA) Then
> MsgBox "最初のアンマッチは " & vntA(1) & " の " & vntB(1) & " でした"
> Else
> MsgBox "すべてマッチしていますよ"
> End If
>
>End Sub
>
>Sub Sample4()
> Dim r As Range
> Dim c As Range
> Dim f As Range
> Dim vntA As Variant
> Dim vntB As Variant
>
> With Sheets("Sheet1")
> Set r = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
> End With
>
> With Sheets("Sheet2")
> For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
> Set f = r.Find(What:=c.Value, LookAt:=xlWhole)
> If f Is Nothing Then
> MsgBox "最初のアンマッチは " & c.Value & " の " & c.Offset(, 1).Value & " でした"
> Exit For
> End If
> Next
> End With
>
>End Sub
|
|