• 締切済み

エクセル 関数 別シートへの抽出

エクセル関数について質問します。 「数値の入ったセルだけを、その行ごと丸々別シートに抽出する方法」 について教えてください。 例、C列に空白セルと1、2や3など、数値の入ったセルがあります。空白セル以外の数値の入ったセルを、その行ごと別シートに抽出したい。 C3とC5に数値が入ってる→3行目と5行目を別シートに抽出する。 このようなことは関数でできるのでしょうか? マクロでないと無理でしょうか? お力をお貸しください。 よろしくお願いします。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.6

No5の続報 No5は作業列がSheet2のA,B列(2つ)ですが、 作業列をSheet2のA列(1つ)だけとする案も考えてみました。 A1=IF(ISNUMBER(Sheet1!A1),1,0.01) A2=IF(ISNUMBER(Sheet1!A2),INT(A1)+1,A1+0.01) 以下、必要数下方向に複写 B1=IFNA(INDEX(Sheet1!A:A,MATCH(ROW(),A:A,0),0,1),"") 以下、必要数下方向に複写

5stereophonics5
質問者

お礼

ご回答ありがとうございました! ひとつ勉強になりました。 また機会がございましたらよろしくお願いします!

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.5

出来合いの関数だけでという条件なら、 (作業列を2つ使いますが) 添付画像のような状態で 次のように関数を埋めることで実現できます。 以下、Sheet2に埋める関数式です。 A1=IF(ISNUMBER(Sheet1!A1),Sheet1!A1,"") 以下、必要数下方向に複写 B1=IF(A1<>"",1,0.01) B2=IF(A2<>"",INT(B1)+1,B1+0.01) 以下、必要数下方向に複写 C1=IFNA(INDEX(A:A,MATCH(ROW(),B:B,0),0,1),"") 以下、必要数下方向に複写

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

マクロの例です。 Sheet1のC列の空白セル以外のデータを列ごとSheet2に転記します。 空白以外は数値しか入っていない(文字はない)と考えています。 Sub Example() Dim c As Range Dim Sh1 As Worksheet, Sh2 As Worksheet Set Sh1 = Sheets("Sheet1") Set Sh2 = Sheets("Sheet2") For Each c In Sh1.Range(Sh1.Cells(1, "C"), Sh1.Cells(Rows.Count, "C").End(xlUp)) If c.Value <> "" Then Sh2.Rows(Sh2.Cells(Rows.Count, "C").End(xlUp).Row).Offset(1, 0).Value = Sh1.Rows(c.Row).Value End If Next Set Sh1 = Nothing Set Sh2 = Nothing End Sub

5stereophonics5
質問者

お礼

ご回答ありがとうございました! これを機にマクロの勉強を始めてみたいと思います。 また機会がございましたらよろしくお願いします!

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.3

>このようなことは関数でできるのでしょうか? 関数は抽出先のセルへ数式を設定して数式の計算結果を表示する(代入する)という仕組みになっていますので抽出元の行番号を算出しただけでは抽出先の全ての列へ書き出せません。 >マクロでないと無理でしょうか? マクロ(VBAプログラム)の場合は抽出元の行番号を検出して、その行の全ての列を抽出先の行へ値を書き出せます。 あなたのやりたいことはVBAで行単位で他のシートへ書き出す方が効率的かと思います。

5stereophonics5
質問者

お礼

ご回答ありがとうございました!

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.2

 C1:1  C2:空白  C3:3  C4:空白  C5:2 例えば以上のようなデータを、別の場所(例えばD列)に  D1:1  D2:3  D3:2 のような形で貼り付けたい、と解釈しました。 マクロを使わず手動に行う場合、以下の方法があります。 1.C列にフィルタを設定する。 2.フィルタで空白セルを非表示にする。この際、1行目はタイトル行としてフィルタの範囲外になる事に注意。 3.C列を選択する。 4.Alt+;(右下辺り、[+]とか[れ]のボタン)で、選択部分から非表示部分のみを抽出する。 5.選択範囲をコピーして、任意の場所(例えばD1セル)に張り付け。 6.フィルタが不要ならば解除する。 これ以上(複数列を一気に処理するなど)になると、マクロを使う必要が出てくると思われます。

5stereophonics5
質問者

お礼

ご回答ありがとうございました! また機会がございましたらよろしくお願いします!

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

例示データとして、Sheet1のB1:B 10に -  <ー 以下では -は実際は空白セルのこととします a 12 - 34 - c - 65 - Sheet2(別シート)のC1セルに =IF(OR(ISNUMBER(Sheet1!B1)),Sheet1!B1,"") と入れてC10まで式を複写。 結果 12 34 65 となります。 ーー セルの値について 数字か ISNUMBER関数 文字列か ISTEXT関数 ブランクか ISBLANK関数 などがあるので、OR関数で組み合わせたらどうか。 ただし空白セルが0に置き換わらないように式の工夫が必要かもしれない。

5stereophonics5
質問者

お礼

ご回答ありがとうございました! また機会がございましたらよろしくお願いします!

関連するQ&A