powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Функция EXACT
18 сообщений из 18, страница 1 из 1
Функция EXACT
    #33543261
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как в VBA будет выглядеть формула
Range("B1").FormulaArray = "=AND(EXACT(RC[-1],R[1]C[-1]:R[99]C[-1]))"
по сути надо сравнить значение с диапазоном ячеек,
и если хотя бы одно значение не совпадает надо выйти из проги
уж очень не хочется бегать по строкам
помогите плиз
...
Рейтинг: 0 / 0
Функция EXACT
    #33543310
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodorКак в VBA будет выглядеть формула
Range("B1").FormulaArray = "=AND(EXACT(""A1"",""A2:A100""))"
по сути надо сравнить значение с диапазоном ячеек,
и если хотя бы одно значение не совпадает надо выйти из проги
уж очень не хочется бегать по строкам
помогите плиз
...
Рейтинг: 0 / 0
Функция EXACT
    #33543658
Код: plaintext
1.
    If IsError(Application.Match(Range("A1"), Range("A2:A20"),  0 )) _
      Then Exit Sub
...
Рейтинг: 0 / 0
Функция EXACT
    #33543795
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2
Код: plaintext
1.
    If IsError(Application.Match(Range("A1"), Range("A2:A20"),  0 )) _
      Then Exit Sub

задача немного другая
надо найти не А1, а любое отличающееся от А1
...
Рейтинг: 0 / 0
Функция EXACT
    #33543978
Допустим A1 = 100.

Диапазон A2:A20 = 2,3,4,...,20.

Если A1 не соответствует не одному значению в диапазоне A2:A20, то выход из процедуры, как ты написал.

vkodorнадо найти не А1, а любое отличающееся от А1

В моем примере они все отличаются от A1, нет ни одного соответствия или я чего-то не догоняю.
...
Рейтинг: 0 / 0
Функция EXACT
    #33544024
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2Допустим A1 = 100.

Диапазон A2:A20 = 2,3,4,...,20.

Если A1 не соответствует не одному значению в диапазоне A2:A20, то выход из процедуры, как ты написал.

vkodorнадо найти не А1, а любое отличающееся от А1

В моем примере они все отличаются от A1, нет ни одного соответствия или я чего-то не догоняю.

да наверно я не так разяснил
Допустим в A1 = 100.
Диапазон A2:A20 = 100,100,4,5,...,100.

в диапозоне значение А1 обязательно присутствует
надо найти "4" или "5" или др., т.е. не равное "100"
...
Рейтинг: 0 / 0
Функция EXACT
    #33544082
Т.е. нужно возвратить массив отличающихся значению?
...
Рейтинг: 0 / 0
Функция EXACT
    #33544126
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2Т.е. нужно возвратить массив отличающихся значению?
не обязательно, нужно выйти из программы при нахождении хотя бы одного отличающегося

Range("B1").FormulaArray = "=AND(EXACT(""A1"",""A2:A100""))"
результат этой формулы True (если в диапозоне "А1:А20" все ячейки равны 100)
и False (если хотя бы одна не равна 100)
...
Рейтинг: 0 / 0
Функция EXACT
    #33544497
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Функция EXACT
    #33545303
А перекинуть значения диапазона А1:А20 в массив и с ним работать, все же быстрее чем с ячейками.
...
Рейтинг: 0 / 0
Функция EXACT
    #33545393
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2А перекинуть значения диапазона А1:А20 в массив и с ним работать, все же быстрее чем с ячейками.
Перекинуть в массив? Как? Тем же перебором строк?

Код: plaintext
1.
2.
3.
4.
Dim myArr()
i = Cells(Rows.Count,  1 ).End(xlUp).Row
For x =  2  To i
    myArr(x -  2 ) = Range("A" & x)
Next x
?

так наверно уж лутше так
Код: plaintext
1.
2.
3.
i = Cells(Rows.Count,  1 ).End(xlUp).Row
For x =  2  To i
    If Cells(x,  1 ).Value <> Cells( 1 ,  1 ).Value Then Exit Sub
Next x

