[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセル vba 別ブックから参照 』(よねこ)
質問です。
転記させたいシート(シート名:検索表)
A B C 1 11AA 2 D Z H 11 AA 3 C X G 4 E R J . . . 260 A1セルには検索値が入る(例:11AA) 抽出先シート名(シート名は毎回違う) A B C....AA AB 1 D Z H 11 AA 2 C X G 3 E R J . . . 260 H K
AA1には11 AB1にはABが入っているとする。ここは毎回は変わりますにで今回は例えばの話でお願いします。
転記させたいシートの検索ボタンを押すと
ファイルを開く画面
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")のマクロを入れて
今回開きたいファイルを開きます。
そうると転記させたいシート(シート名:検索表)の検索値
11AAを検索値として、抽出先シートからそれにあてはまるセルを抽出させたいです。抽出範囲(A1からC260)の値を抽出したい。
VLooKUPでしたいです。
そのような場合どのようにマクロを組めばよいでしょうか?
どうか教えてください。
ちなみに検索値が複雑で抽出先シートには2つのセルに分かれているので(11とAA)どちらもある場合のみ検索をかけ抽出する仕組みにしたいです。
説明不足かもしれませんがお願いします。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
今少し条件があいまいに見えるのですが、
たとえば抽出先シートで 11 AA 35 AA 11 BB CC 11 AA というデータがあったら、このまま「検索表」に追記すればよいのでしょうか?
その場合 >VLooKUPでしたいです。 の意味が分からないのですが。 (QS) 2020/11/03(火) 17:42
11 AA 35 AA 11 BB CC 11 AA というデータがあったら、このまま「検索表」に追記すればよいのでしょうか? ですが、 A B C 1 11 AA 35 2 AA 11 BB 3 CC 11 AA のように検索表に追記したいです。
検索→抽出(転記)はVLookUPだと思っていました。
間違いなら勉強不足です。
すみません。
検索値がある以上Vlookupだと思っていました。
(よねこ) 2020/11/03(火) 17:51
VLOOKUP というのは Virtical Lookup(縦方向値抽出)で対の機能が HLOOKUP(Horizontal Lookup)。 なので、EXCEL で VLOOKUP というとほとんどの方はこの関数と解釈するかと思います。
今回の処理を表す関数はないので、素直に 「対象シートのA:C列の同一行に 「検索表」シートのAA1セルと AB1 セルにある値を持つ行を抽出し、 検索表の A:C列に追記していきたい。」 のように説明したらよいかと思います。
やりたいことは、上記でよいでしょうか。 コードは後程。 (QS) 2020/11/03(火) 18:09
やりたいことはあっています。
すみません。
よろしくお願いします。
(よねこ) 2020/11/03(火) 18:15
サンプルまで。
Sub Sample() Dim dstWS As Worksheet Set dstWS = ThisWorkbook.Worksheets("検索表")
Dim dstRow dstRow = dstWS.Cells(Rows.Count, "A").End(xlUp).Row + 1 '// A列で最終行を判定
Dim OpenFileName OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") '// 選択ファイルは開いていない前提
Dim srcWS As Worksheet Set srcWS = Workbooks.Open(OpenFileName).Worksheets(1) '// 先頭シートを仮定
Dim srcLastRow srcLastRow = srcWS.Cells(Rows.Count, "A").End(xlUp).Row
Dim searchVal1 searchVal1 = dstWS.Range("AA1").Value
Dim searchVal2 searchVal2 = dstWS.Range("AB1").Value
Dim r For r = 1 To srcLastRow If WorksheetFunction.CountIf(srcWS.Cells(r, "A").Resize(1, 3), searchVal1) > 0 _ And WorksheetFunction.CountIf(srcWS.Cells(r, "A").Resize(1, 3), searchVal2) > 0 Then srcWS.Cells(r, "A").Resize(1, 3).Copy dstWS.Cells(dstRow, "A").Resize(1, 3) dstRow = dstRow + 1 End If Next End Sub
(QS) 2020/11/03(火) 19:36
Dim dstWS As Worksheet Set dstWS = ThisWorkbook.Worksheets("検索表") Dim dstRow dstRow = dstWS.Cells(Rows.Count, "A").End(xlUp).Row + 1 '// A列で最終行を判定 Dim OpenFileName OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") '// 選択ファイルは開いていない前提 Dim srcWS As Worksheet Set srcWS = Workbooks.Open(OpenFileName).Worksheets(1) '// 先頭シートを仮定 Dim srcLastRow srcLastRow = srcWS.Cells(Rows.Count, "A").End(xlUp).Row Dim searchVal1 searchVal1 = dstWS.Range("AA1").Value Dim searchVal2 searchVal2 = dstWS.Range("AB1").Value Dim r For r = 1 To srcLastRow If WorksheetFunction.CountIf(srcWS.Cells(r, "A").Resize(1, 3), searchVal1) > 0 _ And WorksheetFunction.CountIf(srcWS.Cells(r, "A").Resize(1, 3), searchVal2) > 0 Then srcWS.Cells(r, "A").Resize(1, 3).Copy dstWS.Cells(dstRow, "A").Resize(1, 3) dstRow = dstRow + 1 End If Next End Sub のコードの中で検索範囲はどこのことを言っているのでしょうか? searchVal1 = dstWS.Range("AA1").Value Dim searchVal2 searchVal2 = dstWS.Range("AB1").Value が検索値というのは理解したのですが、 一番初めに説明した A B C 1 11AA 2 D Z H 11 AA 3 C X G 4 E R J . . . 260 A1セルには検索値が入る(例:11AA) は今回のコードでは反映せれていないでしょうか?
(よねこ) 2020/11/03(火) 20:01
A1 は何にもしていませんが、あらかじめ式で =AA1&AB1 として置いてはダメでしょうか。 検索は 「AA11」という一つにまとめた値で検索を行うのでしょうか?
そうではないということを確認するために、先の質問をさせていただいたのですが。 処理結果が異なるのであれば、やりたいことが今一つ理解できていませんが、 そこは適宜変更いただいて、わからない部分を記載いただくか、他の方の回答をお待ちください。 (QS) 2020/11/03(火) 20:10
わたしには、 >検索は 「AA11」という一つにまとめた値で検索を行うのでしょうか? >→その通りです。 と >検索値が複雑で抽出先シートには2つのセルに分かれているので(11とAA)どちらもある場合のみ >検索をかけ抽出する仕組みにしたいです。 は矛盾している説明に聞こえます。
>抽出先シートにはAA11というセルはなく2つセルにAA,11という文字が入っています。 であれば、 >検索は 「AA11」という一つにまとめた値で検索を行うのでしょうか? ではない。ではないでしょうか。
VLOOKUP は 第一引数を検索する範囲は第二引数で指定した範囲(表)の「先頭列」です。 これを範囲といっているのであれば正しいですが、説明で検索する範囲が A:C列となっている ため、これが VLOOKUP と言われてもピンと来ていません。
>抽出したいセルは検索と一致した場所から例:左に10,11,12とします。 はこれまでの説明にあったでしょうか。 急に出てきた新しい条件のように感じましたが、どこの説明になるでしょうか。
>理解できますでしょうか? すみません、理解できません・・・onz。 (QS) 2020/11/03(火) 20:56
こんばんは! 横からお邪魔します。 察するに検索範囲は、シート全体かもしくはD列から最終列ぐらいを指すんでしょうかね??? >AA1には11 AB1にはABが入っているとする。ここは毎回は変わりますにで今回は例えばの話でお願いします。 で、抽出したいのがその行のA列B列C列の値なのですね???
検索値と検索範囲がうまく伝わらないですね それはさておきいくら何でも何か範囲を特定する仕様はあると思いますが、回答者からはトピ主さんのレイアウトは 見えませんので想像で書くと
D1からXAA1の間に A1とB1の値があったら、、っていうコードですけど、、こういうことではなのですか? Option Explicit Sub nn() Dim myrng As Range Set myrng = Range("d" & 1, Range("xaa" & 1)) If (Application.CountIf(myrng, Range("a1")) > 0) * (Application.CountIf(myrng, Range("b1")) > 0) Then
End If End Sub (SoulMan) 2020/11/03(火) 21:00
>検索をかけ抽出する仕組みにしたいです が本来の姿です。 ちょっと書き方が間違っていたので修正します。 転記させたいシート(検索表)の A1セルに検索値が入っていて 検索範囲は別ファイルの例:A1からAA260の範囲で 抽出したいセルは検索と一致した場所から例:左に10,11,12とします。 別ファイルに検査値は多数あり、すべて抽出したいです。
左に10,11,12はある特定の場所だけを抽出したいです。
全部の行じゃなくて。
すみませんでした。
(よねこ) 2020/11/03(火) 21:13
検索範囲は別ファイルの例:A1からAA260の範囲で
抽出したいセルは検索と一致した場所から例:左に10,11,12とします。
別ファイルに検査値は多数あり、すべて抽出したいです。
検索値が複雑で抽出先シートには2つのセルに分かれているので(11とAA)どちらもある場合のみ
>検索をかけ抽出する仕組みにしたいです。 すみませ。
(よねこ) 2020/11/03(火) 21:19
>検索範囲は別ファイルの例:A1からAA260の範囲で >抽出したいセルは検索と一致した場所から例:左に10,11,12とします。 >別ファイルに検査値は多数あり、すべて抽出したいです。 >検索値が複雑で抽出先シートには2つのセルに分かれているので(11とAA)どちらもある場合のみ
お手伝い程度しかできないのですが、、取り合えず検索範囲が分かったのはよかったですね。 でも、この程度のことは最初から提示しておかないと互いが無駄な時間を過ごします。
次に、検索値が二つありますよね?11 と AA で、一致した場所からとなるとどっちですか?それぞれですか??? A1の左に10も11もありませんよね??? 全て抽出したいということは複数あるのですね??? その場合は対をどうやって判断するのですか???
何か条件が曖昧過ぎてコードが書けないんじゃないんですか? もう少し小さなレイアウトでいいですから表できちんと例題を示されて それをご自身で応用するぐらいの気構えがないと厳しいと思いますよ?
コードが書けない人の特徴はコードを書く以前の問題がクリアされていないからだと思うのです。私見です。 もう少しご自身で整理されてみてはいかがですか? (SoulMan) 2020/11/03(火) 21:39
1 11AA 2 D Z H 3 C X G 4 E R J . . . 260 H K A1セルには検索値が入る(例:11AA) 抽出先シート名(シート名は毎回違う) A B C....AA AB 1 D Z H 11 AA 2 C X G 11 AA 3 E R J 11 AA . . . 260 H K 簡単な表です. 次に、検索値が二つありますよね?11 と AA で、一致した場所 からとなるとどっちですか?それぞれですか??? A1の左に10も11もありませんよね??? 全て抽出したいということは複数あるのですね??? その場合は対をどうやって判断するのですか??? これに関しては、考えがまちがっていました。 やりたいのは,抽出先シートに11,AAの二つのセルがありまして、そのセルを含むすべての行のA,B,C列の値を抽出したいです すみません。 (よねこ) 2020/11/03(火) 21:55
もうお布団の中ですけど それでしたら範囲は違いますが 前の投稿で書いてますよ? そこから応用されたらどうでしょうか? そんなに難しい話じゃないので 頑張れば出来るとと思います では、おやすみなさい💤 (SoulMan) 2020/11/03(火) 22:12
転記させたいシート シート名検索表
セルの配置は以下になります。
D2セルにはユニット名 →ファイルによっては入るものと入らないものがある 入らない場合は空白です。
D3セルにはマウント表、マウント裏、マウント→どれかが必ず入る
D4セルには=D2&D3の数式が入る
抽出先シート →ファイル名は毎回変わる
検索範囲はB7からAH290
ここからは流れを説明します。
転記させたいシートの検索ボタンを押す
ファイルを開くダイアログが表示されて開きたいファイルを開く
転記させたいシートのD4セルを検索値として、
抽出先シートのB7からAH290の範囲で検索し、検索値と一致した行のB,C,D,E列の値を
全て転記させたいシートのC,D,E,F列からに転記する
という流れになります。
この流れをVBAで行うにはどうしたら良いでしょうか?
ご教授いただきたく思います。
(よねこ) 2020/11/05(木) 12:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.