Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как проверить ячейки на идентичность? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Как проверить ячейки на идентичность?
Формуляр Дата: Вторник, 23.08.2011, 12:06 | Сообщение № 1
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
День добрый!
Вроде бы, элементарная задача:
в процессе перебора ячеек диапазона нужно исключить конкретную ячейку, заданную тоже как Range.
Сейчас использую сравнение адресов
If lookup_value.Address(External:=True) = lookup_array.Cells(txtNum).Address(External:=True) Then

но как-то глупо это выглядит и неэффективно.


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеДень добрый!
Вроде бы, элементарная задача:
в процессе перебора ячеек диапазона нужно исключить конкретную ячейку, заданную тоже как Range.
Сейчас использую сравнение адресов
If lookup_value.Address(External:=True) = lookup_array.Cells(txtNum).Address(External:=True) Then

но как-то глупо это выглядит и неэффективно.

Автор - Формуляр
Дата добавления - 23.08.2011 в 12:06
Саня Дата: Вторник, 23.08.2011, 13:35 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
если правильно понял, и если идет речь о сравнении ячеек (не диапазонов с количеством ячеек >1), то:
[vba]
Код
Dim cell As Range
Dim r As Range

Set r = Range("A2")

For Each cell In Selection
      Dim b As Boolean
      b = Not (Intersect(cell, r) Is Nothing)
      If b Then Debug.Print cell.Address
Next cell
[/vba]
 
Ответить
Сообщениеесли правильно понял, и если идет речь о сравнении ячеек (не диапазонов с количеством ячеек >1), то:
[vba]
Код
Dim cell As Range
Dim r As Range

Set r = Range("A2")

For Each cell In Selection
      Dim b As Boolean
      b = Not (Intersect(cell, r) Is Nothing)
      If b Then Debug.Print cell.Address
Next cell
[/vba]

Автор - Саня
Дата добавления - 23.08.2011 в 13:35
Формуляр Дата: Вторник, 23.08.2011, 14:02 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Саня,
именно так.
Спасибо.


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеСаня,
именно так.
Спасибо.

Автор - Формуляр
Дата добавления - 23.08.2011 в 14:02
Формуляр Дата: Понедельник, 29.08.2011, 15:57 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Саня,
столкнулся с дополнительной проблемой: похоже, intersect() работает только на одном листе.
Для диапазонов с разных листов даёт :

Quote
Run-time error 1004
Method Intersect of object _Global failed


Можно ли как-то обойтись без дополнительной проверки идентичности листов?
К сообщению приложен файл: Intersect.xls (20.5 Kb)


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Понедельник, 29.08.2011, 15:59
 
Ответить
СообщениеСаня,
столкнулся с дополнительной проблемой: похоже, intersect() работает только на одном листе.
Для диапазонов с разных листов даёт :

Quote
Run-time error 1004
Method Intersect of object _Global failed


Можно ли как-то обойтись без дополнительной проверки идентичности листов?

Автор - Формуляр
Дата добавления - 29.08.2011 в 15:57
Саня Дата: Понедельник, 29.08.2011, 22:47 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
само собой - как можно пересечь два диапазона с разных листов?
получается, что я не понимаю, что ты ищешь...
 
Ответить
Сообщениесамо собой - как можно пересечь два диапазона с разных листов?
получается, что я не понимаю, что ты ищешь...

Автор - Саня
Дата добавления - 29.08.2011 в 22:47
Формуляр Дата: Понедельник, 29.08.2011, 23:00 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Да искать-то - ничего не ищу.
Мне при поиске максимально похожей текствой строки в массиве нужно исключить строку-образец, в том случае, если она в нём (в массиве этом) содержится.
Где массив, а где образец - наперёд неизвестно - это пользовательские аргументы UDF.
Вот мне для каждой ячейки массива и надо проверить - не идентична ли она ячейке с искомым образцом.
см. Простая метрика сходства текстовых строк

Quote (Саня)
само собой - как можно пересечь два диапазона с разных листов?

