dポイントプレゼントキャンペーン実施中!

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文を下にコピーして使用しています。

又、もっと効率のいい方法がある!
と言った答えもいただけたら非常に助かります。
よろしくお願いします。

A 回答 (8件)

こんばんは!


せっかく数式をお考えですので、極力お示しの数式に近い形で・・・

Sheet2のA1セルに
=IF(Sheet1!$C1="a",Sheet1!A1)
Cの前に$マークを入れておきます。列だけ固定の複合参照になりますので、これをC1セルまでオートフィルでコピーしておきます。
D1セルはそのままの数式でOKだと思います。

A1~D1セルを範囲指定し、D1セルのフィルハンドルで下へずぃ~~~!っとコピー!

最後にVBAになってしまいます。
画面左下にあるSheet2のSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub test() 'この行から
Dim i As Long
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(i, 1) = False Then
Rows(i).Delete (xlUp)
End If
Next i
End Sub 'この行まで

マクロを実行するとFALSEの行が削除されるはずです。

参考になれば良いのですが・・・m(__)m
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
自分が実施したかったことに一番最適でした。

お礼日時:2011/02/04 19:57

対象があいまい。


シート2での削除か。

結果から想定すると

シート1でシート2にFALSEと出る2行目4行目を削除する。

シート1はそのままでシート2にFALSEと出るなら表示しないで上に詰める。

シート2の結果をいったん出してから削除する。

対応後は
シート1の3行目の結果がシート2の2行目である。以後また使うブックであればこれでいいのか。

削除結果はせめてシート3とか別のが望ましい。

削除するが、元に戻したりシート1の2行目結果はみることはないか。

いろいろ補足は必要でしょう。
    • good
    • 0

、「全体として何がしたいのか」説明してみてください。


ーーー
普通のVBAのコードと違う得意な考えお呼びコーディングをやろうとしていると思う。
質問者は、熟達者なのか、初心者か。初心者なら根本的に、今後エクセルの標準のコーディングを勉強した方が良い。
普通はVBAでやるなら、
IF A=B Then
'処理X
Else
’処理Y
End IF
とかく。
初心者は上記コードは、AがBと等しいか判断していると解釈するが、結果が同じなのだが、実はA=Bだけ取り上げてTrueかFalseが判断し結果が導出され、そのTrueの場合が処理Xを行い、Falseの場合に処理Yを行うよう指示するコードなのだ。
根本では機械語的には比較すると真偽のフラグが立ち、それのON・OFFを判断しているのだ。
だからそこまで行くと、質問者の質問者の書いていることになんとなく近いが、普通はそんな考えを持ち出さない。
ーー
この場合Aは何で、Bは何か説明し、「全体として何がしたいのか」説明してみてください。
そしたらVBAとして普通のコードの回答が付くと思う。
回答者は質問者に釣られて、その延長の回答を載せることを目にするが(それが親切と言う考えもあろうが)私は根本から、VBAを使う場合の、考え方や、コード方法の是非を判断し納得したい。
    • good
    • 0

関数だけで対応するなら、Sheet2のA1セルに以下の式を入力し右方向に3つ下方向に適当数オートフィルしてください。



=INDEX(Sheet1!A:A,SMALL(INDEX((Sheet1!$C$1:$C$100<>"a")*1000+ROW($A$1:$A$100),),ROW(A1)))&""

D1セルには以下の式を入力して下方向にオートフィルしてください。

=IF(A1="","","あいう")
    • good
    • 1

ANo.3です。


失礼。FALSEと表示させないのではなく、FALSEの行を削除したいのですね。
先ほどの私の回答は無視してください。
    • good
    • 0

IF文にFALSEの時の処理が記述されていないので、FALSEと表示されています。


以下の様にFALSEの時には空白を入れるようにしましょう。

=IF(Sheet1!C1="a",Sheet1!A1)

=IF(Sheet1!C1="a",Sheet1!A1,"")
    • good
    • 0

一例です。

(操作はエクセル2003以下で記載)
現状のSheet2の先頭に行を挿入→先頭行も含みデータ範囲を選択→データ→フィルタ→オートフィルタ→
任意の列先頭に表示されたフィルタボタン押下→オプションでFALSEを選択→OK→
抽出された行番号を選択→右クリックで行の削除→オートフィルタ解除、先頭行を削除
    • good
    • 0

Ctrl+Gで、ジャンプを呼び出す。


「セル選択」ボタン
数式にチェック
論理値にチェック
数値
文字
エラー値のチェックをはずす
OKボタン
これでFALSEがすべて選択されます。

で、編集から削除で、行全体を削除を選びます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!