- ベストアンサー
列の削除を早くしたい
- 列の削除を早くするための方法を教えてください。
- 現在、列の数が2370列以上あり、処理が遅くなっています。
- 行数は1から33行までで固定されています。この条件を加味しながら、より早く処理する方法があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちわ これを試してください。 Sub 空白列の削除() Dim UsedCell As Range Dim Max_column As Long, columnCount As Long Dim i As Long, j As Long Dim 削除前配列 As Variant, 削除後配列 As Variant Dim Max_gyo As Long '使用しているセルの範囲を取得します Set UsedCell = ActiveSheet.UsedRange '最大の行番号を取得します Max_column = UsedCell.Columns.Count Max_gyo = UsedCell.Rows.Count 削除前配列 = UsedCell.Value ReDim 削除後配列(1 To Max_gyo, 1 To Max_column) i = 0 For columnCount = 1 To Max_column 'Worksheet関数のCountAを使ってデータの個数をカウント If Application.WorksheetFunction.CountA(UsedCell.Columns(columnCount)) <> 0 Then i = i + 1 For j = 1 To Max_gyo 削除後配列(j, i) = 削除前配列(j, columnCount) Next j End If Next columnCount UsedCell.ClearContents UsedCell.Resize(Max_gyo, i).Value = 削除後配列 End Sub それから、たまに間違った説明をしているのを見かけるのですが、 UsedRangeは、A列または、一行目がすべて空白だと、 "A1"からの領域ではないということを意識して、使用してください。
その他の回答 (1)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! あまりお役に立てないかもしれませんが、 お示しのコードでちゃんと動作するのであれば・・・ 画面更新を止めてみてはどうでしょうか? >For columnCount = ・・・ の行の前に >Application.ScreenUpdating = False を追加、 >Next の後に >Application.ScreenUpdating = True を追加。 この程度しか思いつきませんが、時間短縮にならなかったらごめんなさいね。m(_ _)m
補足
ご指摘の件に関してはすでに試しております。できれば、最大行数が33であることを利用して速度をあげたいです。
お礼
何ということでしょう!あの長い時間かっかった列の削除が一瞬にして実行できました。最初本当に削除したの?という疑いを持ったほどです。本当にありがとうございました。感謝感激です。ありがとうありがとう。