• ベストアンサー

EXCELで条件に合わない行を削除して詰めて新しいシートに表示したいのですが

A  B   C   D 1 任意 任意 合格 2 任意 任意 FALSE 3 任意 任意 合格 4 任意 任意 FALSE PC2台ありますのでEXCEL2003か2007が操作環境です. 上記のようなシートがあった場合に(Dにはif関数が入力されています)別のシートにFALSEの行のみ削除して1行目から詰めて表示させたいのですが,それってどうやったらいいのでしょうか?if関数使うとしても詰めるのはできそうにないし・・・VBAですか?どうしてもわかりませんでしたので教えていただきたいです.よろしくお願いいたします.

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

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

解答No1です。 FALSE以外の場合に別のシートに表示させるのでしたら、先に示したシート1でのE2セルへの入力の式を次のようにして下方にオートフィルドラッグすればよいでしょう。 =IF(A2="","",IF(D2<>"FALSE",MAX(E$1:E1)+1,"")) シート2の式は先に示した通りです。

maomao0115
質問者

お礼

できました!ありがとうございます. マクロよりもこれの方が何も操作しなくていいからいいですね. 皆さん色々教えてくださりありがとうございました.

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (8)

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.8

表示させたくない条件はFALSEのみなので,オートフィルタでは難しそうです. オートフィルタで D列のプルダウンから(オプション...)を選択 【FALSE】【と等しくない】 を抽出 すればできますよ。

maomao0115
質問者

補足

できました!ありがとうございます.この操作をマクロ記録すればいいような気がしました.

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.7

これまでの経過を見ていると、エクセルの基本操作を正しく理解できていないような気がします。 まず基本的なことですが、なぜ「FALSE」などと分かりにくい表示になっているのでしょうか? 通常なら、Falseの場合は空白("")を表示するようにしたほうが良いと思うのですが・・・ また例示のデータですが、1行目に項目名があるのでしょうか? 項目名が入っていれば、まず基本操作のオートフィルタで該当データを抽出して、それを別シートに、そのまま(データ範囲を大きめに選択して)コピー貼り付けするのが簡単です。 >表示させたくない条件はFALSEのみなので,オートフィルタでは難しそうです. オートフィルタの▼をクリックして表示される「オプション」を選択し「False」と「等しくない」条件で抽出します。 >VBAですか?どうしてもわかりませんでしたので教えていただきたいです. 上記の操作を「新しいマクロの記録」でコードを記録します。 2003の場合、「ツール」「マクロ」「新しいマクロの記録」でリスト範囲のセルにカーソルを移動し、項目名を含めたデータ範囲を大きめに選択し(今後のデータの追加に対応できるように)、「データ」「フィルタ」「オートフィルタ」で上記のオプション操作でFalse以外のデータを表示させます。 抽出されたデータを下の空白行を含めて大きめに選択して、「コピー」し、抽出データを表示したいセルに「貼り付け」ます。 最後に「データ」「フィルタ」でフィルタモードを解除すれば(必要なら抽出データシートに移動)、別シートに該当データを表示させることができます。 >最終的にFALSEだった場合には削除して詰めて表示させたいので,オートフィルドラッグが使えません.シンプルに「FALSEの場合表示しない」という関数でもできるのでしょうか? この意味がよくわからないのですが「合格」以外の値もあるということでしょうか? その場合は、私の回答の補助列を使うときの関数の場合なら、たとえば以下のように変更します。 =COUNTIF($E$1:E1,"<>False")*(E1<>"") いずれにしろ、例示のデータは、表のレイアウトを含めて実際のリストに対応したデータにしないと(できる限り実際のデータをコピー貼り付けする)、回答者が混乱するだけでなく数式でも的確な回答ができませんので注意してください。

maomao0115
質問者

お礼

何度もありがとうございます!なるほど.FALSEは空白にしたほうがいいのですね.マクロも使ってやってみます. >例示のデータは、表のレイアウトを含めて実際のリストに対応したデータにしないと(できる限り実際のデータをコピー貼り付けする)、回答者が混乱するだけでなく数式でも的確な回答ができませんので注意してください。 この点は非常に納得ができました.いろいろとご迷惑をおかけしました.ありがとうございました.

全文を見る
すると、全ての回答が全文表示されます。
  • myRange
  • ベストアンサー率71% (339/472)
回答No.6

