このコードを変更するには、謙虚にお問い合わせください。私は、ワークブックの最新情報を取得するために使用するExcelスプレッドシートの約30バージョンの情報リポジトリであるアクセスデータベースを作成しました。ワークブックがヘルパーシートの情報を更新し、ユーザーが適切なフィールドを入力すると、削除する必要のある未使用の列と行が多数あります。各ヘルパーシートは、数式を使用してデータを動的にプルします。したがって、セルは真に空ではありません。私は空のセルを削除するために驚くほどうまく動作するこのコードを見つけましたが、使用されていない数式を格納する列を削除するように変更する方法を見つけることができません。スプレッドシートのスクリーンショットに空白(空)の列を削除するExcel VBA
Sub RemoveBlankRowsColumns()
Dim rng As Range
Dim rngDelete As Range
Dim RowCount As Long, ColCount As Long
Dim EmptyTest As Boolean, StopAtData As Boolean
Dim RowDeleteCount As Long, ColDeleteCount As Long
Dim x As Long
Dim UserAnswer As Variant
'Analyze the UsedRange
Set rng = ActiveSheet.UsedRange
rng.Select
RowCount = rng.Rows.Count
ColCount = rng.Columns.Count
DeleteCount = 0
'Determine which cells to delete
UserAnswer = MsgBox("Do you want to delete only the empty rows & columns " & _
"outside of your data?" & vbNewLine & vbNewLine & "Current Used Range is " & rng.Address, vbYesNoCancel)
If UserAnswer = vbCancel Then
Exit Sub
ElseIf UserAnswer = vbYes Then
StopAtData = True
End If
'Optimize Code
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
'Loop Through Rows & Accumulate Rows to Delete
For x = RowCount To 1 Step -1
'Is Row Not Empty?
If Application.WorksheetFunction.CountBlank(rng.Rows(x)) <> 0 Then
If StopAtData = True Then Exit For
Else
If rngDelete Is Nothing Then Set rngDelete = rng.Rows(x)
Set rngDelete = Union(rngDelete, rng.Rows(x))
RowDeleteCount = RowDeleteCount + 1
End If
Next x
'Delete Rows (if necessary)
If Not rngDelete Is Nothing Then
rngDelete.EntireRow.Delete Shift:=xlUp
Set rngDelete = Nothing
End If
'Loop Through Columns & Accumulate Columns to Delete
For x = ColCount To 1 Step -1
'Is Column Not Empty?
If Application.WorksheetFunction.CountBlank(rng.Columns(x)) <> 0 Then
If StopAtData = True Then Exit For
Else
If rngDelete Is Nothing Then Set rngDelete = rng.Columns(x)
Set rngDelete = Union(rngDelete, rng.Columns(x))
ColDeleteCount = ColDeleteCount + 1
End If
Next x
'Delete Columns (if necessary)
If Not rngDelete Is Nothing Then
rngDelete.Select
rngDelete.EntireColumn.Delete
End If
'Refresh UsedRange (if necessary)
If RowDeleteCount + ColDeleteCount > 0 Then
ActiveSheet.UsedRange
Else
MsgBox "No blank rows or columns were found!", vbInformation, "No Blanks Found"
End If
ExitMacro:
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
rng.Cells(1, 1).Select
End Sub
、セルA1-T221は、アクティブであり、ブックで使用されています。しかし、
- 行222:5000には、このブックで使用されていない数式があります。
- 列T1:EP5000には、このワークブックで使用されていない数式があります。
この改訂の必要性に対する解決策をご理解いただきありがとうございます。
私は私の問題に別の解決策を提案するための努力を高く評価しています。コードを実行するたびに、Excelが応答を停止します。私はそれが完了した大量のプロセスが原因だと仮定しました。しかし、30分後にはまだ反応しなかった。 – mbass438
@ mbass438私の** EDIT#1のコードを試してください。 –
@ garys-student EDIT#1ははるかに高速に処理されています。これは、スプレッドシート内のいずれのセルにも何も格納されていない列(ブランク)を効果的に削除しました。しかし、このVBAスクリプトは、セル内に値を持たない列をすべて削除する必要があります(スプレッドシートのScreenshotを参照してください):Col QおよびそのヘルパーCol Rが使用されていますが、Col U(ヘルパーV)はユーザ入力の結果として使用されていないが、ユーザが適切な値を入力した場合にデータを引き出すための各セル(1:5000)にはまだ数式がある。数式で未使用のセルを削除するにはどうすればよいですか? – mbass438