[[20211006180343]] 『条件に当てはまったセルの行の削除』(よこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件に当てはまったセルの行の削除』(よこ)

はじめまして.
Excelのシートの12行目に「True」として表記されたセルの列全体を削除するVBAを作成したいのですが,教えていただけませんでしょうか.
ネットで探したところ,行を削除する場合は色々と情報があったのですが,
列を削除する場合の事例が無く,投稿させていただきました.

お手数をおかけしてしまい申し訳ありませんが,
ご協力いただけますと幸いです.
何卒よろしくお願い申し上げます.

< 使用 Excel:Office365、使用 OS:Windows10 >


 ヒョコ |ૂ•ᴗ•⸝⸝) ホントにないですか?

 もう1回下記で検索してみてください。

 キーワード 列 削除 VBA
(あみな) 2021/10/06(水) 18:37

色々な方法があります。
一番基本的なのは、一つずつ判定して列削除する方法です。

キモは、12行の列を判定していくのに際し、右から左に順に実行することです。
こうすれば、削除の結果が、それ以降の判定に影響を及ぼさなくて済みます。

12行目の列をひとつずつ判定するのは、いつものパターンでEndプロパティで最終列を求めます。
そのうえで、
For 最終列番号 to 1 step -1

Next
と繰り返します。

列削除は、Columns(k).Deleteです。

上記を参考にトライしてみてください。
# 行削除とまったく同じ考え方でできるはずです。

(γ) 2021/10/06(水) 18:46


あみな様,Y様

コメントを参考にもう一度トライしてみたいと思います!

ご助言いただきありがとうございました!

(よこ) 2021/10/06(水) 19:39


少し考えてみたのですが,あまり上手くいかず困っております...
現在,以下のコードでやってみてはいるんですが,
どのような箇所が不足しているのでしょうか.

なお,現在はサンプルとして10列目までデータがある場合を想定しています.
あとEndプロパティのやり方がまだ習得できていないので,
非常に稚拙なやり方となっておりますが,
ご了承いただけれますと幸いです.

Sub Yoko()

    Dim i As Long
    For i = 1 To 10
    i = 1

    If Worksheets("Sheet1").Cells(12, i) = True Then
    Columns(i).Delete

End If

Next i

End Sub
(よこ) 2021/10/08(金) 16:32


ループ中にiを1に戻したらいつまで経ってもiは10にならないので無限ループに陥ります

(砂糖) 2021/10/08(金) 16:39


横からですが。

■1
>Endプロパティのやり方がまだ習得できていない
結局ネット検索してみなかったのでしょうか?
特に引っかかるようなことは無さそうにおもいますが・・・・
https://www.moug.net/tech/exvba/0050088.html

■2
既に、指摘のあるようにループ中にカウンタを変えちゃっているところもですが、γさんから指摘されていたように、削除や挿入がある場合【後】から【前】に処理しないとずれちゃいますよ。

    Sub 研究用()
        Dim 列 As Long

        Stop 'ブレークポイントの代わり

        With Worksheets("Sheet1")
            For 列 = .Cells(12, .Columns.Count).End(extoleft).Column To 1 Step -1
                If .Cells(12, 列).Value = "True" Then
                    Cells(12, 列).EntireColumn.Delete
                End If
            Next 列
        End With
    End Sub

(もこな2) 2021/10/08(金) 16:51


ご助言いただきありがとうございます.
今週,VBAを学び始めたばかりで,
初心者向け書籍を読みながら少しずつ進めていたところでした.
そのため,Endプロパティの方法は検索してみたものの,
自分にはハードルが高そうに感じてしまい,
もう一度質問させていただいた次第です.

お手数をおかけして申し訳ありませんでした.
(よこ) 2021/10/08(金) 17:00


失礼。タイプミスがありました。
 誤 End(extoleft)
 正 End(xlToLeft)

>自分にはハードルが高そうに感じてしまい,
少し時間が取れたら研究してみるとよいと思います。
(分かってしまえば実に単純なことだったと思うようになるとおもいます)

(もこな2) 2021/10/08(金) 17:11


0) プログラム開始
1)シート上の使っている範囲の12行目のセルの値を後ろから順にみていく
2)もし、見ているセルの値がTureならその時は
3) そのセルの列全体を削除
4)次へ
5) プログラム終わり

というようなことをVBA語で書けばよいと思います。
慣れるまでは、日本語で作業の流れを整理するとこから始めると
いいと思います。(複雑なことをやる場合は必須かも)

sub test

    dim Rng as range
    dim i as long

    set rng = activesheet.usedrange.rows(12).cells

    for i = rng.count to 1 step -1
        if rng(i).value = true then
            rng(i).entirecolumn.delete
        end if
    next
end sub

直接ここに書いたので、誤字などがあるかも知れません。
ご容赦を。

(まっつわん) 2021/10/08(金) 17:32


もこな2さん、まっつわんさん

ご丁寧に返信およびご教授いただき、誠にありがとうございます。
お二人から教えていただいたコードをひとつひとつ読み解き、
自分で少しずつ理解を深めていきたいと思います。

途方に暮れていたので、このような場と優しい方々に出会えて感謝しています。
本当にありがとうございました。

(よこ) 2021/10/08(金) 21:28


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.