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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 12:13   #1
Aleks2215
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 30
Вопрос Проверка массивов

Имеются 3 одномерных массива в столбец
q0___q1___q2
q1___q0___q1
q2___q2___q3
Как сделать проверку, что если в первом столбце нет элемента, соответствующего элементам или элементу во втором и третьем столбце( в данном случае это q3, т.к. он не встречается в первом столбце), то выполняется какое то действие. Подскажите пожалуйста
Aleks2215 вне форума Ответить с цитированием
Старый 09.11.2010, 12:25   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Через словарь или коллекцию?
Создаём коллекцию из первого столбца, затем перебором элементов пытаемся добавить второй и третий столбец. Как только добавилось - выполняется какое то действие.
Со словарём можно проверить наличие элемента.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.11.2010, 12:34   #3
Aleks2215
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 30
По умолчанию

По словарю это через like? можешь показать, как через коллекцию проверить, а то я с этим еще не сталкивался)
Aleks2215 вне форума Ответить с цитированием
Старый 09.11.2010, 12:37   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Нет, словарь - это Scripting.Dictionary
Коллекция - пример:

Function UniqueValues(ByVal arr) As Collection
' функция получает в качестве параметра массив любой размерности
' возвращает коллекцию уникальных НЕПУСТЫХ значений
Set UniqueValues = New Collection: On Error Resume Next
For Each v In arr
v = Trim(v): If Len(v) Then UniqueValues.Add CStr(v), CStr(v)
Next v
End Function

Алгоритм работы примерно одинаковый - добавляются уникальные, потом проверяется наличие.
Конкретный пример писать пока нет времени, а другие примеры тут уже были не раз.

Написал:
Код:
Option Explicit

Sub check()
    Dim a(), b(), c(), oDict As Object, i As Long, Temp As String

    a = Sheets(1).Range("A1:A" & Sheets(1).Range("A" & Rows.Count).End(xlUp).Row).Value
    Set oDict = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(a)
        Temp = Trim(a(i, 1))
        If Not oDict.Exists(Temp) Then
            oDict.Add Temp, CStr(1)
        End If
    Next

    b = Sheets(1).Range("B1:B" & Sheets(1).Range("B" & Rows.Count).End(xlUp).Row).Value
    For i = 1 To UBound(b)
        Temp = Trim(b(i, 1))
        If Not oDict.Exists(Temp) Then MsgBox "Alarma! " & Temp
    Next

    c = Sheets(1).Range("C1:C" & Sheets(1).Range("C" & Rows.Count).End(xlUp).Row).Value
    For i = 1 To UBound(c)
        Temp = Trim(c(i, 1))
        If Not oDict.Exists(Temp) Then MsgBox "Alarma! " & Temp
    Next

End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 09.11.2010 в 13:00.
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив массивов?? Kolik317 Общие вопросы Delphi 4 26.09.2010 09:13
Сортировка массивов lulik Паскаль, Turbo Pascal, PascalABC.NET 1 10.06.2010 20:43
дисперсия массивов And_DaviD Общие вопросы C/C++ 3 16.02.2010 19:45
использование массивов! ...Оленька... Паскаль, Turbo Pascal, PascalABC.NET 2 22.12.2008 11:02