なぜオートフィルターを利用してできないのか分かりませんが。。。 次のようなことではないのですか? D列にIFがあり、 条件が真の結果が複数ある、例えば、X,Y,Z 条件が偽の結果は、False 上記で、False以外を別シートに転記する で、あれば、 (1)表を別シートにコピー、又は、シートごとコピーする (2)コピーしたシートのD列で、Falseのオートフィルターをかける (3)抽出されたデータのみ(見出しは除く)選択      > 右クリック          >行の削除             >オートフィルターの解除 これでいいような気もしますが。。。 以上です。  

maomao0115
質問者

お礼

ありがとうございます!このやり方でもできました. オートフィルターをあまりよくわかっていませんでした.

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

No4ですが、FALSEを表示するのではなく、「合格」を表示したかったのですね。 その場合の一発で表示する数式は以下のように変更する必要があります。 =INDEX(Sheet1!A:A,SMALL(INDEX((Sheet1!$D$1:$D$10=FALSE)*1000+ROW($A$1:$A$10),),ROW(A1)))&"" 補助列を使う場合は元シートのA列に =COUNTIF($E$1:E1,"合格") 表示したいシートの数式には少し意味のない部分が入っていたので、ついでに修正すると =IF(MAX(Sheet1!$A:$A)>=ROW(A1),VLOOKUP(ROW(A1),Sheet1!$A:$E,COLUMN(B:B),0),"")

maomao0115
質問者

お礼

ありがとうございます.やはりA列を変えるのですね.

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

このような場合はオートフィルタを利用するのが基本操作だと思いますが、関数で表示したい場合、表示データ数が少なければ以下のような数式で一発で該当データを表示することができます(元シートがSheet1の場合)。 =INDEX(Sheet1!A:A,SMALL(INDEX((Sheet1!$D$1:$D$10<>FALSE)*1000+ROW($A$1:$A$10),),ROW(A1)))&"" 表示データ数が多い場合は、補助列を使う方法が無難です。 元シートのA列に1行列を挿入し、このA1セルに以下の式を入力して下方向に適当数(今後のデータの増加に対応できるように)オートフィルします(このA列は最終的に非表示にする)。 =COUNTIF($E$1:E1,FALSE) 表示したいシートには以下の式を入力し右方向に4つ、下方向に適当数オートフィルします。 =IF(MAX(Sheet1!$A:$A)>=ROW(A1),VLOOKUP(ROW(A1),Sheet1!$A:$E,COLUMN(Sheet1!B:E),0),"")

maomao0115
質問者

お礼

ありがとうございます.やってみましたが,FALSEの行だけが別シートにでました.

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

Googleででも。「imogasi方式」で照会すれば、私のこのコーナーに回答した、条件による抜き出し問題が多数出てくる。 ぜひそれを参考に。その際他の回答者が回答された、方式回答も出てくる。代表的なものは作業列を使わずSMALL関数などを使うやり方である。式が長いのと、初めての人には式の理解が難しかろう。 関数の組み合わせとしては最難関の1つだろう。 VBAでやれば簡単だが、この同類の質問をする質問者はVBAの経験が無い人が多い。関数では式が複雑になって、抜き出し問題は不得手だと思うのでVBAでやればと思う。関数は即時反応の良い点もある。それだけに、行数が多いと動きが重くなるかも。 「imogasi方式」は作業列を1列使う。そして条件に合う行に、上の行から連番を関数で振る。その連番を元に、他シートなりに、他シートの行番号と関連させて、元データシートのデータを参照してデータを持ってくる。条件に合わないものは、持ってこない。従って結果として、「データを捨てた」ことになる。 元データの連番1  -->他シートの第1行目 元データの連番2  -->他シートの第21行目 ・・・ に持ってくる。元シートデータで、連番1、2・・などを探すにはMATCH関数を使う。

maomao0115
質問者

お礼

ありがとうございます.imogasi方式で調べてみます!

全文を見る
すると、全ての回答が全文表示されます。
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

【オートフィルタ】でD列をフィルタかけて、別のシートにコピペする。

maomao0115
質問者

お礼

ありがとうございます.表示させたくない条件はFALSEのみなので,オートフィルタでは難しそうです.

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

