• 締切済み

エクセルのオートフィルタについて マクロ

宜しくお願いします。 シート「B5」から「AV504」にデータが入っています。(A列にはA5からNo.を入力しています) マクロで「I」列の条件が「成約済」または「ボツ」であれば、B5からAV504の該当行データを クリアし、(すべての行ではなく、B~AV列までクリア(×削除))さらに、クリア後のB列から AV列の空白行を上に詰めてなくしたい(最下行までの空白をなくしたい)のですが、可能で しょうか。 宜しくお願いいたします。

みんなの回答

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

マクロを組まれるほどのこともないでしょう。関数を使って別のシートにお望みの表を作るようにしてはどうでしょう。 例えばシート1にお示しの表があるとします。そこでシート1のAW列は作業列としてAW5セルに次の式を入力して下方にオートフィルドラッグします。 =IF(OR(I5="成約済",I5="ボツ",COUNTBLANK(B5:H5)+COUNTBLANK(J5:AV5)=46),"",MAX(AW$4:AW4)+1) AW列には番号が表示されますが目障りでしたらAW列を選択して右るりっくし「非表示」を選択すればよいでしょう。 シート2にお望みの表を作るとします。 シート1の3行目まではコピーしてシート2に貼り付けます。またシート1のA列も選択してコピーしシート2のA列に貼り付けます。 その後にシート2のB5セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(OR(COLUMN(A1)>47,ROW(A1)>MAX(Sheet1!$AW:$AW)),"",INDEX(Sheet1!$B:$AV,MATCH(ROW(A1),Sheet1!$AW:$AW,0),COLUMN(A1))) これでお望みの表がシート2に表示されます。上記の式では空白のセルは0で表示されますがその表示をさせないためにはB5セルへの入力の式を次のようにしてもよいでしょう。 =IF(OR(COLUMN(A1)>47,ROW(A1)>MAX(Sheet1!$AW:$AW)),"",IF(INDEX(Sheet1!$B:$AV,MATCH(ROW(A1),Sheet1!$AW:$AW,0),COLUMN(A1))=0,"",INDEX(Sheet1!$B:$AV,MATCH(ROW(A1),Sheet1!$AW:$AW,0),COLUMN(A1))))

napland
質問者

お礼

ありがとうございました。なるほど、こういう方法もあるのですね。 実は自分で色々やっていたところマクロのほうでも実現する事ができましたが 参考になりました。ありがとうございました。

関連するQ&A

専門家に質問してみよう