ここから本文です

vba初心者です。 vlookup風なものをしたいのですが自分の知識ではできませんでした...

noa********さん

2018/1/804:10:33

vba初心者です。
vlookup風なものをしたいのですが自分の知識ではできませんでした。

例えば、
sheet1
....A B C D
1 11 ......21
2 12 ......22
3 13 ......23
4 空欄
5 14 ......24
6 15 ......25

sheet2
...... A B
1... 11 あ
2... 12 い
3... 13 う
4... 14 え
5... 15 お
6... 21 か
7... 22 き
8... 23 く
9... 24 け
10. 25 こ

こちらを数式をセルに入れずにsheet1のB.C列に
sheet2から値を引っ張ってきたいのですが
どのように行うのがいいのかを教えていただきたいです。
簡単な質問で申し訳ございませんが、よろしくお願いいたします。

閲覧数:
371
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tra********さん

2018/1/811:16:30

>sheet1のB.C列にsheet2から値を引っ張ってきたい
Sheet1のどこがキーなんですかね?
Sheet1のA列をキーにして、Sheet2から、「あいうえお・・」を検索して、B列に編集するのですか?
C列は、D列をキーにして、「あいうえお・・」を検索するということなんですかね?

>vlookup風なものをしたい
↓のように、「風なもの」じゃなくて、VLOOKUPそのものをVBAから起動できるのですけどね。

Sub 一例です()
Dim i As Long, rng2 As Range, xTxt
Set rng2 = Worksheets("Sheet2").Range("A:B")
With Worksheets("Sheet1")
'A列1行目~データ最終行
For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
'A列をキーにSheet2を検索
xTxt = Application.VLookup(.Cells(i, 1).Value, rng2, 2, False)
'B列へ編集
If Not IsError(xTxt) Then .Cells(i, 2).Value = xTxt
'D列をキーにSheet2を検索
xTxt = Application.VLookup(.Cells(i, 4).Value, rng2, 2, False)
'C列へ編集
If Not IsError(xTxt) Then .Cells(i, 3).Value = xTxt
Next i
End With
End Sub

質問した人からのコメント

2018/1/10 17:22:51

ありがとうございます!
出来ました!
どちらもできましたが、こちらのほうが簡単に出来ましたので
こちらをベストアンサーとさせていただきました!
本当にありがとうございました!!

ベストアンサー以外の回答

1〜1件/1件中

kim********さん

2018/1/809:37:58

はじめまして。私も初心者で恐縮です。。
され、値はA→B列、D→C列へ記述する感じでしょうか。
とりあえず、↓で動くと思いますが…
(VLookではなくIndex+Matchを使っています)
-------------------------
Sub index_match()
Dim workSh, prefSh As Worksheet
Set workSh = ThisWorkbook.Worksheets("Sheet1")
Set prefSh = ThisWorkbook.Worksheets("Sheet2")
Dim Last As Long
Dim workEndR As Long
Dim workTmpR, tmpStr As Long
Dim prefRng, codeRng As Range

'Sheet2の最終行を取得
Last = prefSh.Cells(Rows.Count, 1).End(xlUp).Row

'Match関数で検索する範囲とIndex関数で返答する範囲を指定する
Set prefRng = Range(prefSh.Cells(1, 1), prefSh.Cells(Last, 1)) 'Sheet2の検索範囲
Set codeRng = Range(prefSh.Cells(1, 2), prefSh.Cells(Last, 2)) 'Sheet2の返答範囲

'Index+Matchで値を取得(B列)
workEndR = workSh.Cells(Rows.Count, 1).End(xlUp).Row 'Sheet1「A」列の最終行を取得

For workTmpR = 1 To workEndR
tmpStr = workSh.Cells(workTmpR, 1).Value
On Error Resume Next
workSh.Cells(workTmpR, 2).Value = Application.WorksheetFunction.Index(codeRng, Application.WorksheetFunction.Match(tmpStr, prefRng, 0), 1)
If Err <> 0 Then
Err.Clear
End If
Next

'Index+Matchで値を取得(C列)
workEndR = workSh.Cells(Rows.Count, 4).End(xlUp).Row 'Sheet1「D」列の最終行を取得
For workTmpR = 1 To workEndR
tmpStr = workSh.Cells(workTmpR, 4).Value
On Error Resume Next
workSh.Cells(workTmpR, 3).Value = Application.WorksheetFunction.Index(codeRng, Application.WorksheetFunction.Match(tmpStr, prefRng, 0), 1)
If Err <> 0 Then
Err.Clear
End If
Next

End Sub

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる