Форум программистов, компьютерный форум, киберфорум
MS Office Excel
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130

Сравнение слов и при совпадении, вытаскивание рядом чисел

17.03.2024, 11:57. Показов 3806. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте дорогие специалисты.
Прошу помочь мне справиться с задачей вытаскивания рядом чисел при сравнивании слов в ячейках, чтобы хотя бы при одном совпадении число рядом вытаскивалось.
Я пробовала функцией ВПР, но она до конца не справилась, т.к. сравнивает только 1 ячейку с первой из диапазона, а не диапазон ячеек с диапазоном ячеек.

прикрепила файл с примером, и где я пыталась впр использовать.
там немного описала как должно получиться
Вложения
Тип файла: rar пример вытаскивания рядом данных.rar (20.4 Кб, 28 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.03.2024, 11:57
Ответы с готовыми решениями:

Сравнение ячейки и удаление строки при не совпадении
Есть задача, код работает, необходимо доделать. В ячейке J, назначен ответственный, если изменить ответственного, нужно, чтобы на его...

Сравнение массивов с выводом балла при совпадении
Уважаемые форумчане, прошу прощения, но снова обращаюсь за советом. Прочёл на форуме про сравнение двумерных массивов и вывод совпадений и...

Сравнение ячеек на разных страницах и копирование строки при совпадении
Здравствуйте! Помогите пожалуйста! С vba раньше ничего не связвало, а сейчас появилась огромная производственная необходимость Необходимо...

47
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130
26.06.2024, 11:22  [ТС]
Студворк — интернет-сервис помощи студентам
testuser2, макрос не работает почему то. при нажатии на всплывающий список который вы установили выскакивает такая ошибка.
Дорогой специалист. И можно Вас попросить, сделать 5 отдельных(1 у нас уже есть) макросов, а не со всплывающим списком выбора кол-ва совпадений. Так как я буду в будущем для каждого макроса делать свои диапазоны проявления результата, на данный момент у нас результат вытаскивания должен быть в диапазон Range("U34:AE34"), а в будущем эти диапазоны с результатами вытаскивания будут все разные под каждый макрос.

НО! если эти макросы одинаковые и надо будет просто изменять число с 1 по 5 и далее. сделайте просто 1 макрос и скажите где надо изменять это число чтобы макрос отрабатывал вытаскивая данные при кол-ве совпадений которое мы укажем.
Миниатюры
Сравнение слов и при совпадении, вытаскивание рядом чисел  
0
1409 / 868 / 93
Регистрация: 08.02.2017
Сообщений: 3,702
Записей в блоге: 2
26.06.2024, 11:29
Цитата Сообщение от carolina199x Посмотреть сообщение
выскакивает такая ошибка
Там надо поменять "FindMatches" на "FindMatches_" забыл это сделать
0
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130
26.06.2024, 11:44  [ТС]
testuser2, заменила на FindMatches_ и макрос стал срабатывать. Но он не работает как нужно. при всплывающем списке значение "1", он вытаскивает данные. а при 2 и более уже не вытаскивает.(пустые ячейки выдаёт)

и я попросила 5 отдельных. сделаете так? тот макрос, что вы создавали он идеален, но он работает с 1(наверно 1 попавшимся) совпадением. Его бы как то отредактировать и вставить при каком кол-ве совпадений выдавать вытаскивать данные.
0
1409 / 868 / 93
Регистрация: 08.02.2017
Сообщений: 3,702
Записей в блоге: 2
26.06.2024, 12:19
Цитата Сообщение от carolina199x Посмотреть сообщение
Но он не работает как нужно. при всплывающем списке значение "1", он вытаскивает данные. а при 2 и более уже не вытаскивает.(пустые ячейки выдаёт)
Работает. Просто у вас там нет 4 и 3 совпадения ни для одного из значений. Если в ручную скопировать любое значение из диапазон BC:BL в диапазон "DJS" нужное количество раз, то макрос найдет эту строчку при соответствующем значении в выпадающем списке.

Добавлено через 4 минуты
Цитата Сообщение от testuser2 Посмотреть сообщение
4 и 3
вру, для 3 находит одну строчку там "Atletico" 3 раза попадается.

Добавлено через 4 минуты
Попробуйте поменять строчку
Visual Basic
1
2
arInd(ind, 1) = cntMtch 'на
arInd(ind, 1) >= cntMtch
может это вам надо
1
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130
26.06.2024, 12:47  [ТС]
testuser2, вы не поняли. не про те совпадения имела ввиду. Хотя и этот вариант я просмотрю ещё и может быть он пригодится.
а имела я ввиду совпадения горизонтальные. я же синеньким текстом вам написала в файле. вы видели?
а сейчас зелененьким еще дописала. вот прикрепляю файл.
0
1409 / 868 / 93
Регистрация: 08.02.2017
Сообщений: 3,702
Записей в блоге: 2
26.06.2024, 14:53
Зачастую нужна просто правильная формулировка типа
"выводить строки если общее число совпадений.." короче мне лень сочинять, этож не мой вопрос. Решение:
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
Function FindMatches_(arr1(), arr2(), arr3(), cntMtch&) As Variant() 'v 26.06.24
    Dim row&, clm&, row2&, clm2&, k&, cnt&, clCnt&, ind&, arInd&(), arrOut(), dct As Object
        
    clCnt = UBound(arr3, 2)                              'кол-во столбцов исх. данных
    ReDim arrOut(1 To UBound(arr3), 1 To clCnt)          'результирующий массив
    Set dct = CreateObject("Scripting.Dictionary")       'словарь для поиска совпадений
    ReDim arInd(10000, 1)                                'массив для записи совпадений, их количеств и строк, в которых эти совпадения встретились
    
    For row = 1 To UBound(arr2)
        For clm = 1 To UBound(arr2, 2)
            If Len(arr2(row, clm)) > 0 Then
                If Not dct.Exists(arr2(row, clm)) Then
                    dct.Add arr2(row, clm), row
                End If
            End If
        Next
    Next
    
    For row = 1 To UBound(arr1)
        cnt = 0
        For clm = 1 To UBound(arr1, 2)
            If dct.Exists(arr1(row, clm)) Then
                cnt = cnt + 1
                row2 = dct(arr1(row, clm))
                If cnt = cntMtch Then
                    For clm2 = 1 To clCnt
                        arrOut(row, clm2) = arr3(row2, clm2)
                    Next
                    Exit For
                End If
            End If
        Next
    Next
    
    FindMatches_ = arrOut
End Function
1
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4180 / 2465 / 513
Регистрация: 13.12.2016
Сообщений: 8,386
Записей в блоге: 5
26.06.2024, 15:14
Цитата Сообщение от carolina199x Посмотреть сообщение
вы не поняли. не про те совпадения имела ввиду.
Я то сразу понял...
0
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130
26.06.2024, 16:55  [ТС]
testuser2, УРА работает. прошу прощения. если не доходчиво Вам объясняла. я старалась выделять суть что надо получить разным цветом. Старалась как могла, чтобы Вам сразу стало наглядно понятно.
Макрос выполняет то что задумано. Но для меня не годится. Мне надо каждый макрос в отдельности для каждого кол-ва совпадений. Потому что выводить результаты буду в разные диапазоны, а потом сравнивать.
Сделайте пожалуйста так. Без выпадающего списка.
0
1409 / 868 / 93
Регистрация: 08.02.2017
Сообщений: 3,702
Записей в блоге: 2
27.06.2024, 02:22
Цитата Сообщение от carolina199x Посмотреть сообщение
Но для меня не годится. Мне надо каждый макрос в отдельности для каждого кол-ва совпадений.
Там все уже есть для этого
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub FindMatches(cntMtch&) 'cntMtch - заданное количество совпадений
    Dim arr1(), arr2(), arr3(), arrOut(), lr&
    
    lr = Columns("DV").Find("*", searchdirection:=xlPrevious).row
    arr2 = Range("DJ34:DS" & lr).Value   'где ищем
    arr1 = Range("BC34:BL" & lr).Value   'что ищем
    arr3 = Range("DY34:EI" & lr).Value   'откуда вытаскиваем строки
    
    arrOut = FindMatches_(arr1, arr2, arr3, cntMtch)
    
    Range("U34:AE34").Resize(UBound(arr1)).Value = arrOut 'куда выводим результат
End Sub
1
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130
27.06.2024, 06:08  [ТС]
testuser2, так и не поняла куда это код надо вставлять. ничего не работает.
0
1409 / 868 / 93
Регистрация: 08.02.2017
Сообщений: 3,702
Записей в блоге: 2
27.06.2024, 07:00
Цитата Сообщение от carolina199x Посмотреть сообщение
так и не поняла куда это код надо вставлять. ничего не работает.
Ну так вы не потрудились даже более конкретно описать, детали, что нужно в итоге. Вообще когда люди пишут в раздел vba, от них ожидается хотя бы элементарное знание яызыка, хотябы как использовать, с вашей стороны как-то не очень наблюдается энтузиазм в подобном направлении. Допустим вам надо, чтобы это срабатывало по кнопке - создаете кнопку на рабочем листе, назначаете на нее макрос такой строкой 'FindMatches 2'. Данная кнопка будет выводить отбор по минимальным 2 совпадениями..

Добавлено через 2 минуты
Цитата Сообщение от testuser2 Посмотреть сообщение
ообще когда люди пишут в раздел vba
Огм, а это и не раздел vba, так может и не надо это все сдесь обсуждать ))
0
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130
27.06.2024, 08:17  [ТС]
testuser2, вроде бы старалась описывать всё подробно. прошу прощения что вы не поняли в последний раз.
вы для меня сделали 1 раз всё что надо было. а вот сейчас нет. в VBA я понимаю на уровне просто подправить. и то если скажут где.
0
1409 / 868 / 93
Регистрация: 08.02.2017
Сообщений: 3,702
Записей в блоге: 2
27.06.2024, 08:48
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub FindMatches1()
    Const cntMtch& = 1 '1 - мин. количество совпадений
    Dim arr1(), arr2(), arr3(), arrOut(), lr&
    
    lr = Columns("DV").Find("*", searchdirection:=xlPrevious).row
    arr2 = Range("DJ34:DS" & lr).Value   'где ищем
    arr1 = Range("BC34:BL" & lr).Value   'что ищем
    arr3 = Range("DY34:EI" & lr).Value   'откуда вытаскиваем строки
    
    arrOut = FindMatches_(arr1, arr2, arr3, cntMtch)
    
    Range("U34:AE34").Resize(UBound(arr1)).Value = arrOut 'куда выводим результат
