電子書籍の厳選無料作品が豊富!

1行目に1が入力されている列を削除するのに下記で処理しようとしましたが、
時間が結構かかってしまいます。
(1行目に1があれば列削除を、最終列→B列まで繰り返す処理としています。)

おそらく1列ずつ削除している為、時間がかかっていると思いますが、
対象の列を一括削除するような処理にすれば下記よりは速くなるのかなと思って
いるのですが方法あるでしょうか?

With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
.DisplayAlerts = False
End With

lastColLO = .Cells(1, Columns.Count).End(xlToLeft).Column
For i = 0 To lastColLO - 1
If .Cells(1, lastColLO - i).Value = "1" Then
.Columns(lastColLO - i).Delete Shift:=xlToLeft
End If
Next

A 回答 (4件)

こんにちは!



一例です。

Sub Sample1()
 Dim j As Long
 Dim myRng As Range
  For j = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
   If Cells(1, j) = 1 Then
    If myRng Is Nothing Then
     Set myRng = Cells(1, j)
    Else
     Set myRng = Union(myRng, Cells(1, j))
    End If
   End If
  Next j
   If Not myRng Is Nothing Then
    myRng.EntireColumn.Select '//←列選択でやめている★//
   End If
End Sub

※ とりあえず対象列選択でやめています。
一気に削除したい場合は「★」の行を
>myRng.EntireColumn.Delete

に変更してください。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
Unionを使うのですね。
勉強になりました。

お礼日時:2020/03/09 10:02

削除する列ですが、1行目の1にこだわりますか?


例えば、「1行目に何らかの実数が入力されている列を削除する」で良ければ、こんなに簡単にできますよ。

Sub sample()
Rows("1:1").SpecialCells(xlCellTypeConstants, 23).EntireColumn.Delete
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
色々方法があること理解出来ました。
頑張ります。

お礼日時:2020/03/09 10:04

1行ずつ削除するから時間がかかります。



該当するものにフラグを立てて ソートで一ヶ所に集めてから削除
すれば相当速くなります。それかクエリでどこかに抽出すればいい
です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
色々方法があること理解出来ました。
頑張ります。

お礼日時:2020/03/09 10:03

直接の回答にはなっていませんが、


Application.ScreenUpdating = False
でも早くなるはずです。
最後に
Application.ScreenUpdating = True
をお忘れなく。
試してみる価値はあると思います。
参考URL:Office TANAKA
画面を止める
http://officetanaka.net/excel/vba/speed/s1.htm
    • good
    • 0
この回答へのお礼

ありがとうございます。
質問本文に記載していますが下記ですでに入れておりました。
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
.DisplayAlerts = False
End With

お礼日時:2020/03/09 10:02

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

このQ&Aを見た人はこんなQ&Aも見ています