Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 16

Проверка строк на совпадения

01.11.2012, 21:26. Показов 5318. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья имеется 2 таблицы , пример :
1 лист -

203040
302011
103020

2 лист -

214030
201150
101530

Макрос должен брать 1ю строчку на 1м листе( 20 30 40 ) и сравнивать её со всеми строчками 2го листа, а совпадения чисел выводить на с А17 ячейки и до конца ...

то есть
20 30 40 сравнивается с 21 40 30 - тут 2 совпадения и оно записывается с боку на 1м листе записывается с А17
далее 20 30 40 сравнивается с 20 11 50 - тут 1 совпадение записывается в А18
далее 20 30 40 сравнивается 10 15 30 - тут 1 совпадение записывается в А 19
прм:
214030     211
201150        
101530        
потом 2я строка на первом листе сравнивается со всеми и так же записывается но уже на 2й строке то есть на B17 и так далее...

есть какие то предложения?

2й день думаю

вот что накатал:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub CommandButton6_Click()
For s = 1 To 3 '3 строки'
For i = 1 To 3 '3 строки на 1м листе'
For i1 = 1 To 5 '3 строки на 2м листе'
If Worksheets(1).Cells(i, s) = Worksheets(2).Cells(i1, s) Then
a = a + 1 'счетчик подсчета'
End If
Next
Next
End Sub
а вот вывести как это((
Спасибо за любые предложения
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.11.2012, 21:26
Ответы с готовыми решениями:

Проверка вводимой информации на совпадения
Добрый день. Подскажите, пожалуйста, как мне осуществить такую штучку: при вводе информации сделать проверку на сходство данных с другой...

Проверка совпадения имени листа с именем из таблицы
Здравствуйте. Есть задача, в которой необходимо сравнить данные из таблицы с данными из справочников. Есть 7 брендов, из которых 6...

Сравнение строк по значению одного столбца и перезапись если есть совпадения
Всем привет! Я тут уже столько наспрашивала...Но мне это оч тяжело дается.. может знает кто как поступить в след. ситуации: у меня есть...

10
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
01.11.2012, 21:39
Lonsdalesar, нестыковка: вы пишите: записывать нужно в A17, A18, A19 (т.е. в разные строки), но у вас 20 30 40 2 1 1, т.е. записывается в разные столбцы.
0
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 16
01.11.2012, 21:54  [ТС]
Цитата Сообщение от Скрипт Посмотреть сообщение
Lonsdalesar, нестыковка: вы пишите: записывать нужно в A17, A18, A19 (т.е. в разные строки), но у вас 20 30 40 2 1 1, т.е. записывается в разные столбцы.
Ой , ошибся я сильно...
Вот вообщем скрин
нужно выводить сравнения с Q1 по S1 , потом с Q2 по S2 и тд...
Миниатюры
Проверка строк на совпадения  
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
01.11.2012, 22:30
Формулой можно сделать
Растягивайте формулу вниз и вправо.
Вложения
Тип файла: xls Проверка строк на совпадения.xls (15.0 Кб, 35 просмотров)
1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
01.11.2012, 22:55
Условия выполнения кода:
  1. на первом листе данные находятся в диапазоне A1:C3;
  2. на втором листе данные находятся в диапазоне A1:C3.
Использовал массивы, чтобы проще было код писать и чтобы код быстрее работал.

Если данных много, то код будет по идее долго выполняться. Чтобы ускорить, можно сразу данные поместить в два массива: в один массив - данные из первого листа, во второй массив - данные из второго листа.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Sub Procedure_1()
 
    Dim Лист_1 As Long, Лист_2 As Long
    Dim i As Long, j As Long, k As Long
    Dim vArray_1() As Variant, vArray_2() As Variant
    Dim lNumber As Long
    
    'Переменная k используется для записи на первый лист количества совпадений.
    k = 17
    
    'С циклом с Лист_1 двигаемся по первому листу.
    For Лист_1 = 1 To 3 Step 1
    
        'Берём в массив числа из первого листа.
        'Формируется двумерный массив: из одной строки и трёх столбцов.
        vArray_1() = Worksheets(1).Range("A" & Лист_1 & ":C" & Лист_1).Value
    
        'С циклом с Лист_2 двигаемся по второму листу.
        For Лист_2 = 1 To 3 Step 1
        
            'Берём в массив числа из второго листа.
            vArray_2() = Worksheets(2).Range("A" & Лист_2 & ":C" & Лист_2).Value
        
            'С циклом с i просматривается 3 ячейки в строке на первом листе.
            For i = 1 To 3 Step 1
            
                'С циклом с j просматриваем 3 ячейки в строке во втором листе.
                For j = 1 To 3 Step 1
                
                    If vArray_1(1, i) = vArray_2(1, j) Then
                        'Запоминаем, сколько было совпадений.
                        lNumber = lNumber + 1
                        'Переходим к следующей ячейки в строке на первом лисет.
                        Exit For
                    End If
                    
                Next j
                
            Next i
            
            'Если совпадения были.
            If lNumber <> 0 Then
                Worksheets(1).Cells(Лист_1, k).Value = lNumber
                k = k + 1
                lNumber = 0
            End If
            
        Next Лист_2
        
        'Подготавливаем k к следующему использованию.
        k = 17
        
    Next Лист_1
 
End Sub
1
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 16
01.11.2012, 23:22  [ТС]
Спасибо , очень помогли! =*
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
02.11.2012, 00:43
Лучший ответ Сообщение было отмечено как решение

Решение

Делал на файле Казанского.
Поэтому выгрузка под его результатом.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Option Explicit
 
Sub Perebor()    ' словарь в словаре
    Dim a, i&, ii&, iii&, t$, n&
 
    With Sheets(2)
        a = .Range("C1", .Cells(.Rows.Count, "A").End(xlUp)).Value
    End With
 
    'запоминаем в словаре цифры с номерами строк в словаре :)
    With CreateObject("Scripting.Dictionary")
        .CompareMode = 1
        For i = 1 To UBound(a)
            For ii = 1 To UBound(a, 2)
                t = a(i, ii)
                If Not .exists(t) Then .Add t, CreateObject("Scripting.Dictionary")
                .Item(t).Item(i) = 0&
            Next
        Next
 
        With Sheets(1)
            a = .Range("C1", .Cells(.Rows.Count, "A").End(xlUp)).Value
        End With
        ReDim c(1 To UBound(a, 1), 1 To UBound(a, 2))
 
        'считаем количество совпадений
        For i = 1 To UBound(a)    'цикл вниз
            For iii = 1 To UBound(a, 1)    'цикл вниз, по номерам строк
                n = 0
                For ii = 1 To UBound(a, 2)    'цикл вправо
                    t = a(i, ii)
                    If .exists(t) Then    'если в словаре есть цифра
                        If .Item(t).exists(iii) Then    'если у неё в словаре есть номер строки
                            n = n + 1
                        End If
                    End If
                Next
                c(i, iii) = n    'записываем результат в массив
            Next
        Next
 
    End With
 
    'выгружаем результат
    [Q6].Resize(UBound(c, 1), UBound(c, 2)) = c
 
End Sub
Должно быть быстро и на больших массивах.
Но не проверял - может нужно скорректировать что-то...
1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
02.11.2012, 04:45
Цитата Сообщение от Lonsdalesar Посмотреть сообщение
Спасибо , очень помогли! =*
до вашего сообщения отвечали 2 человека, поэтому поясните, кто очень помог, а то это загадкой остаётся.
0
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 7
20.06.2017, 09:25
Прошу помощи. Есть два массива которые сравниваю по уникальной комбинации полей
Как мне получить номер строки первого массива или номер строки словаря по которой произошло совпадение? Никак не получается найти решение.

Visual Basic
1
2
3
4
5
6
7
8
For i = 1 To UBound(arr)
    Dic(arr(i, 3) & arr(i, 4)) = i
Next i
For i = 1 To UBound(arr2)
    If Dic.exists(arr2(i, 1) & arr2(i, 2)) Then
       x = Dic.Key
    End If
Next i
Или пояснить, как работает код выше в плане:
Visual Basic
1
'запоминаем в словаре цифры с номерами строк в словаре :)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.06.2017, 09:48
Цитата Сообщение от alferius Посмотреть сообщение
номер строки словаря
- хоть такое "физически" и есть, но не регламентируется и не гарантируется разработчиком. Т.е. можно сказать что такого нет!

Добавлено через 12 минут
Цитата Сообщение от alferius Посмотреть сообщение
Как мне получить номер строки первого массива
Visual Basic
1
If Dic.exists(arr2(i, 1) & arr2(i, 2)) Then x=Dic.item(arr2(i, 1) & arr2(i, 2))
тут конечно удобнее использовать временную переменную t$, как там выше у меня.

Добавлено через 2 минуты
Цитата Сообщение от alferius Посмотреть сообщение
Или пояснить, как работает код выше в плане
- детали уже не помню, но там ведь есть комментарии почти у каждой строки, а если вкратце то - создаём словарь, где у каждого ключа есть свой словарь.
1
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 7
20.06.2017, 09:51
Точно, можно же по ключу обратиться, а он в обоих массивах одинаков. Благодарю сердечно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.06.2017, 09:51
Помогаю со студенческими работами здесь

Проверка совпадения строк
Пишет Fail, что я делаю не так?) #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;stdlib.h&gt; using...

Проверка совпадения строк не работает
Добрый день. Я работаю на CMS Modx. Я хочу сделать так, чтобы при переходе на имя_сайта.рф/имя_документа.pdf открывался документ в...

Как удалить совпадения строк в txt файле (полная копия строк)
К примеру есть текст в обычном txt файлике: 11111 11111 22222 33333 33333 44444 55555

Проверка частичного совпадения
Не работает поиск частичного совпадения!!! SELECT * FROM &quot;DoctorList.db&quot; WHERE (Name Like:Name) OR (Profession...

Проверка массива на совпадения
у меня есть массив в котором содержаться имена. мне надо убрать имена которые повторяются. сделал проверку на 1-ый элемент и 1+1 элемент....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru