• ベストアンサー

行に印のある列を残し他は列削除

上段の表の1行目の"●"印の列のみ表示し1行目空白は列削除し下段の表にしたいのですがどなたかVBAコードが解る方宜しくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

#1です。補足された意味は、シートのコピーを取らずに、VBAで削除作業を実行してしまった、ということですか。 VBAで実行した削除は、私の経験では、もとに戻らないと思います。 それ(復活)に限定して、新たな質問を立てて、識者の回答を期待してください。 私も回答に、コピーを取って(テスト)実行と書くべきだったと、昨夜投稿後気づきましたが、漏らしました。 ーー 蛇足ですが、当初質問に対オする別方法。 繰り返しのVBAコードを使わない方法をめざして、 エクセルでは、列方向のフィルターはできないようなので(注)、「行と列を入れ替え(Transpose)」して、●(行方向に並ぶ)でフィルタをかけて、結果をコピーし、別シート貼り付けし、また、「行と列を入れ替え」すればできました。VBAコードは略。興味があれば、マクロの記録でもとって修正してください。 ただし、少数データ例でしかやっていないので ・列数の制約 約16000件 ・処理速度が心配 ですが。 (注)エクセルも、行と列では、非対称的な点がある例の箇所です。

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

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

どの程度の回答を望むのかわからないが、何もむつかしい点はないのでは。 簡単なのは「全列繰り返し判別法」だろう。 Sub test01() cr = Cells(2, 256).End(xlToLeft).Column MsgBox cr For c = cr To 1 Step -1 If Cells(1, c) <> "●" Then Columns(c).Delete End If Next c End Sub 列の「削除」問題なので、右端列から左に順次に処理するのがよさそう。 あとScreenUpdatingのFalse,Trueを入れるとか。 ActiveSheetかシート名でシートを指定したほうがよいかも。 Cells(2, 256).の256はもっと増やしたり、Columns.count(16384)にする方法もある。

kuma0220
質問者

補足

ありがとうございます。指定列削除ができ非常に助かりました。誠にすみませんが元に戻すことを忘れておりApplication.Undoとかを使ってもできませんコードが解かれば宜しくお願いします。

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

関連するQ&A