- ベストアンサー
エクセルでデータのある行を抽出する方法と関数について
- エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出する方法と関数について教えてください。
- E列が空白でない行のみを抽出する方法は、フィルタオプションを使用する方法やマクロを登録する方法がありますが、データが置き換わると困るため、A~H列に関数を入れる方法がおすすめです。
- A~H列に関数を入れておくことで、後からデータを追加しても列がずれず、Sheet2のI列以降で備考などを入力することも可能です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
最も分かり易く計算にも負担のかからない方法は作業列を作って対応することです。 例えばシート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)
- 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列に入力すると自動で貼り付けられるんですね。 フィルタオプションを利用したマクロでは、マクロを実行しなければいけないことと、データがそのたびに上書きされてしまうことから使えないと思ったのですが、このような方法もあるのですね。 勉強になりました。
お礼
できました! 似たような関数を使っているのを他のページで見て試したのですが、参照範囲などの変更の仕方が間違っているのかうまくいかず…。 困っていたので助かりました。 なぜこのような式になるのかまだ理解できていないので、関数を調べて勉強しようと思います。 ありがとうございました。