Макрос Excel: проверьте, содержит ли текущая ячейка подстроку в качестве другой ячейки

#excel #macros

#excel #макросы

Вопрос:

Без использования VBA (я могу сделать это в VBA, но просто хочу попробовать, может ли это сделать и макрос, но я еще не разобрался),

У меня есть два листа. Лист A включает столбец имен, таких как его ячейка, например:

Райт

Лист B также содержит столбец имен, но с большим количеством букв, таких как заголовок, в одной ячейке, например:

Мистер Райт

Лист A-B находится в соотношении один ко многим (у Райта на листе A может быть несколько строк с мистером Райтом на листе B).

Если на листе B, как написать макрос с некоторой функцией для достижения: проверить, есть ли у ‘Mr.Wright’ подстрока в ячейке на листе A.

(Я думаю, что было бы проще начать с листа A: возможно, с регулярным выражением, сначала найдите все совпадения на листе B с ИНДЕКСОМ или СОВПАДЕНИЕМ. Намного лучше, если это можно сделать с листа B одним выстрелом)

Комментарии:

1. Извините за вопрос. Не беспокойтесь. Я думаю, что наиболее правильным способом является использование VBA.

Ответ №1:

Создайте макрос с именем sub_in_name .

 Option Explicit

Sub sub_in_name()

Dim x, i As Long

Dim endofcells1, endofcellsmany As Long

endofcells1 = WorksheetFunction.CountA(Range("A:A"))
endofcellsmany = WorksheetFunction.CountA(Range("B:B"))

For x = 1 To endofcells1
    For i = 1 To endofcellsmany


If (InStr(1, Cells(i, 2), Cells(x, 1), vbTextCompare)) Then
Cells(i, 2   x).Value = "True"
Else
Cells(i, 2   x).Value = "False"
End If

    Next i
Next x


End Sub
 

Intr(start, SearchStr, SearchInStr, vbaoption) является основной функцией для выполнения этой работы. Cells(i, 2 x) индексируется на основе количества непустых ячеек в столбце «А».

Обязательно очищайте содержимое ячеек для каждой пробной версии; после столбца «B».

Например, введите столбец «A» и столбец «B», и вы получите столбцы «C: D»

  Column "A"       Column "B"        Column "C"    Column "D"

 Wright           Mr. Wright        True          False

 Roger            Wright Jr.        True          False

                  Wright the Ivth.  True          False

                  Sally             False         False
 

Ответ №2:

Примерно аналогичная логика. Изначально я хотел использовать для этого существующие макрофункции. Наконец, это закончилось созданием настраиваемой функции, как показано ниже:

Вдохновленный другим потоком в stack overflow. Я создал код для полной проверки, как у user3553260. Но я думаю, что функция также не является плохим выбором, учитывая, что эффективность здесь не является главной проблемой.

 Function LookupName(lookupValue As Variant, lookupRange As Range) As String

Dim r As Long   
Dim c As Long   

Dim s As String 

s = "No"

For r = 1 To lookupRange.Rows.Count
    For c = 1 To lookupRange.Columns.Count

        If Not IsEmpty(lookupRange.Cells(r, c).Value) Then

          If InStr(LCase(lookupValue), LCase(lookupRange.Cells(r, c).Value)) Then

            s = "Yes"
            Exit For

          End If

        End If

    Next
Next

LookupName = s

End Function