• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 期間を指定してデータを別シートに抽出)

VBAで期間指定してデータを別シートに抽出する方法

kagakusukiの回答

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

>Sheet2のA7以下へ表示したいと考えています。 の下には >A  B   C  D  E  F  G   N とありますが、その最後にある「N」は、もしかしますと「H」の間違いではないでしょうか?  それともSheet2においても日付はN列に表示されるようにした方が宜しいのでしょうか?  取り敢えず、前者の条件であるものとした場合には、以下の様なVBAとなります。 Sub QNo8998854_VBA_期間を指定してデータを別シートに抽出() Dim CopySheet As Worksheet, PasteSheet As Worksheet, _ ItemRow As Long, LastRow As Long, PasteCell As Range, _ CopyColumn As String, UnwantedColumn As String, _ StartDay As Variant, LastDay As Variant, _ StartDayCell As Range, LastDayCell As Range Set CopySheet = Sheets("Sheet9") '元データが入力されているシート Set PasteSheet = Sheets("Sheet9 (2)") '貼付け先のシート CopyColumn = "A:N" 'コピーする元データが入力されている列の範囲 UnwantedColumn = "H:M" 'コピーする必要のない列の範囲 ReferenceColumn = "N" '日付けが入力されている列 ItemRow = 1 ' 元データの表の項目欄の行番号 Set PasteCell = PasteSheet.Range("A7") '貼付け先のセル範囲の中で最も左上にあるセル Set StartDayCell = PasteSheet.Range("A2") '期間の初日の日付が入力されているセル Set LastDayCell = PasteSheet.Range("B2") '期間の最終日の日付が入力されているセル StartDay = StartDayCell.Value LastDay = LastDayCell.Value If StartDay = "" Or LastDay = "" Then MsgBox "期間が設定されておりません。", vbExclamation, "期間未設定" Exit Sub ElseIf StartDay > LastDay Or Not (IsDate(StartDay) And IsDate(LastDay)) Then MsgBox "期間の設定が不適切です。", vbExclamation, "無効な設定値" Exit Sub End If LastRow = CopySheet.Range(ReferenceColumn & Rows.Count).End(xlUp).Row If LastRow <= ItemRow Or WorksheetFunction. _ CountIfs(CopySheet.Range(ReferenceColumn & ItemRow & ":" & ReferenceColumn & LastRow), ">=" _ & StartDay, CopySheet.Range(ReferenceColumn & ItemRow & ":" & ReferenceColumn & LastRow), _ "<" & LastDay + 1) = 0 Then MsgBox "抽出すべきデータがありません。", vbInformation, "データ無し" Exit Sub End If Application.ScreenUpdating = False With CopySheet If .AutoFilterMode Then CopySheet.Cells.AutoFilter .Columns(UnwantedColumn).EntireColumn.Hidden = True .Range(ReferenceColumn & ItemRow & ":" & ReferenceColumn & LastRow). _ AutoFilter Field:=1, Criteria1:=">=" & Int(StartDay), Criteria2:="<" & Int(LastDay) + 1 Intersect(.Columns(CopyColumn), .Rows(ItemRow & ":" & LastRow)).SpecialCells(xlCellTypeVisible).Copy PasteCell.PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False Cells.AutoFilter .Columns(UnwantedColumn).EntireColumn.Hidden = False End With Application.ScreenUpdating = True End Sub

