VLOOKUP関数を使用してシートを跨いでデータを一覧へもってくることができないようなので、
マクロを使用して以下のような作業をしたいです。
【Sheet1】:データベース(1)
A列 B列
1行 0001 あ
2行 0003 う
【Sheet2】:データベース(2)
A列 B列
1行 0002 い
2行 0004 え
3行 0005 お
というデータから
【Sheet3】:一覧
A列 B列
1行 0001 あ
2行 0002 い
3行 0003 う
4行 0004 え
5行 0005 お
を作成したい。
データベース(1)(2)は各々で全て手入力をし、
一覧のA列は予め入力しておき、B列の情報だけを一覧シートにもってくるという内容です。
(実際はセル数もシート数ももっと多いです)
Application.WorksheetFunction.VLookup()を使うのかな?
とは過去の質問から、なんとなく想像はつくのですが
素人なもので、例文を見てもよくわかりません・・・。
ご教授いただけると大変助かります。
よろしくお願い致します。
No.5
- 回答日時:
Findメソッドでやってみました。
Sheet1が「一覧」A列にコードあり
Sheet2,Sheet3が検索表(A列にコード、B列に意味)の例です。
Arrayのところで、検索表のシート名を増やしてください。
VLOOKUP利用でも、関数と、エラー検出の部分を少し変えれば同じ骨格でできます。
(コードが短いことを旨として作成)
Sub test02()
Dim sh As Worksheet
Dim sh1 As Worksheet
Dim x As Range
Set sh1 = Worksheets("Sheet1")
t = Array("Sheet2", "Sheet3")
d1 = sh1.Range("A65536").End(xlUp).Row
For i = 1 To d1
y = sh1.Cells(i, "A")
For Each sh In Worksheets(t)
d = sh.Range("A65536").End(xlUp).Row
Set x = sh.Range(sh.Cells(1, "A"), sh.Cells(d, "A")).Find(y)
If x Is Nothing Then
sh1.Cells(i, "A").Offset(0, 1) = "Not Found"
Else
' MsgBox x.Address & sh.Name
sh1.Cells(i, "A").Offset(0, 1) = x.Offset(0, 1)
Exit For
End If
Next
Next i
End Sub
回答ありがとうございます。
かなりハイレベルな感じがしますが、実際に自分のデータに応用する際に、参考になります。
わざわざ、ありがとうございました。
No.4ベストアンサー
- 回答日時:
簡単にこんな感じじゃダメなんですか?
Sub DataMerge()
Dim SH1 As Worksheet, SH2 As Worksheet, SH3 As Worksheet
Set SH1 = Sheets("Sheet1")
Set SH2 = Sheets("Sheet2")
Set SH3 = Sheets("Sheet3")
'Sheet3初期化
SH3.Cells.Clear
'Sheet1の最終行
lngR = SH1.Range("A65536").End(xlUp).Row
'Sheet1のデータをSheet3へコピー
SH1.Range("A1:B" & lngR).Copy Destination:=SH3.Range("A1")
'Sheet2の最終行
lngR = SH2.Range("A65536").End(xlUp).Row
'Sheet2のデータをSheet3へコピー
SH2.Range("A1:B" & lngR).Copy _
Destination:=SH3.Range("A65536").End(xlUp).Offset(1)
'Sheet3の最終行
lngR = SH3.Range("A65536").End(xlUp).Row
'並べ替え
SH3.Range("A1:B" & lngR).Sort Key1:=Range("A1"), Order1:=xlAscending
Set SH1 = Nothing
Set SH2 = Nothing
Set SH3 = Nothing
End Sub
回答ありがとうございます。
初心者の私が言うのもなんですが、
とてもすっきりしていて、応用もメンテナンスもしやすそうです。
こちらも、私が今まで使ったことのない単語が多いので、一つ一つ解析していきたいと思います。
本当にありがとうございました!!
No.3
- 回答日時:
>VLOOKUP関数を使用してシートを跨いでデータを一覧へもってくることができないようなので
こんな無責任なこと誰が言いました?
自分で確認しましたか?
No.1さんの回答にもありますが出来ますよ。
但し、No1さんの回答にある絶対参照云々は関係ありません、相対参照でもOK。
相対だと式のコピーは出来ませんが。
No.2
- 回答日時:
Public Sub sample()
Dim r As Range
Dim x
Dim list
Dim index As Long
list = Array(Sheets("Sheet1").Range("A1:B2"), Sheets("Sheet2").Range("A1:B3")) '参照範囲のリスト
On Error GoTo DontFind
For Each r In Sheets("Sheet3").Range("A1:A5") '固定にしない方がいいかも?
index = 0
x = Application.WorksheetFunction.VLookup(r.Value, list(index), 2, False)
r.Offset(0, 1).Value = x
Next
Exit Sub
DontFind:
If index < UBound(list) Then
index = index + 1
Resume
Else
x = "#N/A": Resume Next
' MsgBox "検索値がみつからない"
' Stop
End If
End Sub
回答ありがとうございます。
とりあえず実行したところ、うまくいきました!!
あとは、1文1文解析して実際に使用するファイルに応用してみます。
助かりました。
No.1
- 回答日時:
VLOOKUPでの参照範囲を絶対参照で行えば、別シートの表でも
参照できると思います。
また、表の内容が変わる可能性のある場合は、名前定義を利用するのも便利です。
参考URL:http://www11.plala.or.jp/koma_Excel/contents3/ma …
回答ありがとうございます。
私の説明が足りませんでした。
紹介していただいたVLOOKUPの使い方だと
Sheet3の
B1 = VLOOKUP(A1,Sheet1!$A$1:$B$2,2,FALSE)
B2 = VLOOKUP(A2,Sheet2!$A$1:$B$3,2,FALSE)
B3 = VLOOKUP(A3,Sheet1!$A$1:$B$2,2,FALSE)
B4 = VLOOKUP(A4,Sheet2!$A$1:$B$3,2,FALSE)
B5 = VLOOKUP(A5,Sheet2!$A$1:$B$3,2,FALSE)
とシートを指定しないといけなくなってしまいます。
イメージとしては、
VLOOKUP(A5,OR(Sheet1!$A$1:$B$2,Sheet2!$A$1:$B$3),2,FALSE)
って感じにしたかったのですがダメだったので関数ではなくマクロしかないなということで質問をさせていただきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Excel(エクセル) Excel_マクロ_複数のシートのVLOOKUPで表示された#N/A以外に色付けをしたいです 1 2023/02/16 22:37
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) 【Excel関数】値が合致するセルの隣のセルを表示させたい 8 2022/10/12 17:44
- Excel(エクセル) エクセル関数のXlookupのフィルハンドル機能(類した機能でも可)を知りたいです。 3 2022/09/20 20:02
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字の色も参照 VLOOKUP
-
Excel VBA ピボットテーブルに...
-
VBAで繰り返しコピーしながら下...
-
エクセルのブック分割マクロを...
-
ExcelのVlookup関数の制限について
-
エクセルの列の限界は255列以上...
-
エクセルの保護で、列の表示や...
-
エクセルで、book全体の検索&...
-
エクセルの複数シートにあるデ...
-
エクセルで、チェックボックス...
-
エクセルの表を自動的に、項目...
-
Excelでの並べ替えを全シートま...
-
VBAで項目ごとにシートを分けた...
-
エクセル マクロ 標準モジュー...
-
Excelで条件別にシートを振り分...
-
Excel の複数シートの列幅を同...
-
別シートから月(MONTH)で抽出す...
-
VBA 複数シートをひとつにまと...
-
エクセルの特定の複数の行を非...
-
SUMPRODUCTにて別シートのデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
オートフィルタ使用時にCOUNTIF...
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
エクセル関数に詳しい方、教え...
-
【条件付き書式】countifsで複...
-
Excel の複数シートの列幅を同...
-
エクセル マクロ 標準モジュー...
-
エクセルで横並びの複数データ...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
VLOOKアップ関数の結果の...
-
SUMPRODUCTにて別シートのデー...
-
エクセルで、チェックボックス...
-
Excel VBA ピボットテーブルに...
-
【エクセル】1列のデータを交...
-
エクセルVBAで、ある文字を含ん...
-
エクセルのブック分割マクロを...
-
excel 複数のシートの同じ場所...
おすすめ情報