• ベストアンサー
  • 困ってます

エクセルで、データのある行だけを抽出したい。

エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出したいと思っています。 Sheet2にあらかじめ関数を入れておく方法にしたいため、関数について教えてください。 タイムテーブルで予定を管理するような表で、A~Hまでにデータが入っています。 予定を入れる際にはE列には必ず入力をするため、E列が空白でない行のみを抽出したいです。 A|B|C|D|E|F|G|H 月|日|時間|… 11|22|10:00|… 11|22|10:30|… 時間枠は10:00~17:00の30分刻みで、1日15行使用するので、1年で5475行まで使用します。 1行目はタイトル行なので、データは2行目から入力しています。 フィルタオプションで抽出する方法や、それをマクロで登録しておく方法は分かったのですが、あとから予定を追加することがあるため、マクロを実行する度にデータが置き換わると困ってしまいます。 また、抽出したSheet2のI列以降には備考などを入力したいため、やはり後から列がずれると困るため、A~H列に関数を入れておく方法で実行したいと思います。 よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • KURUMITO
  • ベストアンサー率42% (1835/4283)

最も分かり易く計算にも負担のかからない方法は作業列を作って対応することです。 例えばシート1のJ列を作業列としてJ2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(E2="","",MAX(J$1:J1)+1) シート2では1行目に項目名が有るとしてA2セルには次の式を入力してH2セルまでオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet1!$J:$J),"",INDEX(Sheet1!$A:$H,MATCH(ROW(A1),Sheet1!$J:$J,0),COLUMN(A1)))

共感・感謝の気持ちを伝えよう!

質問者からのお礼

できました! 似たような関数を使っているのを他のページで見て試したのですが、参照範囲などの変更の仕方が間違っているのかうまくいかず…。 困っていたので助かりました。 なぜこのような式になるのかまだ理解できていないので、関数を調べて勉強しようと思います。 ありがとうございました。

その他の回答 (1)

  • 回答No.2
  • mu2011
  • ベストアンサー率38% (1910/4994)

既に回答済みにつき、マクロ例です。 (1)シート1のJ1にE列の見出し名、J2に<>を入力    シート2の1行目から表示する為、シート1の空きセルとしていますので    変更する場合、コードのCriteriaRange:=Sheets("sheet2").Range("j1:j2"),    を変更して下さい。 (2)シート1タブ上で右クリック→コードの表示→以下のコードを貼り付け    このマクロはシート1のイベントプロシージャでE列のセルが変更された場合、    シート2に自動的に貼り付けるようにしています。 ■サンプルコード Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("E:E")) Is Nothing Then Exit Sub With Sheets("sheet2") .Columns("A:H").ClearContents Sheets("sheet1").Columns("A:H").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("sheet1").Range("J1:J2"), CopyToRange:=.Range("A1"), Unique:=False End With End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 VBAは少し本を読んだ程度でまだあまり知識がないのですが、こちらの方法も試してみます。 都度マクロを実行するのではなくて、E列に入力すると自動で貼り付けられるんですね。 フィルタオプションを利用したマクロでは、マクロを実行しなければいけないことと、データがそのたびに上書きされてしまうことから使えないと思ったのですが、このような方法もあるのですね。 勉強になりました。