пока решил задачу так, благо извесны условия (в диапозоне могут быть только тексты от 01 до 14)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    With ThisWorkbook.Worksheets("Otchet")
        i = .Cells(Rows.Count,  1 ).End(xlUp).Row
        a = .Range("A2").Value
        b = Val(a) +  1 
        Do
            If b >  0  And b <  10  Then c = "0" & Val(b) Else c = CStr((b))
            If Not .Range("A3:A" & i).Find(c) Is Nothing Then Exit Sub
                
            If b =  15  Then b =  0 
            b = Val(b) +  1 
        Loop While Val(a) <> b
    End With

но хотелось решить обобщённую задачу
сравнение одной ячейки с диапозоном без перебора диапозона
ведь спомощью функций в листе это возможно (ctr+shift+enter).
...
Рейтинг: 0 / 0
Функция EXACT
    #33545512
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Function X( _
  rng1 As Range, _
  rng2 As Range) As Boolean
  
    Dim avarData() As Variant
    Dim avarItem As Variant
    
    avarData = rng2.Value
    
    For Each avarItem In avarData
        If avarItem <> rng1.Value Then
            X = True
            Exit For
        End If
    Next
End Function

Sub Y()
    If X(Range("A1"), Range("A2:A20")) Then Exit Sub
    
    MsgBox "Test"
End Sub
...
Рейтинг: 0 / 0
Функция EXACT
    #33545604
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Function X( _
  rng1 As Range, _
  rng2 As Range) As Boolean
  
    Dim avarData() As Variant
    Dim avarItem As Variant
    
    avarData = rng2.Value
    
    For Each avarItem In avarData
        If avarItem <> rng1.Value Then
            X = True
            Exit For
        End If
    Next
End Function

Sub Y()
    If X(Range("A1"), Range("A2:A20")) Then Exit Sub
    
    MsgBox "Test"
End Sub


супер, спасибо.
но задача похоже остаётся открытой
Код: plaintext
1.
2.
3.
If avarItem <> rng1.Value Then
            X = True
            Exit For
        End If
ведь это тоже перебор массива
я предполагал что-то типа
Код: plaintext
 If rng1.Value <> WorksheetFunction.And(rng2.Value) Then Exit Sub
или
Код: plaintext
 If rng1.Value <> Array(WorksheetFunction.And(rng2.Value)) Then Exit Sub
...
Рейтинг: 0 / 0
Функция EXACT
    #33545686
Я понял, как ты хочешь. Я всего лишь предложил альтернативный вариант.
...
Рейтинг: 0 / 0
Функция EXACT
    #33546754
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашёл таки

Код: plaintext
1.
2.
On Error Resume Next
Set r1 = ActiveSheet.Columns("A").ColumnDifferences(Comparison:=ActiveSheet.Range("A1"))
If Error =  0  Then r1.Select Else Exit Sub
...
Рейтинг: 0 / 0
Функция EXACT
    #33546937
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если столбец имеет имя тогда
Код: plaintext
1.
Set r1 = ActiveSheet.Columns("A").ColumnDifferences(Comparison:=ActiveSheet.Range("A2"))
If r1.Count >  1   Then Exit Sub
...
Рейтинг: 0 / 0
Функция EXACT
    #33547134
А, что, в предыдущем примере ты указываешь столбец без имени?

И во втором примере разве On Error Resume Next не нужно?
...
Рейтинг: 0 / 0
Функция EXACT
    #33547357
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2А, что, в предыдущем примере ты указываешь столбец без имени?

И во втором примере разве On Error Resume Next не нужно?
наверно неправильно выразился
имел ввиду следующее
A1-"номер отдела"
A2,A3,A4,A5...A10 - 10,10,20,10...20

в такой ситуации одно отличие обязательно есть и соответственно On Resume не нужно
можно работать с диапозоном наверное это наииболее общий вариант
Код: plaintext
1.
2.
3.
4.
    Dim r1 As Range
    i = Cells(Rows.Count,  1 ).End(xlUp).Row
    On Error Resume Next
    Set r1 = Range("A3:A" & i).ColumnDifferences(Comparison:=Range("A2"))
    If Err.Number <>  0  Then Exit Sub
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Функция EXACT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]