[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『見出し2行以外が空の列をまとめて削除したい』(じす)
VBAで、見出し2行以外が、空の列を見出しごと一括削除したいです。
(今回作業するエクセルデータの見出しは、 1行目は英語表記、2行目に日本語表記と、2行ある状態です。)
例えば…
apple orange berry banana melon
りんご みかん いちご バナナ メロン
川村 1 1 1
青山 1 1 1
吉野 1 1
岩谷 1
上記のようにbananaバナナにはデータがない場合、
見出し1行目のbananaと2行目のバナナごと、列を削除したいです。
apple orange berry melon
りんご みかん いちご メロン
川村 1 1 1
青山 1 1 1
吉野 1 1
岩谷 1
列や行の数が少なければ、目視で削除していくのですが、
数百列・数百行あるため、VBAで作業したいです。
お手数ですが、ご教示の程、よろしくお願いいたします。
Sub 見出しの二行以外が空の列を見出し二行ごと削除する()
With ActiveWorkbook.ActiveSheet
Dim idx As Long Dim i As Long ' i = 0
For idx = .Cells(1, 16384).End(xlToLeft).Column To 1 Step -1 If Application.WorksheetFunction.CountA(.Columns(idx)) = 2 Then .Columns(idx).Delete i = i + 1 End If Next idx MsgBox (i & "列削除") End With End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
タイトルが2行とも入力されているなら、そのコードでいいと思うんですけど、 何かマズい事態が生じたんですか?
(半平太) 2018/12/12(水) 11:39
Sub さんぷる() Dim i As Long, 削除セル As Range
Stop '←ブレークポイントの代わり(以下、ステップ実行して研究のこと)
With Range("A1").CurrentRegion For i = 1 To .Columns.Count If Application.WorksheetFunction.CountA(.Columns(i)) = 2 Then If 削除セル Is Nothing Then Set 削除セル = .Columns(i) Else Set 削除セル = Union(削除セル, .Columns(i)) End If End If Next i
If 削除セル Is Nothing Then Exit Sub
If MsgBox("データが無い列を削除してよろしいですか?", vbYesNo) = vbYes Then 削除セル.Delete Shift:=xlShiftToLeft End If End With
End Sub
まぁ、元のコードでも画面更新を抑止すれば解決するような気もしますが・・・
http://officetanaka.net/excel/vba/speed/s1.htm
(もこな2) 2018/12/12(水) 12:38
もこな2様
コードのご確認と改善案のご提案をありがとうございます。
量が多く、処理速度も気になっていたので、
「該当の列を探しておいて、最後にまとめて削除」する方法、
画面更新の抑止についても、検討してみます。
この度は、お手を煩わしてしまい、申し訳ございませんでした。
お二方にコードを見ていただき、現状でよいと解り、安心しました。
コード以外の別の箇所に問題がないか、見直します。
誠にありがとうございました。
(じす) 2018/12/12(水) 13:06
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.