アプリ版:「スタンプのみでお礼する」機能のリリースについて

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()を使うのかな?
とは過去の質問から、なんとなく想像はつくのですが
素人なもので、例文を見てもよくわかりません・・・。

ご教授いただけると大変助かります。
よろしくお願い致します。

A 回答 (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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
かなりハイレベルな感じがしますが、実際に自分のデータに応用する際に、参考になります。
わざわざ、ありがとうございました。

お礼日時:2006/05/22 09:37

簡単にこんな感じじゃダメなんですか?



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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
初心者の私が言うのもなんですが、
とてもすっきりしていて、応用もメンテナンスもしやすそうです。
こちらも、私が今まで使ったことのない単語が多いので、一つ一つ解析していきたいと思います。
本当にありがとうございました!!

お礼日時:2006/05/22 09:29

>VLOOKUP関数を使用してシートを跨いでデータを一覧へもってくることができないようなので



こんな無責任なこと誰が言いました?
自分で確認しましたか?

No.1さんの回答にもありますが出来ますよ。
但し、No1さんの回答にある絶対参照云々は関係ありません、相対参照でもOK。
相対だと式のコピーは出来ませんが。
 
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
No.1様のお礼欄に記載しましたが、私の説明不足でした。

お礼日時:2006/05/19 22:44

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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

とりあえず実行したところ、うまくいきました!!
あとは、1文1文解析して実際に使用するファイルに応用してみます。
助かりました。

お礼日時:2006/05/19 22:49

VLOOKUPでの参照範囲を絶対参照で行えば、別シートの表でも


参照できると思います。
また、表の内容が変わる可能性のある場合は、名前定義を利用するのも便利です。

参考URL:http://www11.plala.or.jp/koma_Excel/contents3/ma …
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

私の説明が足りませんでした。
紹介していただいた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)
って感じにしたかったのですがダメだったので関数ではなくマクロしかないなということで質問をさせていただきました。

お礼日時:2006/05/19 22:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!