| 
    
     |  | ▼TODD さん: 
 まず col は、1行目の右端(XFD1)から左にみて最後にデータがある列番号。
 つまり、このリストの一番右の列になりますね。
 
 で、Range(Cells(1, col), Cells(Rows.Count, col).End(xlUp))
 
 これは、その列の 1行目のセルからから、その列のデータ最終セルまでの領域。
 かりに、2回目の場合、colが 9(つまりI列)で、I列のデータ最終行が20行目だとすると
 この領域は I1:I20 になりますね。それを左に3つ広げますので I1:K20 つまり
 2回目の領域全体になります。
 
 そうしますと adr1 = .Cells(1).Address(False, True)
 
 これは I1:K20の領域の最初のセル つまり I1。このアドレス文字列を取得しています。
 この時、行は相対表示、列は絶対表示という指定(False,True) をしていますので
 adr1 に格納される文字列は $I1 になります。
 
 もう1つ adr0 文字列を説明しておきます。
 
 adr0 = Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 3).Address
 
 かりに A列データ最終行が 20 なら A1:C20 になるわけですが Address取得時の
 相対、絶対 を省略しています。省略した場合絶対になります。
 したがって $A$1:$C$20 になっています。
 
 で、処理としては 『ある領域』に数式を埋め込んでいます。
 この場合、ある領域 の左上隅にセットする数式を与えると、
 シート上で右に、下にフィルコピーした場合に、式の中身が相対的に変化しますけど
 それと同じ状態でセットされます。
 
 ある領域 というのは
 With Range(Cells(1, col), Cells(Rows.Count, col).End(xlUp)).Resize(, 3)
 つまり、I1:K20 これの .Columns("B:C") これは2番目と3番目の列ということになりますので
 J1:K20 ですね。
 
 この左上隅のセル つまり J1 に
 
 "=IFERROR(VLOOKUP(" & adr1 & "," & adr0 & ",COLUMN(B1),FALSE),""登録なし"")"
 
 こんな式をセットしています。
 変数 adr1 や adr2 を 上で説明した例になおしますと
 
 =IFERROR(VLOOKUP($I1,$A$1:$C$20,COLUMN(B1),FALSE),"登録なし")
 
 こうなります。
 Columns(B1) って 2 ですから、この式は
 =IFERROR(VLOOKUP($I1,$A$1:$C$20,2,FALSE),"登録なし")
 
 これを右に(つまりK1)にフィルコピーすると
 =IFERROR(VLOOKUP($I1,$A$1:$C$20,COLUMN(C1),FALSE),"登録なし")
 つまり =IFERROR(VLOOKUP($I1,$A$1:$C$20,3,FALSE),"登録なし")
 になりますね。
 
 いずれにしても J1 に
 =IFERROR(VLOOKUP($I1,$A$1:$C$20,COLUMN(B1),FALSE),"登録なし")
 を入れて、これうぃK列にフィルコピーした後下にフィルコピーしてみてください。
 どのように式が変化するか、よくわかると思います。
 
 
 |  |