Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2009, 17:44   #1
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию Количествл ссылок

Доброго времени суток!
В некотором диапазоне в ячейках содержатся формулы, ссылки и величины. Необходимо определить, в скольких ячейках присутствует ссылка на конкретный лист.
Еще нужно определить – нет ли повторяющихся ссылок (на одни и те же ячейки).
Первая часть мне показалась простой, но мой код не сработал???
Код:
Sub Test()
f = 0
txt = "Лист"
With ThisWorkbook.Worksheets(5)
    For i = 8 To 729
       For j = 5 To 49
          If .Cells(i, j) Like "*" & txt & "*" Then
            f = f + 1
            End If
    Next j: Next i
End With
MsgBox (f)
End Sub
Подскажите, что я сделал не так???
Вторую часть легко можно было бы решить через аналог Pascal’евского множества (если такой есть конечно). Вот только я не знаю его синтаксиса. Подскажите, как можно его реализовать в VBA, или как можно это сделать по-другому.
mephist вне форума Ответить с цитированием
Старый 01.09.2009, 17:56   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Попробуйте заменить .Cells(i, j) на .Cells(i, j).Formula, если нужно смотреть только в формулах
motorway вне форума Ответить с цитированием
Старый 01.09.2009, 20:15   #3
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию

Спасибо! Очень помогло.
А может мне еще кто-нибудь помочь, чтобы отследить повторение ссылок???
mephist вне форума Ответить с цитированием
Старый 01.09.2009, 21:11   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Нужно именно отслеживание только ссылок вида Лист!Назв.ячейки?
motorway вне форума Ответить с цитированием
Старый 01.09.2009, 22:52   #5
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Если лист только один, а в одной формуле ссылка только на одну ячейку в нем, можно сделать так: поиск в строках адресов ячеек, затем добавление их в массив, а дальше определение дубликатов.

Парсить строку и получать адрес ячейки можно так:
Код:
Sub Кнопка_Щелчок()


a = Range("A1").Formula
For i = 1 To Len(a)
If (Mid(a, i, 1) = "!") Then k = i

Next i

For i = k + 1 To Len(a)
If (IsNumeric(Mid(a, i, 1))) Then l = 1
If (l = 1 And (Not IsNumeric(Mid(a, i, 1)) Or i = Len(a))) Then
l = i
GoTo LAB
End If
Next i
LAB:

If (l = Len(a)) Then cell = Mid(a, k + 1, l - k)
If (l <> Len(a)) Then cell = Mid(a, k + 1, l - (k + 1))
MsgBox (cell)

End Sub
В общем, идея такая. Также может помочь функция "Влияющие ячейки" в Экселе
motorway вне форума Ответить с цитированием
Старый 02.09.2009, 05:50   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Еще нужно определить – нет ли повторяющихся ссылок (на одни и те же ячейки).
Пусть, например, одна из ячеек листа содержит формулу
Код:
=[Книга1.xls]Лист1!$A$3
а другая ячейка содержит формулу
Код:
=СУММ([Книга1.xls]Лист1!$A$1:$A$10)
Как видно, ячейка "A3" участвует в обоих случаях. Считать ли это совпадением?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 03.09.2009, 10:11   #7
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Считать ли это совпадением?
Да, именно такие повторения могут быть.
Пусть на листе заполнено всего четыре ячейки:
В одной содержится =[Книга1.xls]Лист1!$A$3
во второй =[Книга1.xls]Лист1!$A$4
в третьей =[Книга1.xls]Лист1!$A$4
В четвертой =[Книга1.xls]Лист1!$A$3+[Книга1.xls]Лист1!$A$5
Считаем их:
Ссылка на $A$3 встречается только один раз в виде =[Книга1.xls]Лист1!$A$3, а в формулах может встречаться сколько угодно раз, поэтому считаем ее. +1
Ссылка на $A$4 встречается в виде =[Книга1.xls]Лист1!$A$4 дважды, чего быть не должно, поэтому нужно посчитать ее только один раз и отметить цветом. +1
Ссылка на $A$5 не встречается в виде =[Книга1.xls]Лист1!$A$5, но зато есть в формуле, поэтому ее тоже нужно посчтитать.+1
Таким образом я должен получить ответ =3 и пометку, что на А4 есть две ссылки вида =[Книга1.xls]Лист1!$A$4
mephist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Суммирование ссылок mephist Microsoft Office Excel 2 30.07.2009 16:50
Сумма ссылок mephist Microsoft Office Excel 4 24.07.2009 15:44
сохранение ссылок в combobox Denisko Помощь студентам 16 02.06.2009 18:01
Вытаскивание ссылок из текста jocry Общие вопросы Delphi 2 10.02.2009 16:51