Страницы: 1
RSS
Поиск значений ячеек одного столбца с неполным вхождением в другой, значения 2-го столбца неполностью входят в первый
 
Я уже создал подобную тему, указав, что у меня MAC, и она была перенесена в соответствующий раздел. Надеюсь, модератор не сочтет эту тему наглостью с моей стороны, ведь меня интересует алгоритм решения задачи, а будет ли он реализован для Мака или Винды, мне не важно. Если это будет принципиально, я найду нужную Ось. Вторая важная причина дублирования - посещаемость. В общем разделе вопросов по Excel она в разы выше, чем в специальном разделе для Мака, а значит вероятность найти решение возрастает пропорционально количеству посетителей. Вопрос для меня сейчас очень актуален, а по сему я все же рискну.
С оправдательной частью покончено, перехожу к сути.

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

Если подробно:

У меня есть таблица с двумя заполненными столбцами, почти 50 000 строк. Формат всех ячеек текстовый (если это важно). В первом столбце словосочетания из нескольких слов или цифр, во втором по одному слову или набору цифр, или цифры и буквы. Требуется в третий столбец вывести значения "ПРАВДА" или "ЛОЖЬ" во всех строчках. "ПРАВДА" в строке, если значение ячейки столбца 2 этой строки входит в состав любой из ячеек 1-го столбца; "Ложь", если значение из каждой конкретной ячейки не входит ни в одну ячейку 1-го столбца.

Во втором столбце встречаются отдельные символы, например "8" или "а". Такие символы должны учитываться только, если они отделены пробелами, иначе они не должны считаться. ПРИМЕР: символ "а" не должен учитываться, если ячейка 1-го столбца содержит "мАтериАлы отличного кАчествА"; символ "а" должен учитываться, если ячейка 1-го столбца содержит "не рыба, А мясо". И так со всеми символами.

Пример во вложении.

Спасибо всем, кто откликнулся. Я это ценю.
 
Доброе время суток
Под Windows версию - стандартный вариант на регулярных выражениях. Уже не раз выкладывалось - вы далеко не первый, кто не пользуется поиском ;)
Под MAC надо смотреть. Там VBScript точно нет. Попробуйте, если такой код
Код
Public Sub Test()
    Dim pRSet As Object
    Set pRSet = CreateObject("ADODB.Recordset")
    pRSet.Fields.Append "Word", 202, 32
    pRSet.Open
    pRSet.AddNew
    pRSet(0).Value = "word"
    pRSet.Update
    pRSet.Sort = "Word"
    MsgBox "Выполнено"
    pRSet.Close
End Sub
выполнится, то можно будет сделать макрос, правда, а не udf. Писать же вариант, который будет точно работать на МАК, без использования сторонних библиотек, честно говоря, без вашего участия нет желания.

Успехов.
Изменено: Андрей VG - 10.11.2015 04:08:14
 
Андрей, спасибо за такой оперативный ответ.

Поиском я пользовался, но, возможно, я просто не правильно формулировал вопрос или из-за слабой компетенции в вопросе и не увидел очевидного.
Прикрепленный файл скачал, он открывается в MAC, все работает, на первый взгляд. Однако, что-то не так. Я вижу значение "ИСТИНА" в строке со значением "а319", однако в столбце А такое значение не встречается, а значит вместо истины должна быть ложь. В документе всего 3 строки содержат значение "Истина", и все три отсутствуют в столбце А. Не могу разобраться, в чем загвоздка.

Когда я пытаюсь изменить значения в столбце А, формула пересчитывается и, чтобы я не изменил, выдает #ЗНАЧ! Если меняю значение с столбце С, все значения столбца В меняются на #ЗНАЧ!

При открытии документа, Excel предупреждает, что в нем макрос, однако я не знаю как его запустить. В соответствующем меню (Вид-Макрос) нет информации о макросе в документе.

Т.к. вопрос меня очень волнует, хотелось бы узнать, какое участие нужно от меня? Если я смогу выполнить инструкции и получить макрос для Мак, чудесно. Если нет, хотелось бы получить макрос для Винды. Я прямо с утра позабочусь о том, чтобы офис на Винде оказался у меня под рукой.

Благодарю за внимание к моему вопросу.
 
UDF-функция ищет слова из столбца С в строках столбца А, как я понял задачу.
Цитата
celevra написал:
вывести значения "ПРАВДА" или "ЛОЖЬ" во всех строчках. "ПРАВДА" в строке, если значение ячейки столбца 2 этой строки входит в состав любой из ячеек 1-го столбца
Соответственно, то что вы называете а319 на самом деле соответствует строке "печать фото а0", а слово "а0" из столбца С есть в этой строке.
Цитата
celevra написал:
он открывается в MAC, все работает
Попробуйте для начала пересчитать функцию ;)
 
Функция должна искать значения С в столбце А. Выходит, столбцы нужно просто местами поменять. Сейчас попробую.
 
не помогло.  Везде #ЗНАЧ!
 
Цитата
celevra написал:
Функция должна искать значения С в столбце А. Выходит, столбцы нужно просто местами поменять
Кажется понял. Тогда приношу свои извинения, за обвинения в отсутствии попыток воспользоваться поиском. У вас обратная задача, мне пока не встречалась.
Нужно проверить было ли слово из списка столбца С хотя бы в одном из предложений столбца А. Результат в столбце D. Под МАК работать не будет. Только покажет результат ;)

UPDС учётом этой постановки задачи, можно обойтись и без регулярных выражений. Тогда, по идее, должно работать и на МАК.
Код
Public Function ExistsInSentencesMac(ByVal this As String, ByVal Sentences As Range) As Boolean
    Dim allText As String
    allText = Join(Application.Transpose(Sentences.Value), " ")
    If StrComp(this & " ", Mid$(allText, 1, Len(this) + 1), vbTextCompare) = 0 Then
        ExistsInSentencesMac = True
    ElseIf StrComp(" " & this, Mid$(allText, Len(this)), vbTextCompare) = 0 Then
        ExistsInSentencesMac = True
    ElseIf InStr(2, allText, " " & this & " ", vbTextCompare) > 0 Then
        ExistsInSentencesMac = True
    Else
        ExistsInSentencesMac = False
    End If
End Function

Успехов.
Изменено: Андрей VG - 10.11.2015 06:43:55 (Добавил решение для МАК)
 
Спасибо. Это мне помогло. Огромное спасибо!
Страницы: 1
Читают тему
Наверх