プロが教える店舗&オフィスのセキュリティ対策術

教えて下さい。

エクセルで一行目にある、100項目程度の項目名のうち、
30個程度の項目名の列をvbaで削除したいです。

30項目名「あ」、「う」、「か」、「た」、「つ」‥
消したい場合、

If Cells(1, c) = "あ" or Cells(1, c) = "う" Then

と入れ子にして付け加えていけばいいのでしょうか‥。


不足情報ありましたら申し訳ありません。
もっといい方法ありましたら教えて下さい。




Sub 列削除()
Dim lngECol As Long
Dim c As Integer


lngECol = Range("XFD1").End(xlToLeft).Column


For c = lngECol To 1 Step -1

'1行目の項目名が「あ」の場合に列削除
If Cells(1, c) = "あ" Then


Cells(1, c).EntireColumn.Delete

End If
Next
End Sub

A 回答 (2件)

こんばんは、


If Cells(1, c) = "あ" or Cells(1, c) = "う" Thenと入れ子にして付け加えていけばいいのでしょうか‥。
良いとは思いますが、探す範囲が大きい場合 ループ回数が増えそうに思います。 
30項目名の方を配列にしてループさせた方が良いかも知れません。

また、削除に関しては、一度に実行する方が処理速度が速くなります。
Set Rng= Object.Union(Arg1,Arg2,,,
UnionでRangeをつなげ一度に処理をする

Sub a()
Dim i As Long
Dim Rng As Range
Dim key As Variant
For Each key In Array("あ", "い", "う")
On Error Resume Next
If Rng Is Nothing Then
Set Rng = Range("A1:XFD1").Find(key).Cells
Else
Set Rng = Union(Rng, Range("A1:XFD1").Find(key).Cells)
End If
Next
If Not Rng Is Nothing Then Rng.EntireColumn.Delete
End Sub

見つからない場合の処理をOn Error Resume Nextとしてしまいましたが、
参考にはなると思います。また、Findに関しては初めの該当セルになってしまいますので、同じキーワードの項目がある場合はFindNextなどで対応する必要があります。。検証等は行っていませんので、デバッグしてください。
    • good
    • 0
この回答へのお礼

助かりました

詳しいコードもありがとうございます。ここまで複雑なコードがまだ書けないので助かります。
今回、項目名も長い上にたくさんあるので、そこだけで五行くらいになってしまいましたがうまく行きました。
本当に助かりました。ありがとうございます!

お礼日時:2021/01/30 17:39

項目名を配列にぶち込むってのもありですし、1行目をInsertして空白行を作成し、不要な列に『例えば B1、F1、H1とか』×印を付けておくなりしてそれを目安に削除するとか。


勿論追加した1行目は最後に削除しますけど。
    • good
    • 0
この回答へのお礼

ありがとう

なるほど!そういうやり方もありますね!!貴重なご意見ありがとうございます。

お礼日時:2021/01/30 17:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!