0

シートの一部内のすべての名前付き範囲をクリアする最良の方法は何ですか?

何かのようなもの:

Sheets("A").Range("A1:D10").ClearNames

?

4

2 に答える 2

2

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
于 2012-10-31T12:11:17.157 に答える
0

その領域内の名前を削除する場合は、これでうまくいくはずですが、ターゲット領域からだけでなく完全に名前が削除されることに注意してください。そのため、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
于 2012-10-31T15:18:44.170 に答える