• ベストアンサー

【Excel2003】指定した行を省いて列を再構成する方法【関数】

Excel2003にて以下の内容を関数で実現する方法がありましたら ご教示願います。 1列に0とそれ以外(数字or文字列)の羅列があり それを別の列に、0の行を削除し、その分上につめて 列を再構築する関数はありますでしょうか。 (0は空白のセルにすることも可能です) (例) 100 0 105 0 0 AAA ↓ 100 105 AAA よろしくお願いいたします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

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)))) と入れて、フィルドラッグで下へ式をコピーしてみてください。

procurve
質問者

お礼

回答ありがとうございます。 関数の見本まで提供していただき感激です。 無事、上詰することができました。 ありがとうございます。

その他の回答 (3)

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

関数だけで処理するわかりやすい方法は作業列を作って対応することです。 たとえば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))

procurve
質問者

お礼

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

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

オートフィルタを利用して フィルタの設定をオプションで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

procurve
質問者

お礼

オートフィルタのご指摘ありがとうございます。 マクロは便利そうですが、勉強不足で解読出来ないので 自分で解読、編集可能な関数での処理を模索しております。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

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

procurve
質問者

お礼

回答ありがとうございます。 関数ばっかりに頭がいってしまい、オートフィルタ機能は盲点でした@@ 今回は行が対象行が多いのと、繰り返しの内容になりますので。 自動で行ってくれる関数を探しております。 今後の参考にさせて頂きます。 ありがとございました。

関連するQ&A