人生のプチ美学を教えてください!!

Excel2003にて以下の内容を関数で実現する方法がありましたら
ご教示願います。

1列に0とそれ以外(数字or文字列)の羅列があり
それを別の列に、0の行を削除し、その分上につめて
列を再構築する関数はありますでしょうか。
(0は空白のセルにすることも可能です)

(例)
100
0
105
0
0
AAA



100
105
AAA

よろしくお願いいたします。

A 回答 (4件)

A列1行目から10行目にあるデータ中、0以外を上詰で表示するなら



表示したい列の1行目に、
=IF(LARGE(INDEX(($A$1:$A$10<>0)/ROW($A$1:$A$10),),ROW(A1))=0,"",INDEX($A$1:$A$10,1/LARGE(INDEX(($A$1:$A$10<>0)/ROW($A$1:$A$10),),ROW(A1))))
と入れて、フィルドラッグで下へ式をコピーしてみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

関数の見本まで提供していただき感激です。

無事、上詰することができました。
ありがとうございます。

お礼日時:2009/08/11 17:20

関数だけで処理するわかりやすい方法は作業列を作って対応することです。


たとえばA列の2行目からデータがあるとしてB2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(OR(A2="",A2=0),"",MAX(B$1:B1)+1)
その後にたとえばC列にデータを並び替えて表示するのでしたら次の式をC1セルに入力して下方にオートフィルドラッグします。
=IF(COUNTIF(B:B,ROW(A1))=0,"",INDEX(A:A,MATCH(ROW(A1),B:B,0),1))
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

なるほど、一度に処理しようとせずに作業列を介して抽出するのですね。
今後の参考にさせて頂きます。
ありがとうございました。

お礼日時:2009/08/11 17:22

オートフィルタを利用して


フィルタの設定をオプションで0と等しくないにすればいかがでしょう

マクロだと(A列にもとのデータB列に再構築)

Sub test()

Dim i As Integer, j As Integer

j = 1

For i = 1 To Range("A65536").End(xlUp).Row
If Range("a" & i).Value <> 0 Then
Range("b" & j).Value = Range("a" & i).Value
j = j + 1
End If
Next i

End Sub
    • good
    • 0
この回答へのお礼

オートフィルタのご指摘ありがとうございます。

マクロは便利そうですが、勉強不足で解読出来ないので
自分で解読、編集可能な関数での処理を模索しております。

お礼日時:2009/08/11 17:18

オートフィルタで0の行を抽出して、その行を選択して削除。


フィルタ解除して終了。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
関数ばっかりに頭がいってしまい、オートフィルタ機能は盲点でした@@

今回は行が対象行が多いのと、繰り返しの内容になりますので。
自動で行ってくれる関数を探しております。

今後の参考にさせて頂きます。
ありがとございました。

お礼日時:2009/08/11 17:16

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