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

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

17.03.2024, 11:57. Показов 3804. Ответов 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
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 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
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 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
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 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
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 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
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 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
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru