人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ExcelのVBAについて。

「保護範囲」という名前のつけたRange以外のUsedRangeをクリアするのに早い方法はないでしょうか。

以下の様なコードでやっているのですが、とても遅いです。


i = 1
For Each 対象セル In UsedRange

If Application.Intersect(対象セル, 保護範囲) Is Nothing Then
対象セル.Clear
End If

i = i + 1

Next 対象セル


●質問者: tetlis
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Mook
●100ポイント ベストアンサー

範囲が矩形なのか、バラバラなのか、
範囲が同一シート上だけなのか、複数シートにまたがっているのか、
などで処理が変わってきますが、アクティブなシートにすべての範囲がある前提の処理です。

Option Explicit

Sub UnprotectRangeClear()
 Application.ScreenUpdating = False
 Application.Calculation = xlCalculationManual
 Application.EnableEvents = False
 
 Dim dstWS As Worksheet
 Set dstWS = ActiveSheet
 
 ActiveSheet.Copy
 Dim cpyWS As Worksheet
 Set cpyWS = ActiveSheet
 
 dstWS.Cells.ClearContents
 
 Dim r As Range
 For Each r In Range("保護範囲")
 dstWS.Cells(r.Row, r.Column).Value = cpyWS.Cells(r.Row, r.Column).Value
 Next

 cpyWS.Parent.Close Savechanges:=False
 Application.EnableEvents = True
 Application.Calculation = xlCalculationAutomatic
 Application.ScreenUpdating = True
End Sub

tetlisさんのコメント
ありがとうございます。私には難しい部分があるのですが、調べながら読み解きたいと思います。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