D列にFALSEなどのデータがあるのでしょうか。なお、すべてのデータが2行目から下方にあるとします。そうでしたらE2セルに次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(D2="合格",MAX(E$1:E1)+1,"")) 今のシートをシート1としてまとめのシートは次のようにします。 1行目はシート1の1行目と同じにします。 A2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(OR(A$1="",COUNTIF(Sheet1!$E:$E,ROW(A1))=0),"",INDEX(Sheet1!$A:$D,MATCH(ROW(A1),Sheet1!$E:$E,0),COLUMN(A1)))

maomao0115
質問者

補足

ありがとうございます!例でやってみたらできました!すごい^^ 実際はD列にのみFALSEがあり,FALSEでないデータは1つのセルにIF関数を複数使っていて複数あり,さらに行ごとにIF関数の内容は違い,最終的にFALSEだった場合には削除して詰めて表示させたいので,オートフィルドラッグが使えません.シンプルに「FALSEの場合表示しない」という関数でもできるのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • マーク入力セルがある行は非表示

    Excelシート1~10行のうち1.3.7.9行のD列にIF関数により"●"が入力されています。 "●"の1.3.7.9行をVBAコード入力で非表示にならないでしょうか。解る方、宜しくお願いたします。

  • EXCELのFALSE行削除について

    EXECLでif文実施結果でFALSE行が発生してしまいます。 この行を自動で消す方法はありますでしょうか? マクロで実施する方法でもご存知でしたらご教授願います。 例 sheet1               sheet2   A  B  C  D            A      B      C      D 1 11 12  a  x         1 11     12      a     あいう      2 11 12  b  x   ⇒     2 FALSE FALSE   FALSE   FALSE 3 11 12  a  x         3 11     12      a     あいう 4 11 12  b  x         4 FALSE FALSE   FALSE   FALSE sheet2A1にif=('sheet1'!C1="a",'sheet1'!A1) B1にif=('sheet1'!C1="a",'sheet1'!B1) C1にif=('sheet1'!C1="a",'sheet1'!C1) D1にif=('sheet1'!C1="a","あいう") として、これを1行目のif文を下にコピーして使用しています。 又、もっと効率のいい方法がある! と言った答えもいただけたら非常に助かります。 よろしくお願いします。

  • Excel VBA Sheet2で指定した条件でSheet1の行削除

    Sheetが2つあるExcelブックがあります。 Sheet2で検索条件(列とキーワード)を指定し、 この条件でSheet1を検索、 Sheet1で検索にヒットした行を行削除したいと考えています。 汎用性を高める為、Sheet2で指定する検索条件は可変とし、 検索対象とする列とキーワードは任意のものを必ず指定(""は無し)。 列&キーワードをひとつの検索条件として、 Sheet2の2行目~最終行までLoopしたいのです。 InStrを使用するなど、部分的には分かるのですが、 2つの条件を同時に変えながらLoopさせる方法が 色々試してみましたが、どうしても分かりません。 VBAに詳しい方、同様の処理をしたことがある方、 どうか助けてください!宜しく御願い致します。 [Sheet1] ・・・ 元データ     A   B   C ---------------------------- 1   あ ---------------------------- 2   い   該当 ---------------------------- 3   う       閉鎖 ---------------------------- 4   え   該当 ---------------------------- 5   お ---------------------------- [Sheet2] ・・・ 行削除する範囲とキーワードを指定。     A   B ---------------------------- 1   列   キーワード ---------------------------- 2   A   あ ---------------------------- 3   B   該当 ---------------------------- 4   C   閉鎖 ---------------------------- [求めている結果] 1, 2, 3, 4行目が削除される

  • [excel]違うシートの行番号を取得したい

    こんにちは。 質問させて頂きます。 使用ソフトはexcel2010です。 やりたいことは、 ・違うシートの行番号を、違うシートに挿入した関数の中に挿入したい です。 現在、「データ」「入力」という2つのシートがあります。 「入力」というシートのP127のセル中に、 「=IF(F127="","",VLOOKUP(F127,リスト,2,FALSE))」という関数が入っています。  ※「データ」シート内に、{リスト}と名前を定義づけた所を参照しています。 「データ」というシートの{リスト}と名前を定義したところに、 「=ROUNDDOWN(((入力!D127+入力!I127+入力!K127入力!K127)*10)*0.9,0)」という関数が入っています。 このままだと、正常に計算してくれるのですが、「入力」のP128のセルに移ったとき、 「データ」の関数を 「=ROUNDDOWN(((入力!D128+入力!I128+入力!K128入力!K128)*10)*0.9,0)」 と言う具合に、「入力」の足し算するセルを移動させたいのですが、自動的にセルの番地を変えることが出来るのでしょうか? 「入力」の関数を入れる行数と同じ行番号で「データ」の足し算するセルの行番号を振り当てたいです。 分かりにくい説明ですが、お答えお待ちしております。 どうぞよろしくお願い致します。

  • EXCEL VBA  特定シート以外のシート削除

    同一のブック内に存在する複数シートのうち任意のシートのみを削除することはVBAで可能でしょうか? (例)  消したくないシート:TEMP1、TEMP2の2シート  消したいシート:1、2、3....といった連番シート (VBAで作成したシート) 環境は、WIN XP PRO でEXCEL2003を使用しています。 宜しくお願い致します。

  • Excelシートの改行削除

    環境:Excel2000+VBA Excelシートに入っているセル内の改行を全て削除 したいのですが、よい方法はないでしょうか? よろしくお願いします。

  • Excelで空白行を削除したい

    2500行位使用しているシートのなかに、どのセルも空白になっている不要な行が300行くらい混ざっています。 この行を自動的に削除するにはどうすれば良いでしょうか。 ただ、その行のA~Eセルは空白でもFセルに値が入っているなど完全に空白でない行は削除できません。 メニュー、関数、VBAなど有れば教えてください。

  • Excel 参照行の削除でも可変しない関数

    Excel 参照行の削除でも可変しない関数 同じ形式で、数シートにわたり入力された文字をまとめた表を別のシート(シート1)に作成しています。 シート2以降の参照元データーは一定のルールで入力されていますが、削除や追加が頻繁に行われます。削除や追加の度にシート1B列・C列の関数が参照する行数が追随して可変しないようにしたいのですが可能でしょうか。 具体的には、シート2において6行目から9行目を削除した際に、シート1では「B2=みかん」/「C2=イチゴ」と繰り上がり、B行・C行は常に指定した行を参照するようにしたいと思っています。 <シート1>  A B     C 1 タイトル りんご  ばなな (← 3行目) 2 タイトル かき   なし   (← 8行目) 3 タイトル みかん イチゴ (←13行目) ・B列:「=IF(ISERROR('Sheet2'!$B3:$B3),"",'Sheet2'!$B3:$B3)」 ・C列:「=IF(ISERROR('Sheet2'!$D3:$D3),"",'Sheet2'!$D3:$D3)」 <シート2、3…> 参照したいセルは、B列とD列の3行目、8行目、13行目…と一定の間隔で入力されており、全てのシートにおいて同じ箇所に入力されています。 シートごとにカテゴリーの個数は(図A1:E4までを1カテゴリーと考えています)異なり、作業の度にカテゴリーの追加や削除が頻繁にあります。 うまく説明できているか不安ですが、良い方法を教えてください。

  • EXCELで切り取った行を別シートに挿入

    EXCELである行を選択して切り取り、同一シート内の任意の場所に挿入すると 元の行は自動的に削除されます。 しかし、別シートに挿入した時は、元の行は削除されず、わざわざ その行を削除する、という操作が必要となります。 そこで質問なのですが、別シートへの挿入を一つの操作で行う方法はないでしょうか? また、その方法がない場合、それはEXCELの何らかの仕様を反映しているのだと 思いますが、それはどのようなものでしょうか? よろしくお願いします。

  • Excel 条件に当てはまった行を他のシートからデータを引用する場合の方法を教えてください

    自分なりに調べてみたのですが、分からず… お分かりになる方がいらっしゃいましたら、教えていただけますでしょうか。 Sheet1に、元となるデータを入力しています。この入力は案件が増えるごとに行が増えていきます。 A B  C   D   E 1 ○  魚   500  野村 2 ×  肉   600  中村 3 ○  野菜  700  富田 4 ×  その他 900  小林 A列が○の案件のみ、Sheet2に列ごとコピーを自動で行うようにしたいです。 調べたところIF関数で出来るかもしれないと思っているのですが、 「=IF(B1:B5="○",=Sheet1!A1,""」 では出来ませんでした。 そもそも、IF関数を使うのが間違いでしょうか? また、もしIF関数の場合、「条件に見合わなかった時は何もしない」という組み方はどのようにすればいいのでしょうか? 調べ方が悪いのかもしれないのですが、これ以上調べられなかったので… お分かりになる方、どうぞ宜しくお願い致します。

専門家に質問してみよう