質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

779閲覧

excelで3行目が空白だったらその列を削除と実装したが複数空白行がある場合にうまく行かない

ma2hiro

総合スコア159

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/08/26 04:49

お世話になっております。

 A     B   C  E  F G 1 タイトル ほげ  2 項目   広島 大津     北海道 3 要素   ○   △      □

のような図があり
件名の通り 3行目の項目が空白だったらその列を削除したく

VBA

1Sub delCol3gyoumeNai() 2 Dim i 3 Dim MaxCol As Long 4 MaxCol = Cells(3, Columns.Count).End(xlToLeft).Column 5 For i = 2 To MaxCol 6 If Cells(3, i).Value = "" Then 7 Columns(i).Delete 8 End If 9 Next 10 11End Sub

のようなプログラムを走らせてE、F列を削除させようとしました。

ですが一回上記のプログラムを動かしただけでは一行しか削除されず
E,F行を削除するには2回動作させなければいけなくなってしまいました。

デバッガで追ってみるとそりゃそうだよね……という動作をしていました……
(削除する→次の行へ となったら連続した場合は上手く行かない)

一旦全部確認して削除フラグを行ごとに立ててやるのかな?と思いましたが
VBAは不慣れなためもしかしてそれっぽい命令があるのかと思い質問失礼いたします。

上記 列を削除するVBAで連続して削除したい列がある場合はどのような実装方法があるか伺ってよろしいでしょうか?

なんという語句でググるのか不明だったのです……
やっぱり配列用意してフラグしか無いのでしょうか?

上記何か情報をお持ちになっていらっしゃる方はコメント頂けますと嬉しく思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

列削除すると、右側の列は移動しますので、左側から削除していくとうまく行かないですね。

そういう場合は、右側から削除していくといいでしょう。

vba

1Sub delCol3gyoumeNai() 2 Dim i As Long 3 Dim MaxCol As Long 4 MaxCol = Cells(3, Columns.Count).End(xlToLeft).Column 5 For i = MaxCol To 2 Step -1 6 If Cells(3, i).Value = "" Then 7 Columns(i).Delete 8 End If 9 Next 10End Sub

別案

Unionで複数列を纏めて、一気に削除する。

vba

1Sub delCol3gyoumeNai1() 2 Dim i As Long 3 Dim MaxCol As Long 4 Dim r As Range 5 6 MaxCol = Cells(3, Columns.Count).End(xlToLeft).Column 7 For i = 1 To MaxCol 8 If Cells(3, i).Value = "" Then 9 If r Is Nothing Then 10 Set r = Columns(i) 11 Else 12 Set r = Union(r, Columns(i)) 13 End If 14 End If 15 Next 16 17 r.Delete 18End Sub

投稿2021/08/26 05:05

編集2021/08/26 05:12
hatena19

総合スコア33795

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ma2hiro

2021/08/26 06:07

hatena19さん ありがとうございますっ なんかフラグ立ててやるのは面倒かと思っていたのですが ``` For i = MaxCol To 2 Step -1 ``` と最大値からやる方法でしたら一回で出来ますねっ ありがとうございます。 解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問