Страницы: 1
RSS
Замена в формулах названий ячеек (поименованные) их адресами
 
Друзья, добрый день!  
Помогите, пожалуйста, разобраться со следующей проблемой:  
есть лист, на котором около 200 поименованных ячеек и хренова туча формул, которые ссылаются на эти ячейки. Небходимо в формулах заменить названия ячеек (поименованные) их адресами. Например, сейчас так: =А1*Процент, а надо так: =А1*В1.  
Как бы это сделать?  
Заранее спасибо
 
Интересная задачка! Ведь команда "применить имена" есть, а обратно нет!  
 
Пример бы...
 
{quote}{login=The_Prist}{date=26.10.2010 04:47}{thema=}{post}Макросом, думаю как-то так:  
 
Sub Macro1()  
   Dim oName As Name, rFndRng As Object  
   For Each oName In ActiveWorkbook.Names  
       With ActiveSheet.UsedRange  
           Set rFndRng = .Find(oName.NameLocal, , xlFormulas, xlPart)  
           If Not rFndRng Is Nothing Then  
               Do  
                   rFndRng.FormulaLocal = Replace(rFndRng.FormulaLocal, oName.NameLocal, Replace(oName.RefersToLocal, "=", ""))  
                   Set rFndRng = .FindNext(rFndRng)  
               Loop While Not rFndRng Is Nothing  
           End If  
       End With  
   Next oName  
End Sub  
 
Возможно, придется еще проход и по именам на листе сделать - но это уж сами.{/post}{/quote}Возможны ошибки, если часть одного имени содержит другое имя. (точка1 и точка10, например, и т.п.)
 
Имена как раз все похожие! см. пример
 
имена ячеек почти одинаковые - см. пример
 
> Возможны ошибки, если часть одного имени содержит другое имя. (точка1 и точка10, например, и т.п.)  
 
Михаил, фдисятку!  
Что делать - брать список имен, сортировать по убыванию...
 
Или: сначала скопировать формулу в текстовую строку, заменить имя на адрес, сделать Evaluate. Если возникает ошибка или результат отличается от значения ячейки - не обновлять формулу ячейки.
 
А если что-то типа такого алгоритма:  
- выделяем ячейки с формулами;  
- по-очереди проверяем влияющие ячейки;  
- если влияющая ячейка именованная, заменяем имя на адрес.  
Если это, конечно, возможно.
 
{quote}{login=Михаил}{date=26.10.2010 05:19}{thema=}{post}А если что-то типа такого алгоритма:  
- выделяем ячейки с формулами;  
- по-очереди проверяем влияющие ячейки;  
- если влияющая ячейка именованная, заменяем имя на адрес.  
Если это, конечно, возможно.{/post}{/quote}  
 
Звучит красиво. вот только как это воплотить в VBA?
 
Я уже обдумал нечто подобное: для каждого имени получить диапазон зависимых ячеек  
oName.RefersTo.DirectDependents  
и в них позаменять имя.  
Но если в ячейке используется несколько похожих имен...
 
Еще вариант - изменить макросом все имена: имя & "_", к примеру.    
Получим: ячейка1_ ; ячейка11_ ; ячейка112_ и т.д.
 
{quote}{login=The_Prist}{date=26.10.2010 05:43}{thema=Re: }{post}Наваял такой вот код. См.вложение.{/post}{/quote}  
Если применить этот код к Примеру, то в последней (10) строке макрос почему-то заменяет на 30 строку
 
А почему "посмотреть код" не работает?
 
Грабли, однако... Уже наступали... Не выручит стандартное: Использовать в формуле, Вставить имена, Все имена? Получим, к примеру, в А1 "asd", в В1 - "=Лист1!$L$2:$L$3"...  
29332
 
{quote}{login=Z}{date=26.10.2010 05:56}{thema=}{post}Грабли, однако... Уже наступали... Не выручит стандартное: Использовать в формуле, Вставить имена, Все имена? Получим, к примеру, в А1 "asd", в В1 - "=Лист1!$L$2:$L$3"...  
29332{/post}{/quote}  
Что-то я вообще ничего не понял, кроме слова Грабли
 
{quote}{login=The_Prist}{date=26.10.2010 05:58}{thema=}{post}Ну да. Сортировку сделал, а проход на обратный не изменил.    
 
P.S. Теперь "Посмотреть код" работает.{/post}{/quote}  
По-моему в этот раз удачно! :) большое спасибо!
 
Всем здравствуйте!  
А при таком варианте как заменить?
Страницы: 1
Читают тему
Наверх