[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数一致した行の番号を調べる』(セリナ)
複数の検索値と一致した行の番号をvbaを使用して調べたいです。
Book1 Sheet1
Book2 Sheet1
Book1↓
A列 B列 1 名前 山田太郎 2 方位 南 3 番号 3 ・・・・・・ 6 住所 〒×××−×××× 7 電話番号090-××××−××××
Book2↓
A列 B列 C列 D列 E列 1 名前 方位 番号 住所 電話番号 2 山田太郎 南 2 〒×××−×××× 090-××××−×××× 3 山田太郎 南 3 ・・・・・・ 6 住所 〒×××−×××× 7 電話番号090-××××−××××
Book1は縦書き、Book2は横書きになっています。
Book1の名前はB1、方位はB2、番号はB3で固定です。
名前と方位と番号が全て一致するBook2の行の番号を調べたいです。
vbaでの調べ方を教えてください。わかりにくく申し訳ありませんがどうか宜しくお願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
Book1 には 1件だけが記載されていて、それと Book2に複数行記載されているものとのマッチングを行うということですね? また、Book2 のレイアウトサンプルの 6,7行目は 単なる アップ時のコピペミスで、本当は、このようなものは ないのですね?
(β) 2016/06/21(火) 15:13
追加で。
マッチングすべきキーは 名前、方位、番号 ですか? それとも、名前、方位、番号、住所、電話番号 ですか?
(β) 2016/06/21(火) 15:26
御回答ありがとうございます。
Book1には一つのセット(B1名前、B2方位、B3番号)のみ記載されています。
マッチングすべきキーは[名前][方位][番号]です。
住所、電話番号はです。紛らわしく申し訳ありません。
(セリナ) 2016/06/21(火) 15:47
いろんな方法がありますね。 きっと、数式一発でも求めることができますし、VBA処理内でも、その数式を使えば2〜3行のコードで 結果がでると思います。 VBA処理でも、もっともっとコード数の少ない書き方もできますが、なるべくわかりやすいループ判定コードにしました。
ブックの構成ですが、Book1,Book2 とは別に マクロブックがあるということを想定したコードです。 もし、いずれか一方のブックにマクロを記載して使うならそういうことも(もちろん)できます。
また、行番号を知りたいということなので、とりあえす、行番号をメッセージで表示していますが もしかしたら、そうではなく、Book1の 6,7行目に、見つかったものをセットしたかったのでは?
それならそれで、ちょこっとなおせば、できます。
(5項目マッチングのままアップしてましたので入れ替えました 16:07)
Sub Sample() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim r As Range Dim n As Long Dim myName As String Dim myDir As String Dim myNum As Variant
Set sh1 = Workbooks("Book1.xlsx").Sheets("Sheet1") Set sh2 = Workbooks("Book2.xlsx").Sheets("Sheet1")
myName = sh1.Range("B1").Value myDir = sh1.Range("B2").Value myNum = sh1.Range("B3").Value
With sh2.Range("A1").CurrentRegion For Each r In .Rows If r.Range("A1").Value = myName Then If r.Range("B1").Value = myDir Then If r.Range("C1").Value = myNum Then n = r.Row Exit For End If End If End If Next
If n > 0 Then MsgBox n & "行目にありました" Else MsgBox "見つかりません" End If End With
End Sub
(β) 2016/06/21(火) 15:55
数式利用の例です。2〜3行にするとコードの1行が長くなりすぎるので、適当に分解して記述しました。
Sub Sample2() Const BK1NM As String = "Book1.xlsx" Const BK2NM As String = "Book2.xlsx" Dim myForm As String Dim x As Long Dim z As Variant
x = Workbooks(BK2NM).Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row myForm = "MATCH([●1]Sheet1!$B$1&[●1]Sheet1!$B$2&[●1]Sheet1!$B$3,[●2]Sheet1!$A$1:$A$★&[●2]Sheet1!$B$1:$B$★&[●2]Sheet1!$C$1:$C$★,0)" myForm = Replace(Replace(Replace(myForm, "●1", BK1NM), "●2", BK2NM), "★", x)
z = Evaluate(myForm)
If IsNumeric(z) Then MsgBox z & "行目にありました" Else MsgBox "見つかりません" End If
End Sub
(β) 2016/06/21(火) 16:32
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.