『別ブックから日付で抽出したデータを転記』(あん) Win7 Excel2013 先日、質問させていただきましたが上手く説明できませんでした。細かく書いてみました DB(別ブック)のSheetから特定の日のデータを編集用Sheetに転記したいのです 検査範囲はA列とB列あります どちらか、もしくは両方に日付が該当するデータです。 転記は行全体ではなく、特定の列だけで、該当するデータ数は日によって異なります(1〜10行位) 検査値の入力は、編集用Sheetに置きます 転記は編集用Sheetの10行目から貼り付けたいのです 解りにくい説明で申し訳ございません 皆様、よろしくお願いいたします ---- ↓の続きですか? [[20130706184818]] 『伝票番号で抽出しリストに転記』(あん)   だったら続けて書いたほうがいいね。 「先日の質問」を捜さない回答者もいるし、 「先日の質問」に回答した人が「先日の質問」だけチェックしていたら 新しい質問を見過ごしてしまった、という場合も有るので。 また、新しく質問をあげるのなら、「先日の質問」の内容も漏らさず書かなきゃいけない。 重複して書くこともないと思われるかもしれませんが、 回答ボランティアの方々は「先日の質問」を探す手間が発生します。   さて、先日と今回の質問内容を合わせると・・・・   「DBと表現しているブック」と「編集用シートと表現しているシートを含むブック」 は同じフォルダにある。 「編集用シートと表現しているシートのどこかに記載されている」伝票番号が 「DBと表現しているブックに含まれる名前不明のシート」のA列とB列のどちらかに 検索で発見された時に、(これはどちらかにあればよいと受け取れるので、 両方にあることまでチェックしなくて良いと思われる) 「たぶん伝票番号と同じ行にある、列番号不明の列」のデータを 「編集用シートと表現しているシートの列番号不明の10行目」に貼り付ける。   ・・・のように推測は出来ますが、 「」の中で表現している部分が不明確か、具体的な表現に欠けます。   また、該当するデータが何行あるのかを、どうやって判断したらよいのか。 検索する伝票番号とデータ数の関係が分からないと、マクロも造りようがないんです。 あんさんはシートを見れば、「この伝票番号のデータはn行ある」と判断できるかもしれ ないけど。  イジワルな言い方をすると、 「ずいぶん隠していらっしゃいますね」ってことになります。    あ、先の質問では「伝票番号」でしたが、 今回は「日付」ってなってるなぁ・・・ (みやほりん) ---- みやほりん様 返信ありがとうございます 前回、伝票番号で今回は日付になっていたのは、作り方を(設計)変えることにしたからです。 すみませんでした Book1にあるSheet1(DB) A   B   C C D   E F G   ・・・  番号  日付1 日付2 名前 住所 電話 品目 備考1 ・・・ 1           あ        か 2 3 4           さ        た 5 こんな感じです 検査値(日付)が、BもしくはCに該当する行のC(名前)とF(品目)他にもあります この検査値は、Book2のSheet2に置きます それと転記先もBooK2のSheet2です 下記のような感じです A   B   ・・・          ・・・ 1 2 (省略) 9 名前 品目 10 あ  か ・・・ 11 さ  た  ・・・ こんな感じです よろしくお願いいたします ---- 指定する日付は 複数あるのでしょうか? 一つでしょうか? 今回の件で関係する部分は、サンプルデータとはいえ もう少ししっかり書いておいてもらえると良いと思います。 DBシートの B,Cの日付セルや 2,3,5行目の 名前と品目セル Book2のSheet2の検査値の例 詳細がよくわかりませんが フィルタの詳細設定 を使ってみてはどうですか? 例えば、7月1日のものを抽出するなら  日付1 日付2 7月1日 7月1日 の様に条件を書いた範囲を、抽出条件範囲(C)として指定します。 また、9行目に抽出したい項目を書いておいて 抽出範囲(T)にそのセルを指定すると 選んだ項目のデータだけが抽出されます。 (HANA) ---- マクロ例です。   Option Explicit Sub test20130712() Dim myWB As Workbook, CopyToWS As Worksheet Dim myRng As Range, dateRng As Range, CopyToRng As Range Set myWB = Workbooks.Open(ThisWorkbook.Path & "\Book1.xls") Set myRng = myWB.Worksheets("Sheet1").Range("A1").CurrentRegion Set CopyToWS = ThisWorkbook.Worksheets("Sheet2") Set dateRng = CopyToWS.Range("A2") With myRng .AutoFilter Field:=2, _ Criteria1:=">=" & dateRng.Value, _ Operator:=xlAnd, _ Criteria2:="<=" & dateRng.Value Set CopyToRng = CopyToWS.Cells(Rows.Count, 1).End(xlUp).Offset(1) .Offset(1, 3).Resize(, 1).Copy Destination:=CopyToRng .Offset(1, 6).Resize(, 1).Copy Destination:=CopyToRng.Offset(, 1) .AutoFilter Field:=2, _ Criteria1:="<" & dateRng.Value, _ Operator:=xlOr, _ Criteria2:=">" & dateRng.Value .AutoFilter Field:=3, _ Criteria1:=">=" & dateRng.Value, _ Operator:=xlAnd, _ Criteria2:="<=" & dateRng.Value Set CopyToRng = CopyToWS.Cells(Rows.Count, 1).End(xlUp).Offset(1) .Offset(1, 3).Resize(, 1).Copy Destination:=CopyToRng .Offset(1, 6).Resize(, 1).Copy Destination:=CopyToRng.Offset(, 1) End With CopyToRng.CurrentRegion.Sort Key1:=CopyToRng.CurrentRegion.Cells(1), Order1:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal myWB.Close SaveChanges:=False Set CopyToRng = Nothing Set dateRng = Nothing Set CopyToWS = Nothing Set myRng = Nothing Set myWB = Nothing End Sub   Book1と同じフォルダに保存したBook2の標準モジュールに記述してください。 Book1を開くところから始まりますので、Book1を閉じた状態から開始してください。 Book2の9行目見出し項目はすでに記述されていると仮定します。 検査値となる日付がどこなのか、なぜか秘匿していらっしゃるので、 とりあえず、Book2、Sheet2のA2セルと仮定します。 Book2を開いた状態でtest20130712を実行します。   Autofilterを使用しているので、データ量、ならびに計算式の再計算が原因で 動作が遅くなる場合があります。 最後に名前で並べ替えしているので、期待している順番にはならないかもしれません。   Excel2003で検証しているので、期待通り動作しない可能性はあります。 (みやほりん) ---- みやほりん様、HANA様 ありがとうございます フィルターの詳細設定でやってみました思い通りに出来ました、ありがとうございます。 もう少し教えていただきたいのですが 例えば、顧客コード"23" の内、7月1日を抽出の様に ORだけでなくANDの組み合わせはどのようにすればよいのでしょうか?  日付1 日付2 7月1日 7月1日 よろしくお願いいたします ---- ヘルプは確認してもらえましたか? 使用例も載っていると思いますので まずは調べてみるのが良いと思います。 縦に並べたものが OR 横に並べたものが AND になるので  日付1 日付2 顧客コード 7月1日 23 7月1日 23 の様に書いてもらうと  日付1が7月1日で、顧客コードが23の物   または  日付2が7月21日で、顧客コードが23の物 が抽出出来ます。 こう言った検索しかしないなら、検索条件範囲には 数式で参照するようにしておくと良いかもしれません。 直接条件のセルに入力すると  日付を2回、顧客コードを2回 入力しないといけなくなるので。 [A] [B] [C] [D] [E] [F] [1] 日付 顧客コード 日付1 日付2 顧客コード [2] 7月1日 23 7月1日 23 [3] 7月1日 23 例えば、A2に日付 B2に顧客コードを入れる事にして D2,E3に =A1 F2,F3に =B2 の式を先に入れておきます。 (HANA) ---- HANA様 ありがとうございます 思い通りに出来ました 解決。 (あん)