関連するQ&A

  • エクセル)2シート間の重複データのチェック

    シート1 A列(チェック欄)B列(会社名)C列(商品名) シート2 A列(チェック欄)B列(会社名)C列(商品名) というエクセルの表があります。 A列(チェック欄)は、 シート1のA列は「B列C列の内容がシート2と重複するもの」にチェック、 シート2のA列は「B列C列の内容がシート1と重複するもの」にチェック、 をいれています。 いずれも、B列C列がそろって重複している場合にのみチェックをしています。 B列のみ、C列のみの場合はチェックをいれません。 シート1 ☆ い社 りんご   い社 みかん   ろ社 みかん ☆ は社 ぶどう   に社 すいか   に社 りんご シート2 ☆ い社 りんご   ろ社 いちご   ろ社 すいか   ろ社 もも ☆ は社 ぶどう   に社 いちご というようなかんじです。 このA欄のチェックを自動でできるように関数を入力したいのですが、 どうすればよいでしょうか?

  • エクセル出の並び替えについて質問

    エクセルの並び替えにおいて質問させていただきます。  A列  B列  C列   D列 りんご  1  バナナ  4 バナナ  2  みかん  6 すいか  3  いちご  8 みかん  4  もも   3 いちご  5  すいか  2 ドリア  6  ぶどう  1 というものを  A列  B列  C列   D列 りんご  1   バナナ  2  バナナ  4 すいか  3  すいか  2 みかん  4  みかん  6 いちご  5  いちご  8 ドリア  6           もも   3         ぶどう  1 というようにA列にならってC,D列の項目を並び替えて、並び替えられないものは下に列挙させるようなやり方がありましたら教えてください。 どうぞ宜しくお願いします。

  • Excel2003 並び替えに関する質問 VBA初心者

    エクセルの並び替えにおいて質問させていただきます。  A列  B列  C列   D列 りんご  1  バナナ  4 バナナ  2  みかん  6 すいか  3  いちご  8 みかん  4  もも   3 いちご  5  すいか  2 ドリア  6  ぶどう  1 というものを  A列  B列  C列   D列 りんご  1   バナナ  2  バナナ  4 すいか  3  すいか  2 みかん  4  みかん  6 いちご  5  いちご  8 ドリア  6           もも   3         ぶどう  1 というようにA列にならってC,D列の項目を並び替えて、並び替えられないものは下に列挙させるようなやり方をVBAで組みたいのですが、まずはどうすればよいのかわかりません。 もし、これを見て答えられるようであれば、どなたか教えていただければ幸いです。 どうか宜しくお願いします。

  • Excelで複数条件で抽出した複数データを出力

    Excelで複数条件で抽出した複数データを出力したい Shett1のセルAとセルBの複数条件で、Sheet2を検索し一致したSheet2のセルCを Sheet1の該当するセルCに入れたいのです。 それを関数でするのはどうしたらいいのでしょうか? Sheet1 A B NAME ID(タイトル) いちご A01 いちじく A02 かき B01 すいか C01 なし D01 ぱいなっぷる E01 ばなな E02 ぶどう F01 みかん G01 めろん H01 もも I01 りんご J01 Sheet2 A B C 名前 ID 漢字(タイトル) みかん G01 蜜柑 いちご A01 苺 ぶどう F01 葡萄 りんご J01 林檎 もも I01 桃 かき B01 柿 なし D01 梨 すいか C01 西瓜 いちじく A02 無花果

  • エクセルで範囲内のデータを別シートにうつしたい

    エクセルで特定の範囲内の数値にあてはまるデータを別のシートに新たな表として作成したいのですが、簡単な方法があれば教えてください。 例えば Sheet1   A   B     C  1 25  ミカン   3000 2 30  リンゴ   4500 3  5  メロン   9800 4 17  ブドウ   1800 5 50  バナナ  1000 このようなデータを次のような表にしたいのです。 A列の数値が10~30のみ行ごと抜粋する Sheet2   A   B     C  1 25  ミカン   3000 2 30  リンゴ   4500 3 17  ブドウ   1800  よろしくお願いいたします。

  • 期間指定での日付の抽出

    Excel2013です。 【Sheet1】 ID|名前|誕生日| D | E | F | G | H | I | J |・・・・ 01|田中|yyyy/mm/dd|2004/10/15|2005/10/12|2006/10/17|2007/10/13|2008/10/15|2009/10/110|2010/10/15|・・・・ 02|佐藤|yyyy/mm/dd|2008/10/15|2009/10/14|2010/08/17|2011/09/13| | | |・・・・ 03|鈴木|yyyy/mm/dd|2010/10/15|2011/10/12|2012/10/17| | | | |・・・・ 【Sheet2】 ID|名前|2004|2005|2006|2007|2008|2009|2010|2011|・・・・ 01|田中|数式A|数式B|数式|数式|数式|数式|数式|数式|・・・・ 数式AのところでSheet1にある同じIDの人の2004年の日付、 数式BのところでSheet1にある同じIDの人の2005年の日付を抽出できるようにしたいです。 同じIDの行内で同じ年が重複することはありません。 該当がない場合はIFERRORで空欄にしようと思っています。 お力添えをお願いいたします。

  • VBA 複数条件でデータを抽出する場合

    sheet1に下記のような(例)データベースがありA~BS列までデータが入力されています。 A  B C  D  E   F  G  H I J  BS 1 ○○様 ○○  2名  車   可 埼玉 *** *** *** 2015/7/1 2 ○○様 ××  3名  車  不可 東京 2015/8/1 3 ○○様 ■■  2名  電車 不可 愛知 2015/8/12 4 ○○様 □□  4名  バス  可  新潟 2015/7/13 5 ○○様 ○×  3名  バス  可  宮城 2015/6/1 6 ○○様 ■□  4名  車  不可 東京 2015/8/21 7 ○○様 □○  2名  バス  可  山梨 2015/8/7 「sheet1」のデータでBS列の期間(YYYY/MM/DD~YYYY/MM/DD)とG列の地域名(例:東京)を抽出条件とし、 抽出された結果のsheet1のA列~G列、BS列のみ(H列~BT列は不要)をSheet2のA11以下へ表示するマクロを組みたいと考えています。 A  B  C  D  E   F  G   BS 2 ○○様 ××  3名  車  不可 東京 2015/8/1 6 ○○様 ■□  4名  車  不可 東京 2015/8/21 複数条件下の抽出の場合、どのようなVBAのコードを使用すれば良いでしょうか。 宜しくお願いします。

  • 条件に合う行を別シートに抽出

    エクセルで条件に合う行を別シートに抽出したいです。  出荷確認シートとします。     A    B   C    D    E    K    M   N   O     P   抽出列  No.  件名  工事店  出荷  確認  担2  担3  名称   作業列・・・・OKで番号 30行 OK 101-1 ふじ  あああ        OK     松田  みかん    1            以降     101-2 ふじ  あああ              松田  りんご                OK 102-1 ビル  いいい       OK     伊藤  いちご      2            OK 103-1 神社  ううう         OK     神田  アイス     3               103-2 神社  えええ               神田  レモン                    ・  ・    ・       ・      ・    ・     ・         ・  ・    ・       ・      ・    ・     ・        OK   ・  ・    ・             OK    ・     ・       4 上記がSheet1に入力されています。 条件1  ・Sheet1K列 確認でOKを入力された行をSheet2に抽出したいのです。       B   C     D    E    M    N    O            No.  件名  工事店  出荷   担2   担3  名称          101-1 ふじ  あああ            松田   みかん        102-1 ビル  いいい           伊藤   いちご              103-1 神社  ううう             神田   アイス  条件2  ・Sheet1K列 随時OKを入力された行をSheet2に追加           101-1 ふじ  あああ         松田   みかん        101-2 ふじ  あああ         松田   りんご       102-1 ビル  いいい        伊藤   いちご             103-1 神社  ううう         神田  アイス       103-2 神社  えええ          神田  レモン             条件3  ・出荷を確認後はその行を削除しますので、残りのOK分をSheet2に抽出後したもの       101-1 ふじ  あああ         松田  みかん         101-2 ふじ  あああ         松田  りんご       103-1 神社  ううう          神田  アイス とSheet2に表示させたいです。 A抽出列には=IF(B30="","",TEXT(B30,"OK"))を入力し、Sheet1P作業列がK列に OKを入力されるたびに番号が記入され、順序を行頭から若番として、A抽出列とP作業列を参照等 しながらと頭の中ではイメージしていますが・・・。 過去の分を検索したら、似たようなので逆のパターンがありました。 エクセルは2000です。文字位置が上手く合ってないですが 皆様のお知恵をお願いいたします。

  • エクセル 2枚のシートの違いを抽出したい

    目を通していただきありがとうございます。 エクセルは全く詳しくないため、質問させていただきます。 sheet1とsheet2に各2000行ほどの表があります。 sheet1 A列(商品) B列(産地) C列(定価) D列(特価) E列(数量)  みかん    愛媛     100      80       500  みかん    静岡     120      85       400  オレンジ  アメリカ     150      90       100   sheet2 A列(商品) B列(産地) C列(定価) D列(特価) E列(数量)  みかん    愛媛     100      80       300  オレンジ  アメリカ     150     100       100  いちご     福岡     300     150       100  みかん    静岡     120      70       400 それぞれ「1行目のみかん」はA~D列まで同じ値で、E列のみの違いですので、 抽出の必要はありません。 sheet2の3行目のいちごはsheet1にはありませんので、これも抽出の必要はありません。 sheet1の2行目とsheet2の4行目のみかん、 sheet1の3行目とsheet2の2行目のオレンジ、はD列(特価)の違いがあります。 この<D列のみ違いがある>ものを行単位でsheet3に抽出したいのですが、 何か良い方法(関数等)がありましたら、教えていただけないでしょうか? なお、表題に「エクセル」と書きましたが、実際はKingsoftのSpreadsheets 2012を使用しています。 基本的な関数でしたらそのまま使えるようですので、エクセルとして書かせていただきました。 よろしくお願いいたします。     

  • エクセルVBA シート1からシート2へ転記したい

    シート1のデータはそのままで、 シート2に編集して転記したいです。 シート1にはA列からI列までデータが入っています。 行数は都度変わりますがデータは3行目から始まり 大体500行くらいです。 転記方法は シート1のD列→シート2のA列 シート1のE列→シート2のB列 シート1のF列→シート2のC列 シート1のC列→シート2のD列 でシート1のD列の値が同じ場合は 転記先のシート2の行数は増やさずにシート1のC列の値を 同じ値のF列内にカンマでつないで転記したいです。 でそのつないだ合計数をシート2のE列に表示したいです。 イメージ C  D    E     F ------------------------ A1 みかん 国内 Sサイズ A3 みかん 国内 Sサイズ D6 みかん 国内 Sサイズ D9 りんご 国内 Mサイズ G7 りんご 国内 Mサイズ F5 バナナ 海外 Lサイズ G1 バナナ 海外 Lサイズ A2 いちご 国内 Sサイズ D8 いちご 国内 Sサイズ F3 いちご 国内 Sサイズ H2 いちご 国内 Sサイズ   ↓ A    B    C      D     E ------------------------------------------- みかん 国内 Sサイズ A1,A3,D6   3←3個 りんご 国内 Mサイズ D9,G7     2←2個 バナナ 海外 Lサイズ F5,G1     2←2個 いちご 国内 Sサイズ A2,D8,F3,H2  4←4個 上記例の場合は元データは11行ですが編集後は4行です。 配列は自力で作成できないので考え方を教えていただきたいです。 構文をそのまま書いていただいても大変助かります。 Do~LoopかFor~Nextで上から順最終行まで処理で シート1からシート2へ転記する構文をかいて D列の値が直前に処理した値と同じ場合は 転記はしないでC列の値を変数1に代入し シート2の該当行のD列も変数2に代入し 変数1&","&変数2で対象行のD列に転記と考えましたが うまくできませんでした。 またシート2のE列の求め方ですが、上記変数1,2に代入した後に 変数3=変数3+1とかの文でカウントし、 その値を転記すればいいのでしょうか? すいません。今日1日頑張ってうまくできず 上手く説明できません。 よろしくお願いします。