Страница 1 из 1
Именованный диапозон в формуле
Добавлено: 27 окт 2005, 12:14
Zigi
Мне по наследству достался экселевский файлик, где все формулы прописаны не как прямая ссылка на ячейку, а как ссылка на присвоенное ячейке имя. И таких формул/имён больше 1000+, что очень затрудняет ковыряние в файле на предмет понимания что откуда берется.
Если какой нибудь способ вернуть формулам нормальный вид, т.е. вместо ссылки на имя, была бы ссылка на соответствующую ячейку?
З.Ы. А какой тайный смысл в таком построении файла? По мне это только двойная работа - сначала присвоение имени ячейки, а потом еще и прописывания формулы, плюс и самому запутаться можно. Единственное что приходит на ум - это что бы осложнить жизнь другим людям, которые захотят покопаться в этом файле. А может я просто чего-нибудь недопонимаю (возможно в силу не столь преклонного возраста

)
Добавлено: 27 окт 2005, 12:55
pashulka
Наверное всё таки не 1000 имён, а ~ 1000 формул, которые содержат имена. Что касается имён, то здесь надо отметить, что имя может ссылаться не только на ячейки/диапазон ячеек, но и представлять собой константу или даже именованную формулу (которая в свою очередь может включать в себя практически всё что угодно) () Имена могут быть обычными и трёхмерными, уровня рабочей книги или уровня рабочего листа. Поэтому не зная о чём именно идёт речь, сложно что-то советовать, во всяком случае мне. Однако если Вы имеете дело с банальными именованными диапазонами, то можно просто заменить имя на адрес диапазона. В меню Правка выбираете команду Заменить (CTRL+H) в поле Что введите имя, а в поле Заменить на адрес диапазона, затем кнопка Заменить всё.
Добавлено: 27 окт 2005, 13:28
Zigi
В том то вся и беда, что 1000 имён, причем каждое имя, за редким исключением, используется только в одной формуле.
Что бы было понятно о чем речь. попробую подробно объяснить:
Каждое имя ссылается только на одну ячейку, т.е. в меню "Вставка/Имя" имени "Rs10381" прописана формула "=Свод!$B$13", на другом листе в ячейке используется формула "=Rs10381". И таких вот Rs-ов больше тысячи. Даже не используется ссылка на диапозон ячеек.
Очень хочется привести все это в божеский вид. И заменой тут особо не поможешь, проще руками все перессылить, но уж больно это долго и муторно

Добавлено: 27 окт 2005, 14:26
pashulka
В таком случае Ваше возмущение понятно. Что касается решения поставленной задачи, то можно попробовать использовать макрос, но только не в оригигале … мало ли что …
Код: Выделить всё
Dim iName As Name: Dim iList As Worksheet
For Each iName In ThisWorkbook.Names
iRefersTo = Mid(iName.RefersTo, 2, 1000)
For Each iList In Worksheets
iList.UsedRange.Replace What:=iName.Name, _
Replacement:=iRefersTo, LookAt:=xlWhole
Next
iName.Delete
Next
Добавлено: 27 окт 2005, 14:45
Zigi
pashulka, спасибо огромное за ответ, я тоже не сидел сложа руки,
получилось примерно то же самое. И самое удивительное что работает :lol:
Код: Выделить всё
Dim i As Name
For Each i In ActiveWorkbook.Names
i.RefersToRange.Select
Selection.Replace What:="=" & i.Name, Replacement:=i, LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False
Добавлено: 27 окт 2005, 15:03
pashulka
Вы уверены, что работает … вопрос не праздный, так как свойство .RefersToRange возвращает об'ект Range, который служит "источником" для имени. При этом формула, которая содержит подобное имя находится в совершенно другой ячейке, а стало быть замены не произойдет. Вдобавок, если формула выглядит так =100+Rs10381, то и здесь мы получим облом и т.д.