関連するQ&A

  • Excel 空白行を上に詰めるマクロ

    関数を使用して、sheet1からsheet2に必要なデータを抜き取りました。 sheet2のセルには関数が入っています。 sheet2の抽出データには1行単位(まれに2~3行続けて)空白が発生します。 この行を削除し、かつ上に詰めて表示をしたいのですが、下記の条件で実行可能でしょうか? (例) sheet1 ⇒ sheet2   A   B   C     A  B  C 1 あ  い  う   1 あ  い  か 2        か   2 (空白行) 3 き  く   け    3 き  く  し   4 こ  さ   し   4 (空白行) ●2行目、4行目を削除し、且つ5行目以降に入力されている関数は削除したくない ●空白行削除のマクロは自動?(sheet1のデータを変更したら)で実行できるようにしたい よろしくお願いします。

  • Excelをデータベースのように使用した場合 データの抽出

    Excelをデータベースのようにして使用している場合について教えて欲しいことがあります。  ・Sheetを2つ作成したとします。  ・Sheet1はたくさんのデータが入っているシートです。  ・Sheet1の名前を仮に『Data』とします。  ・Sheet2はSheet1から必要なデータを抽出してきて並べるシートです。  ・Sheet2の名前を仮に『Report』とします。  ・『Data』のA列には1~200までの数字が入力されています。  ・その数字は ランダムである上に 重複していることもあります。  ・例えばA1には「1」が入力されていて A2には「2」が入力されています。  ・しかし その後A3にもA4にもA5にも「2」が入力されています。  ・同様にA6~A15までは「3」が入力されているのです。  ・このようにA列の数字は 同じ数字が何度も重複しており その重複には規則性はありません。  ・『Report』シート上で『Data』シートからデータを抽出したいのですが A列に「1」と入力されているデータだけを取り出すのなら「VLOOKUP」でもできますよね・・・・  ・しかし A列に「2」と入力されているデータを「VLOOKUP」関数で選んでも その先頭行のデータしか読み込んできません。  ・『Data』シートのA列に入力している数字から 必要な数字が入力されている行のデータだけを 全て『Report』シートに並べようとした場合 手作業で行うとすると・・・ 『Data』でA列が「1」のデータだけを選び,それを『Report』シートに貼り付ける。次は「2」で実行する。・・・・・という作業を200回繰り返すことになりますが 簡単に行うにはどのようにすればいいのでしょうか? マクロについては あまり詳しくないので できれば関数を使いたいのですが 無理でしょうか? マクロを使うのであれば 分かりやすく教えていただきたいのですが・・・ 勝手なお願いで申し訳ありませんが よろしくお願いします。

  • EXCELで、ある行のみ抽出したい(マクロ・関数)

    こんにちは! マクロまたは関数を使って、列DがA1のとき、次に続く行で、かつD1の行のみを残したい(もしくは新しいワークシートにコピー)と考えています。 なお、A1の入る行はいくつもあり、それらすべてを抽出できたらと思います。 何か良い方法はありますでしょうか? よろしくお願いいたします。

  • エクセルのデータ抽出

    会社で注文のあった業者のリストをエクセルで 作ってて450行くらいあります。 各項目には会社名や内容や価格などありますが その中には空白のセルや行もあります。 そこからA列に自分が抽出したい行に印をいれて フィルタをかけたところ、空白があるためか すべてを抽出できません。1行1行抜き出すのもいいのですが 今後、データも増えることを考えると 何かいい方法で抽出したいのですが、 どうしたらいいでしょうか? やはりマクロをつかうのでしょうか? すみませんがよろしくお願いいたします。

    • ベストアンサー
    • Mac
  • excelで条件に一致するデータ全てを抽出する方法

    現在、エクセル2003を使用しています。 A列・B列・C列にデータが入力されています。 ただし、空白セル(空白行)もあります。 A列に“@Name”とデータ入力がある場合 同じ行のC列の値を抽出したいと思います。 A列に@Nameは複数ありますが、C列の値は それぞれ違いますので、データの集計先はF列に 全て抽出をしたい。 なにか良い方法(VBAや関数)がありましたら 教えてください。

  • EXCEL:ゼロ以外のデータを詰めて抽出する方法

    初めて投稿します。よろしくお願いいたします。 EXCEL2000を使用しています。 オートフィルタを使わずに 関数でデータを抽出する方法で悩んでいます。 下記<データ>が存在しています。 2行目がゼロ以外のものを、 別シート<抽出>に上から詰めて抽出したいのです。 <データ>   A列 B列 C列 D列 E列 1行 1  2  3  4  5  ←日付 2行 5  3  0  2  0  ←数字 <抽出>別シート   A列 B列  1行 1  5 2行 2  3 3行 4  2   ↑  ↑   日付 ゼロ以外 関数については中級レベルだと思います。 いろいろ試したのですが、関数を組み合わせてもなかなかうまくいきません。 どなたかご教授いただけないものでしょうか? よろしくお願いいたします。

  • EXCEL データをコピーして別シートの最初の空白行に貼り付けたい

    EXCEL データをコピーして別シートの最初の空白行に貼り付けたい Sheet1はA列からR列までを使ったシートで、1行目は各項目があり、2行目からは当月のデータが入力されています。 Sheet2はSheet1の1行目と同じようにA列からR列までが項目になっていて、期中のデータを付け足していきたいと思っています。 マクロの記録でやってみたのですが、前月の最後の行(貼り付ける最初の空白行)の認識の仕方が分からず、Sheet2への貼付がうまくいきません。 どのような方法でやったらいいのか教えて下さい。

  • マクロを使用し、EXCELのデータから必要な部分を取り出し2つのsheetに貼り付けたい

    条件 EXCELのデータ A列からL列まで 複数行(行数は、決まっていない) (例) 40行ほどあるデータを見て 1行目から10行目までをsheet1に 12行目から20行目までをsheet2に貼り付けたい場合。 11行目のA列(空白になっている)に手入力で「a」と入力 21行目のA列(空白になっている)に手入力で「b」と入力し、 1行目から「a」のある行までをコピーし、sheet1に貼り付ける 「a」のある行より1行下から「b」のある行までをコピーし、sheet1に貼り付ける 以上のことをマクロで実行する方法を教えて下さい。

  • エクセルで最新データのみを抽出したいのですが・・・

    タイトルにあるとおり、エクセルで最新データのみを抽出するような関数があればと思い質問させていただきます。 シート1     A列   B列   C列   D列 ・・・ 1行目      佐藤   田中   伊藤  2行目 1日目   ○      3行目 2日目   △   ■    ☆ 4行目 3日目       ○ ・ ・ ・ ・ 18行目 18日目   ■ 19行目 19日目   ○   △   ○  20行目 20日目   ◎   ☆ と、いうようなシートがあったとします。 シート1ではこのように、毎日新しいデータ(記号) が入力されていくとします。 シート2      A列  B列  C列  D列  E列・・・ 1行目  ◎   ○   ■   ☆   △    2行目  1    2    1    1    1 と、いうようなシートがあったとします。 シート2ではシート1で入力されたデータをカウントしていくとします。 この場合、シート1での1行目の各氏名は関係なく、ただ記号のみをカウントしていくものとします。 ただ、カウントするだけの場合でしたらCOUNTIFでいけると思います。 タイトルにあるとおり、最新データからのみカウントしたいと思っているのです。 上のシート2では例として、18~20日分のカウントをしておりますが、実際には10日分程度をカウントしたいと思っております。 ですので、このシートを例にすると20日が最新とした場合 11~20日分の記号をカウントし、そして21日に新たなデータが入力された場合、12~21日分の記号を新たにカウントしたいわけです。 このようなケースにおける関数をご存知の方どなたかご助力いただけますと幸いです^^;

  • エクセル 複数条件抽出について

    エクセル2013を使用しています。 データシートより複数条件に当てはまるデータを 別のシートへ必要な項目のみ抽出する方法(関数orマクロ)をお教え下さい。 データシート:A列からU列まで様々なデータが入力されている。 抽出条件:H列とN列 抽出する項目:C列・I列・M列・O列・Q列・R列・S列 (抽出する項目は増える可能性有) 複数条件の抽出はフィルタオプションで出来たのですが、 抽出が必要な項目を指定する方法が分かりませんでした。 宜しくお願いします。