А чего бы не вернуть было тот же Nothing? В падлу ему что ли? Application Class как-никак - не какой-нибудь Worksheet. angry


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Вторник, 30.08.2011, 00:23
 
Ответить
СообщениеДа искать-то - ничего не ищу.
Мне при поиске максимально похожей текствой строки в массиве нужно исключить строку-образец, в том случае, если она в нём (в массиве этом) содержится.
Где массив, а где образец - наперёд неизвестно - это пользовательские аргументы UDF.
Вот мне для каждой ячейки массива и надо проверить - не идентична ли она ячейке с искомым образцом.
см. Простая метрика сходства текстовых строк

Quote (Саня)
само собой - как можно пересечь два диапазона с разных листов?

А чего бы не вернуть было тот же Nothing? В падлу ему что ли? Application Class как-никак - не какой-нибудь Worksheet. angry

Автор - Формуляр
Дата добавления - 29.08.2011 в 23:00
Саня Дата: Вторник, 30.08.2011, 11:20 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
ему не в падлу, ему в лом

можа так?
[vba]
Код
Dim cell As Range
Dim r As Range
Set r = Range("A2")

dim rIntersection as range
on error resume next
For Each cell In Selection       
       set rIntersection = Intersect(cell, r)
       'if err=0 then ' или
       if not rIntersection is nothing then
          Debug.Print cell.Address
       end if
Next cell
on error goto 0
[/vba]
 
Ответить
Сообщениеему не в падлу, ему в лом

можа так?
[vba]
Код
Dim cell As Range
Dim r As Range
Set r = Range("A2")

dim rIntersection as range
on error resume next
For Each cell In Selection       
       set rIntersection = Intersect(cell, r)
       'if err=0 then ' или
       if not rIntersection is nothing then
          Debug.Print cell.Address
       end if
Next cell
on error goto 0
[/vba]

Автор - Саня
Дата добавления - 30.08.2011 в 11:20
Формуляр Дата: Вторник, 30.08.2011, 12:06 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Саня,
Спасибо! Так, пожалуй, можно.
Только мне, что-то всё больше начинает нравится первоначальный корявый вариант со сравнением адресов ...

Странная, всё-таки, ситуация: есть 2 ссылки на один и тот же (возможно) объект - и нет простого способа это проверить. wacko


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеСаня,
Спасибо! Так, пожалуй, можно.
Только мне, что-то всё больше начинает нравится первоначальный корявый вариант со сравнением адресов ...

Странная, всё-таки, ситуация: есть 2 ссылки на один и тот же (возможно) объект - и нет простого способа это проверить. wacko

Автор - Формуляр
Дата добавления - 30.08.2011 в 12:06
Гость Дата: Вторник, 30.08.2011, 21:25 | Сообщение № 9
Группа: Гости
[vba]
Код
Dim cell As Range
Dim r As String

r = Range("Sheet1!A2").Address

For Each cell In Range("Sheet2!A1:A3")
Dim b As Boolean
If cell.Address = r Then
b = True: Exit For
End If
Next cell
If b Then Debug.Print cell.Address
End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код
Dim cell As Range
Dim r As String

r = Range("Sheet1!A2").Address

For Each cell In Range("Sheet2!A1:A3")
Dim b As Boolean
If cell.Address = r Then
b = True: Exit For
End If
Next cell
If b Then Debug.Print cell.Address
End Sub
[/vba]

Автор - Гость
Дата добавления - 30.08.2011 в 21:25
Формуляр Дата: Среда, 31.08.2011, 09:59 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Судя по тому, что тема благополучно завершила диалектический цикл, поймав себя за хвост - можно её закрывать.

Саня, спасибо за поддержку - по крайней мере, избавился от ощущения, что не знаю какой-то простой штуки, известной всем. smile


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Среда, 31.08.2011, 10:02
 
Ответить
СообщениеСудя по тому, что тема благополучно завершила диалектический цикл, поймав себя за хвост - можно её закрывать.

Саня, спасибо за поддержку - по крайней мере, избавился от ощущения, что не знаю какой-то простой штуки, известной всем. smile

Автор - Формуляр
Дата добавления - 31.08.2011 в 09:59
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!