множественный поиск в ячейке и результат смещения, если найдено - PullRequest
0 голосов
/ 26 января 2019

У меня есть электронная таблица со столбцом B: B, отображающая более 30 тыс. Записей.Я пытаюсь найти способ: - проверить, является ли каждая из этих ячеек содержимым из диапазона «content1» - если так, то также проверить эту же ячейку, если также имеет содержимое из диапазона «content2» рядом с первым (но диапазонне обязательно той же длины, что и «content1» И, если вообще возможно, не обязательно либо существующей, - и в идеале с возможностью добавить еще пару диапазонов для поиска ... ЕСЛИ найдено содержимое из диапазона1 И 2 ​​[И x]в ячейке из столбца B: B, затем извлеките содержимое ячейки справа от первых ячеек, показывающих "content1" ... "content2" ... и напишите его там, где находится формула ... Проще всего показатьпример:

Colum B:B                      Range1    Range2   Range3  Rangexx  Result
The quick brown fox jumps      fox       brown     quick  jumps    Fast Animal               
The green tree moves slowly    tree      green     fast            Green Vegetal                                   
The brown tree moves slowly    tree      brown     slow            Brown Vegetal                                        
The green house in the tree    house     green                     House green                                                                                  
Hitchhiker guide to the galaxy galaxy    guide                     Space                                                     

Таким образом, результат будет:

Column B:B                           Column C:C
The quick brown fox jumps            Fast Animal
The green tree moves slowly          ""
The brown tree moves slowly          Brown Vegetal
The green house in the tree          House green                                              
Hitchhiker guide to the galaxy       Space

Чего я хочу добиться, так это классифицировать большой набор слов с использованием нескольких критериев ...

Я нашел (и протестировал) формулу, которая позволяет мне тестировать текст из столбца B: B (используя массивы) по ОДНОМУ критерию и возвращать категорию - что уже удивительно ...

Но былоИнтересно, смогут ли вы, эксперты, реально продвинуться дальше и - используя любую формулу VBA VBA - позвольте мне выполнить эту классификацию, используя несколько критериев!

Формула =INDEX(result_text;MATCH(TRUE;ISNUMBER(SEARCH(search_text;B2));0))

С result_text Доступ к смещенной категории относится к поиску search_text в B2 успешно завершен!:)

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

Кроме того, я впервые публикую здесь - так что скажите мне, если я что-то не так написал в написании этого поста!:)

Txs!M.

пример ссылка на пример

https://drive.google.com/open?id=1OceFTFVz_-isGNkBXcKdIY4cxQ4vqKSf

1 Ответ

0 голосов
/ 27 января 2019

Таким образом, вы хотите перебрать свой постоянный диапазон

dim cell as Range
dim myRange as Range

myRange = yourContantRangeDefinedHere

    ' Loop through each cell in the range
    for each cell in myRange
        'If the the cell in the next column to the right isn't empty AND the cell two columns over isn't empty
        if cell.offset(0, 1).value <> "" and cell.offset(0,2).value <> "" then
            'Do all the things here
            'Assuming your example the result is 5 columns to the right of B:B
            Msgbox cell.offset(0,5).value
        end if
    next

Если вы затем пытаетесь найти другую таблицу в рамках критериев первой, тогда вы можете вложить в другую петлю для первой.Используйте функцию in string INSTR, которая возвращает целое число, в котором она находит вашу строку поиска в большей строке, если она не находит ее, она возвращает 0.

dim table1Cell as Range
dim table1Range as Range
dim table1Cell as Range
dim table1Range as Range

table1Range = yourContantRangeDefinedHere
table2Range = yourSecondTableRangeHere

    ' Loop through each cell in the range
    for each table1Cell in table1Range

        ' Then we loop through the second table within the first loop
        for each table2Cell in table2Range
            'Then we will search the table1Cell value and see if it contains what is in the table2Cell value and the next column in table2

            if INSTR(1, table1Cell.value, table2Cell.value) > 0 and INSTR(1, table1Cell.value, table2Cell.offset(0,1).value) > 0 then
                'Both INSTR searches have returned a value greater than 0 so both have found matches, now you can get the value of the result column in table2 and return it to table1

                table1Cell.offset(0, 7).value = table2Cell.offset(0, 2).value
            end if
        next table2Cell
    next table1Cell
...