はじめまして。
みなさまのお力が借りたく、質問いたします。
わかりずらい質問だとは思いますが、宜しくお願い致します。
例として、エクセルのファイルが2個あるとします。
A.xls
B.xls
とします。
AにはIDを入力するシートが1枚
BにはそのIDの人の名前・住所・生年月日などを規則性無く入れてあるシートが7枚程あるとします。
AのID列に「10」といれると
Bの全7枚のシートの中から該当する人のデータを抜き出し、
Aの所定のセルに表示する。といった事は可能でしょうか?
VLOOKUP関数を使ってみたのですが、検索するシートを1枚じゃないとダメみたいで・・・
シートを複数指定するとエラーになってしまいます。
問題は、抜き出したい「ID 10」が7枚のシートの中の何枚目にあるかがわからないのです。
ちなみに、該当する「ID 10」があるシートには必ず名前、住所、生年月日も同じ列に付随して存在します!
このようなことは不可能なのでしょうか?
もし可能ならばどうしたらいいか教えてください!
宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
自分の勉強にと思い マクロを書いてみました。
ただしこれを使うには
Cドライブの"Test"フォルダに "Test_A.xls" "Test_B.xls"という2つのファイルが入っていることが必要です。
Test_B.xls は お使いのBのエクセルファイルを複製して名前を変えて保存してください。
2行目から データが入っており、A列にID、その右B,C,Dまで書き込みされているという設定です。
Test_A.xlsは 新しく作ってください。 ただし IDを入力するセルは ”E15” 結果を 表示するのは
”A25からD25”までになります。
最初に開くのは Test_A です。このファイルにマクロを書き込みます。
ツール(T)→マクロ→Visual Basic Editorをクリック。最大表示にしたほうがわかりやすいと思います。
プロジェクトと左上にあると思います。
Sheet1 をダブルクリックすると右に白い面が現れると思います。
何も書かれていない状態だと思いますのでここに点線の間のものをコピペしてください。
---------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim IDNum As String
Range("A25:D25").ClearContents
IDNum = Range("E15")
If IDNum <> "" Then
Call ID検索
End If
End Sub
---------------
シート1のE15に IDを入力した後 どこでも良いのでセルをダブルクリックすると
”ID検索” という プログラムに行きます。
続く
ご回答ありがとうございました。
皆様のお力を借りて、なんとかできました!!
tommy-pie83さんには、前回の質問でもご回答頂きまして、本当に感謝しております。
また、複数回に分けてご回答頂きまして大変恐縮です。
これが、マクロというものなんですね・・・
ちょっと僕には理解しかねますが、少し勉強してみようと思います^^
今回は勉強になりました。
ありがとうございました。
No.8
- 回答日時:
すみませんしつこくて…
前回のは 私の勘違いでした。
書き換えた Bのファイルの保存場所が違っていたためでした。
前のファイルはシートが3枚で 連続した4桁のIDを入れていましたが、再度1桁から4桁までいろいろ試しましたが大丈夫でした。数字だけでなく文字でも試してみました。
それと 最初に Testフォルダの中に Test_A を入れておく必要があると書きましたが、こちらは どこにおいてもOKでした。私自身は マイドキュメントに入れていましたので。
お騒がせしました、本当におっちょこちょいですね。
No.7
- 回答日時:
さっきの3回の回答はなかったことにしてもらったほうがいいみたいです。
Bのシートのデータを入れ替えて試してみたら
エラーにはならないのですけど あるはずのデータを読みに行きませんでした。
ごめんなさい。
どうしてだか 私には解らないので無理みたいです。
でも おかげで勉強になりました。
No.6
- 回答日時:
これで最後
次は簡単です。ファイルを閉じるときに Test_A.xlsのシート1の
A25からD25に表示されているデータを消すというだけ。
これはプロジェクトの ThisWorkbookを ダブルクリックしてそこに貼り付けてください。
---------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("A25:D25").ClearContents
End Sub
---------------
Test_A のシート1に IDを入力後 ダブルクリックすると Test_B を開くようになっていますので
最初から開いておく必要はありません。
また 検索が終わると閉じるようにしています。
私が試した Bのファイルは シートが3枚、データがA2から D列まで ランダムにはいったものを使いましたが
このマクロは Aのシートをダブルクリックして Bを開いたときに シートの枚数を数えて処理しますので 現在7枚だと
書いてありますが 増えても大丈夫なはずです。
もしよろしかったら試してみてください。その際 Bの各々のシートに書き込まれている 住所、氏名などの セルの位置などによって
書き換える必要がありますので、もし不明の点がありましたら また書き込んでください。
No.5
- 回答日時:
次は一番上の ツールバー(?だったかなこんな基本が解りません、笑い) の挿入(I)をクリックして
その中から 標準モジュールを選んでください。
さきほどの プロジェクトのなかに Module1が増えたと思います。
これをダブルクリックして また次のものをコピペ して下さい。
”ID検索”です。
---------------
Sub ID検索()
Dim Ws As Integer
Dim IDNum As String
Dim I As Integer
Dim rg As Range
Dim pop As String
Dim Result As String
Dim RW As String
IDNum = Range("E15")
Application.ScreenUpdating = False
Workbooks.Open "C:\Test\Test_B.xls"
Ws = Worksheets.Count
For I = 1 To Ws
With Worksheets(I)
pop = .Range("A2").End(xlDown).Address
For Each rg In .Range("A2:" & pop)
If rg.Value = IDNum Then
Result = rg.Row
RW = I
Sheets("Sheet" & RW).Activate
Range("A" & Result, "D" & Result).Select
Selection.Copy
Workbooks("Test_A.xls").Worksheets("sheet1").Activate
Range("A25").Select
ActiveSheet.Paste
Range("E15").ClearContents
Range("A1").Select
Workbooks("Test_B.xls").Close
Exit Sub
End If
Next
End With
Next I
Workbooks("Test_A.xls").Worksheets("sheet1").Activate
Range("E15").ClearContents
Range("A1").Select
Workbooks("Test_B.xls").Close
End Sub
---------------
う~ん、中身はあちこちの寄せ集めなので 私には詳しく説明できません。
なんとなくしか解りません。
再び続く
No.3
- 回答日時:
ちょっと力技的解決策
"IF"と"ISERROR"を積み重ねて・・・
=IF(ISERROR(VLOOKUP(A3,Sheet2!A2:B4,2,0)),
IF(ISERROR(VLOOKUP(A3,Sheet3!A2:B4,2,0)),
IF(ISERROR(VLOOKUP(A3,Sheet4!A2:B4,2,0)),
"",VLOOKUP(A3,Sheet4!A2:B4,2,0)),
VLOOKUP(A3,Sheet3!A2:B4,2,0)),
VLOOKUP(A3,Sheet2!A2:B4,2,0))
・・・お勧めしません。
ご回答ありがとうございました。
皆様のお力を借りて、なんとかできました!!
pipipi523さんのご回答も参考にさせて頂きました。
僕のスキルでは、pipipi523さんの提案して頂いてる方法が理解できませんでした。申し訳ありません(TДT)
しかし、今回は勉強になりました。
ありがとうございました。
No.2
- 回答日時:
別シートの内容をシート毎貼り付けて下さい。
貼り付けたシートを元のシートから参照するには、名前の定義で、参照したい範囲に対して、名前の定義を行います。
方法はメニューの挿入から、名前で定義を選択し、参照するべき範囲を選択します。
実際に元のシートから別シートの範囲を見る際には、F3キーで名前の貼り付けを行います。これで別シートのデータ範囲を参照する事が可能です。
ご回答ありがとうございました。
皆様のお力を借りて、なんとかできました!!
ysko614さんのご回答も参考にさせて頂きました。
僕のスキルでは、ysko614さんの提案して頂いてる方法が理解できませんでした。申し訳ありません(TДT)
しかし、今回は勉強になりました。
ありがとうございました。
No.1
- 回答日時:
うまくお答えできるかどうか分かりませんが,自分の勉強のつもりでやってみました.
(1)bookBの各シートの内容をbooAの1枚のシートにまとめます.
の A1 に
=[bookB.xls]!sheet1!A1 の様にリンクを張り適当な範囲までフィルハンドルでコピー
同様に (引き続きbooAのsheet2 に) sheet2~sheet7 の内容を順にリンクさせる
(bookBの内容が更新され,行が増えるようなら各シートをコピーするとき行数を多めに余裕を持って コピー)
(2) Vlookupを使用しますが,booA の sheet2のA列(IDが入った列)は,昇順に並び替えてからlookup.
これでどうでしょうか.
蛇足ですが,もし大量のデータを扱うのでしたら,Accessを使うことをお勧めします.
ご回答ありがとうございました。
皆様のお力を借りて、なんとかできました!!
kakkysanさんのご回答も参考にさせて頂きました。
今後はAccessも視野にいれたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- Excel(エクセル) エクセルシートのデータを1列飛ばしで別ブックのシートに貼り付けるマクロが知りたい 2 2023/06/05 22:37
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Visual Basic(VBA) Excel VBA 複数ブックシートごとにデータを統合する方法について 4 2022/05/20 14:23
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- Excel(エクセル) エクセルでファイル保存時に複数シートのオートフィルタを全て解除したい 1 2023/05/10 13:23
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで入力シートから別シ...
-
エクセルのワークシートが重く...
-
VBA セルの値と同じ名前のシー...
-
エクセル自動の年月
-
エクセルで別のシートのデータ...
-
Excelで複数のシートの合計を別...
-
VBAのoffsetの動き方について教...
-
エクセル:複数シートのデータ...
-
Excelの中央値の複数条件について
-
エクセルVBA:表の内容を担当者...
-
EXCEL VBA 一致しないデータの...
-
VBAを利用しオートフィルタで日...
-
エクセルファイルを軽くする方法
-
VBAでシート名をセルから取得し...
-
エクセル マクロを使って日々...
-
Excelの選択肢をポップアップリ...
-
データー読みこんでコピーさせ...
-
ExcelVBAで、指定したシートに...
-
エクセルのデータ抽出について...
-
エクセルで入力→日付を自動判別...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで入力シートから別シ...
-
Excel 複数のシートからグラフ...
-
Excelの中央値の複数条件について
-
VBA セルの値と同じ名前のシー...
-
ExcelVBAで、指定したシートに...
-
Excel ハイパーリンク先のセル...
-
IF, ISNUMBER, INDIRECTの組み...
-
エクセルのワークシートが重く...
-
エクセル シフト勤務表から、...
-
VBAでシート名をセルから取得し...
-
エクセルで入力→日付を自動判別...
-
エクセルVBA:表の内容を担当者...
-
質問:特定文字列から空白行ま...
-
エクセル マクロを使って日々...
-
VBAのoffsetの動き方について教...
-
エクセル自動の年月
-
エクセル:複数シートのデータ...
-
ピボットテーブルから抽出デー...
-
エクセルについて質問です 日付...
-
Excelの選択肢をポップアップリ...
おすすめ情報