Поиск строки из массива строк против массива строк в Excel - PullRequest
0 голосов
/ 05 июля 2011

У меня есть два листа Excel в рабочей книге.

У меня есть справочная таблица на одном листе.Мне нужно выяснить, существует ли определенная строка в ячейке (в которой есть предложение), найти значение этой строки в справочной таблице и записать ее.

Это то, что я пытаюсь сделать: (Sheet 1 является листом операций; Sheet 2 является справочным листом.)

VLOOKUP(FIND{"compare","contrast","x",..},from the sheet 1 column 1),if string exists,the value against that string in sheet 2 column 2 written in sheet 2 column 2)

{"compare","contrast"} are all words in sheet 1 column 1

Я хочу сравнить, совпадает ли какая-либо из строк в Sheet 2, Column A со строкой (в предложении или массивестрок) в Sheet 1, Column A.Затем, если они совпадают, значение против строки в Sheet 2, Column 2 должно быть сгенерировано в Sheet 1, Column B.

Не могли бы вы подсказать мне, как написать макрос для этого?

1 Ответ

2 голосов
/ 05 июля 2011

ОБНОВЛЕНИЕ:

Вот функция.

Требуется 2 параметра: 1-я - это ячейка, которую вы хотите найти (лист 1, А1), а вторая - столбцы, составляющие справочную таблицу (лист 2, А: В). Он возьмет все термины на листе 2 A и из них сделает глоссарий массива вариантов, причем ключ A - это ключ, а B - значение. Если он найдет одну из строк в ячейке, он поместит ее в новую строку с именем result. В качестве личного выбора я сделал глянец статическим, чтобы он работал быстрее в случае, если вы запускаете эту функцию одновременно для нескольких ячеек, но вы можете изменить ее на Dim, если хотите.

Итак, для А1 вы бы написали:

=FindString(A1,Sheet2!A:B)

Вот код, пожалуйста, попробуйте его, и я надеюсь, что это поможет или, по крайней мере, даст вам хорошее начало.

Function FindString(ByVal text As String, _
                    ByVal term_list As range) As String

Dim result As String
Dim i As Long
Static glossary As Variant
glossary = range(term_list.Cells(1, 1).End(xlDown), term_list.Cells(1, 2))

For i = 1 To UBound(glossary)
    If InStr(text, glossary(i, 1)) <> 0 Then
       result = (glossary(i, 1) & " = ") & (glossary(i, 2) & vbLf) & result
    End If
Next

If Len(result) <> 0 Then
    result = Left$(result, (Len(result) - 1))
End If

FindString = result

End Function
...