End Sub
1
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130
27.06.2024, 10:18  [ТС]
testuser2, УРА работает! то что доктор прописал. Спасибо Вам большое!

Добавлено через 1 час 4 минуты
АЕ, Хи хи. А вы боялись. Всё таки не такая я не понятливая.
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4180 / 2465 / 513
Регистрация: 13.12.2016
Сообщений: 8,386
Записей в блоге: 5
27.06.2024, 10:49
Цитата Сообщение от carolina199x Посмотреть сообщение
Хи хи. А вы боялись. Всё таки не такая я не понятливая.
Ну во первых я не боялся. И не надо путать понятливость с внятностью изложения. У меня даже нечто подобное в подписи обозначено.
0
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130
27.06.2024, 17:47  [ТС]
testuser2, Дорогой специалист. прошу вас исправьте пожалуйста макрос, который вы мне сделали в ответе от 21.03.2024, 12:48, чтобы при совпадении любого слова по вертикали, вытаскивание не происходило.
прикрепляю файл с примером где описала подробно и выделила цветом.
а внутри Ваш макрос.
Вложения
Тип файла: rar пример чтобы не вытаскивалось.rar (58.4 Кб, 3 просмотров)
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4180 / 2465 / 513
Регистрация: 13.12.2016
Сообщений: 8,386
Записей в блоге: 5
27.06.2024, 21:01
Цитата Сообщение от carolina199x Посмотреть сообщение
чтобы при совпадении любого слова по вертикали, вытаскивание не происходило.
Про внятность я не ошибся. Возможен еще с десяток мелких уточнений. Пока testuser2, не согласится со мной...
0
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130
27.06.2024, 22:01  [ТС]
АЕ, а что тут не понятно я объяснила? я думаю там всё очень понятно. вы файл даже не открывали наверно.
0
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130
27.06.2024, 22:21  [ТС]
testuser2, и для последнего макроса, который с возможностью выставления кол-ва совпадений, сделайте пожалуйста тоже, что если есть одинаковые слова в любом месте сравнения, данные не вытаскивались.
также прикрепила файл и там выделила зелененьким цветом. написанное задание. чтобы было понятно.
Вложения
Тип файла: rar пример для изменения мода 4 вариантов.rar (67.6 Кб, 3 просмотров)
0
10 / 2 / 0
Регистрация: 21.04.2023
Сообщений: 130
27.06.2024, 22:33  [ТС]
Так же, что если есть именно хотя бы ОДНО одинаковое слово любом месте сравнения, то данные не вытаскивались
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.06.2024, 22:33

Построчное сравнение двух таблиц и вывод результата при совпадении
Есть книга Эксель с двумя таблицами на двух листах. В первой таблице - список телефонов, полученных с АТС. Во второй - список поставщиков...

Сравнение столбцов, при совпадении переместить столбцы на новый лист
Помогите решить. Есть 1 столбец с числовыми данными, есть 2 столбец с такими же числовыми данными, и есть еще 5 столбцов просто с...

Поиск наибольших значений и вытаскивание рядом стоящих данных
Здравствуйте форумчане! Всех красавиц(и не красавиц тоже) поздравляю с 8 марта! А теперь к делу: Встала трудная задача. описание...

Заполнение блока памяти из N слов рядом натуральных чисел
Срочно нужна помощь с лабой. Вот задание: Составить процедуру (тип NEAR) заполнения блока памяти из N слов рядом натуральных...

Вытаскивание слов из скобок
Всем добрый вечер, вот в переменной %hex% есть значение @=hex(3e9): Нужно заключить в переменную то что в скобках, а то есть: 3e9


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru