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

Вход

Регистрация

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

 

= Мир MS Excel/Сравнения значений в массивах - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнения значений в массивах (Макросы/Sub)
Сравнения значений в массивах
Leprotto Дата: Понедельник, 14.11.2016, 13:42 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 78
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Добрый день!
Не получается к решению прикрутить проверку условия- если значения массивов совпадают, то одно действие, если нет, то другое.
Не уверен, что здесь нужно применять именно массивы. Доверяю Вашему экспертному мнению ))
Пример приложил
К сообщению приложен файл: mas_vs_mas.xlsm(18Kb)
 
Ответить
СообщениеДобрый день!
Не получается к решению прикрутить проверку условия- если значения массивов совпадают, то одно действие, если нет, то другое.
Не уверен, что здесь нужно применять именно массивы. Доверяю Вашему экспертному мнению ))
Пример приложил

Автор - Leprotto
Дата добавления - 14.11.2016 в 13:42
Udik Дата: Понедельник, 14.11.2016, 14:56 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1214
Репутация: 153 ±
Замечаний: 0% ±

Excel 2013
Так массивы нельзя проверить разом, надо поочерёдно каждый элемент.
[vba]
Код

Sub test()
  Dim shtX As Worksheet
  Dim rngNew As Range
  Dim rngOld As Range
  Dim unoCell As Range
  Dim flag As Boolean
  Dim vNew
  Dim vOld
  
  Set shtX = ThisWorkbook.Worksheets(1)
  Set rngNew = shtX.Range("vNew")
  Set rngOld = shtX.Range("vOld")
  
  vNew = rngNew
  vOld = rngOld
  flag = True
  For Each unoCell In rngNew
  If unoCell.Value <> unoCell.Offset(rngOld.Row - rngNew.Row, rngOld.Column - rngNew.Column).Value Then

  flag = False
  Exit For
  End If
  Next
  If flag Then
    MsgBox "значения совпадают"   'если все значения массива совпадают
  Else
    MsgBox "значения различаются" 'если хотя бы одно не совпадает
  End If

End Sub

[/vba]
К сообщению приложен файл: 0275727.xlsm(20Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Понедельник, 14.11.2016, 14:59
 
Ответить
СообщениеТак массивы нельзя проверить разом, надо поочерёдно каждый элемент.
[vba]
Код

Sub test()
  Dim shtX As Worksheet
  Dim rngNew As Range
  Dim rngOld As Range
  Dim unoCell As Range
  Dim flag As Boolean
  Dim vNew
  Dim vOld
  
  Set shtX = ThisWorkbook.Worksheets(1)
  Set rngNew = shtX.Range("vNew")
  Set rngOld = shtX.Range("vOld")
  
  vNew = rngNew
  vOld = rngOld
  flag = True
  For Each unoCell In rngNew
  If unoCell.Value <> unoCell.Offset(rngOld.Row - rngNew.Row, rngOld.Column - rngNew.Column).Value Then

  flag = False
  Exit For
  End If
  Next
  If flag Then
    MsgBox "значения совпадают"   'если все значения массива совпадают
  Else
    MsgBox "значения различаются" 'если хотя бы одно не совпадает
  End If

End Sub

[/vba]

Автор - Udik
Дата добавления - 14.11.2016 в 14:56
Leprotto Дата: Понедельник, 14.11.2016, 14:58 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 78
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Udik, понял, СПАСИБО!!!
 
Ответить
СообщениеUdik, понял, СПАСИБО!!!

Автор - Leprotto
Дата добавления - 14.11.2016 в 14:58
nilem Дата: Понедельник, 14.11.2016, 20:11 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 1057
Репутация: 400 ±
Замечаний: 0% ±

Excel 2013
вариант
[vba]
Код
Sub test2()
Dim vNew, vOld
vNew = Range("vNew").Value
vOld = Range("vOld").Value

With Application
    If Join(.Index(vNew, 1, 0)) = Join(.Index(vOld, 1, 0)) Then
        MsgBox "значения совпадают"   'если все значения массива совпадают
    Else
        MsgBox "значения различаются"    'если хотя бы одно не совпадает
    End If
End With

End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениевариант
[vba]
Код
Sub test2()
Dim vNew, vOld
vNew = Range("vNew").Value
vOld = Range("vOld").Value

With Application
    If Join(.Index(vNew, 1, 0)) = Join(.Index(vOld, 1, 0)) Then
        MsgBox "значения совпадают"   'если все значения массива совпадают
    Else
        MsgBox "значения различаются"    'если хотя бы одно не совпадает
    End If
End With

End Sub
[/vba]

Автор - nilem
Дата добавления - 14.11.2016 в 20:11
krosav4ig Дата: Вторник, 15.11.2016, 00:58 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1345
Репутация: 547 ±
Замечаний: 0% ±

Excel 2007, 2013
еще вариант

[vba]
Код
Sub test()
    Dim shtX As Worksheet
    Dim rngNew As Range
    Dim rngOld As Range
    
    Set shtX = ThisWorkbook.Worksheets(1)
    Set rngNew = shtX.Range("vNew")
    Set rngOld = shtX.Range("vOld")

    If UBound(Filter(Application.CountIf(rngNew, rngOld.Value), 0)) = -1 Then
        MsgBox "значения совпадают"   'если все значения массива совпадают
    Else
        MsgBox "значения различаются" 'если хотя бы одно не совпадает
    End If
    
End Sub
[/vba]


(_)Õvõ(_)
 
Ответить
Сообщениееще вариант

[vba]
Код
Sub test()
    Dim shtX As Worksheet
    Dim rngNew As Range
    Dim rngOld As Range
    
    Set shtX = ThisWorkbook.Worksheets(1)
    Set rngNew = shtX.Range("vNew")
    Set rngOld = shtX.Range("vOld")

    If UBound(Filter(Application.CountIf(rngNew, rngOld.Value), 0)) = -1 Then
        MsgBox "значения совпадают"   'если все значения массива совпадают
    Else
        MsgBox "значения различаются" 'если хотя бы одно не совпадает
    End If
    
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 15.11.2016 в 00:58
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнения значений в массивах (Макросы/Sub)
Страница 1 из 11
Поиск:

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