• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで、データのある行だけを抽出したい。)

エクセルでデータのある行を抽出する方法と関数について

このQ&Aのポイント
  • エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出する方法と関数について教えてください。
  • E列が空白でない行のみを抽出する方法は、フィルタオプションを使用する方法やマクロを登録する方法がありますが、データが置き換わると困るため、A~H列に関数を入れる方法がおすすめです。
  • A~H列に関数を入れておくことで、後からデータを追加しても列がずれず、Sheet2のI列以降で備考などを入力することも可能です。

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

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

最も分かり易く計算にも負担のかからない方法は作業列を作って対応することです。 例えばシート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)))

utarin
質問者

お礼

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

その他の回答 (1)

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

既に回答済みにつき、マクロ例です。 (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

utarin
質問者

お礼

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

関連するQ&A