/ / Excel: Отримання навколишнього названого діапазону в Excel - c #, .net, excel, vsto, ms-office

Excel: Отримання оточеного іменованого діапазону в Excel - c #, .net, excel, vsto, ms-office

У мене є лист Excel з багатьма названими діапазонами,які мають ієрархічну структуру (один діапазон містить інші діапазони). Діапазони не мають перехрестя і не мають мультипелевих ділянок. Як я можу оцінити навколишній названий діапазон конкретного названого діапазону діапазону (іншими словами, я хочу отримати щось на зразок відносин батько-дитина). Для прикладу: введіть опис зображення тут

Ось у мене діапазон С. Тепер я хочу оцінити його "батька". У цьому випадку це Б.

Відповіді:

2 для відповіді № 1

Якщо "батьків" завжди повністю міститьдитина, і це найменший діапазон (з точки зору кількості клітин), який це робить, то це може допомогти. Я розумію, що це "VBA, і ваші теги передбачають VSTO, але підхід все ще може бути застосовний ...

Зауважте, що існує безліч випадків, на які не перевірено: названі формули - одна з таких.

Public Function ParentName(rng As Range) As String

Dim intersection As Range
Dim possibleParent As Range
Dim nm As Name

Dim rngCellCount As Long
Dim intersectCellCount As Long
Dim possParentCellCount As Long
Dim rangeParentCellCount As Long

rngCellCount = rng.Cells.Count

For Each nm In Names
Set possibleParent = nm.RefersToRange
Set intersection = Application.Intersect(rng, possibleParent) " which cells are common between the target and possible parent?
If Not intersection Is Nothing Then " Nothing means no cells in common
intersectCellCount = intersection.Cells.Count
possParentCellCount = possibleParent.Cells.Count
" if intersection is same size as child then child is completely contained
If intersectCellCount = rngCellCount And possParentCellCount > intersectCellCount Then
If rangeParentCellCount > possParentCellCount Or rangeParentCellCount = 0 Then
" record name of parent if smaller than best so far (or if we haven"t already found a parent at all)
parentName = nm.Name
rangeParentCellCount = possParentCellCount
End If
End If
End If
Next

End Function