シートの一部内のすべての名前付き範囲をクリアする最良の方法は何ですか?
何かのようなもの:
Sheets("A").Range("A1:D10").ClearNames
?
ClearNamesについてはわかりませんが、このようにします。サンプル:
Option Explicit
Sub DeleteNamedRanges()
Dim targetWorksheet As Worksheet
Dim targetRange As Range
Dim nameObject As Name
Dim namedRange As Range
Dim unionedRange As Range
Set targetWorksheet = Worksheets("MySheetName")
Set targetRange = targetWorksheet.Range("A1:D10")
For Each nameObject In ActiveWorkbook.Names
Set namedRange = nameObject.refersToRange
If (namedRange.Worksheet.Name <> targetWorksheet.Name) Then GoTo Continue
Set unionedRange = Application.Union(namedRange, targetRange)
If (unionedRange.Address = targetRange.Address) Then
namedRange.Value = "" ' namedRange.Clear
End If
Continue:
Next nameObject
End Sub
その領域内の名前を削除する場合は、これでうまくいくはずですが、ターゲット領域からだけでなく完全に名前が削除されることに注意してください。そのため、A1:D10 の内側と外側に存在する範囲も削除されます。
Option Explicit
Public Sub DeleteRangeNames()
Dim wsTarget As Worksheet
Dim rTarget As Range
Dim nTmp As Name
'Determine the range to clear all names from
Set wsTarget = Worksheets("enternamehere")
Set rTarget = wsTarget.Range("A1:D10")
'Loop through all Names in the worksheet
For Each nTmp In ActiveWorkbook.Names
'Check if they overlap (if no overlap the intersection is Nothing)
If Not (Intersect(nTmp.RefersToRange, rTarget) Is Nothing) Then
'Delete the Name object from the workbook
nTmp.Delete
End If
Next nTmp
End Sub