Мой вопрос довольно сложный, поэтому я постараюсь сделать его максимально ясным.Excel - VBA: матч с двумя комбинированными ячейками?
В моей программе я сравниваю значение ячеек с базой данных, чтобы найти совпадения. Ячейки, которые я сравниваю, находятся в формате столбца с одним словом в каждой ячейке. С другой стороны, ячейки из моей базы данных содержат целое предложение в ячейке.
Например: цель
моей программы, чтобы найти спички, чтобы определить место. До сих пор вот что он делает: он активирует ячейку из базы данных и сравнивается с каждой ячейкой «elementListRange», которая представляет собой выбор элементов из столбца (так что на моем рисунке «B2: B7»). Когда есть матч, он добавляет счет 12 на линии.
'loop in the DATABASE
For i = a To b
Range("B" & i).Activate
'try to find a match btwn active cell and one of the elements from parsed address
For Each cell In elementsListRange.Cells
If Match(ActiveCell.Value, cell.Value) Then
Range("K" & i).Value = Range("K" & i).Value + 12
Else
Range("K" & i).Value = Range("K" & i).Value + 0
End If
Next
Таким образом, в данном случае, есть матч в три раза, с ячейкой 1 (корпоративной), ячейка 2 (в центре) и ячейки 3 (зданий), что делает в общей сложности 36 очков.
Вот что я хочу сделать: сейчас, я хочу сделать его более точным, принимая во внимание положение слов. Поэтому, если ячейкой в базе данных является «Корпоративный центр здания», а слова Corporate/Center and Building отображаются в том же порядке, это добавит больше очков. Идея такова: если между активной ячейкой и ячейкой 1 (корпоративный) есть совпадение, добавьте 12 пунктов и выполните еще одну проверку: если соответствие между активной ячейкой и ячейкой 1 + ячейка 2 (корпоративный центр), добавьте 10 дополнительных точек и сделайте другое If: Если соответствие между активной ячейкой и ячейкой 1 + ячейка 2 + ячейка 3 (Corporate Center Building), добавьте 15 дополнительных точек и так далее.
Таким образом, он не только найдет совпадения, но и придаст значение позиции слов. Поэтому, если ввод «Корпоративный центр здания», и у вас есть как «Корпоративное здание центра», так и «Создание корпоративного центра» в базе данных, в правильном матче будет дано больше очков.
Что-то вроде этого:
'loop in the DATABASE
For i = a To b
Range("B" & i).Activate
'try to find a match btwn active cell and one of the elements from parsed address
For Each cell In elementsListRange.Cells
If Match(ActiveCell.Value, cell.Value) Then
Range("K" & i).Value = Range("K" & i).Value + 12
If Match(ActiveCell.Value, cell.Value + cell.offest(1,0).Value) Then
Range("K"&i).Value = Range("K"&i).Value + 10
If Match(ActiveCell.Value, cell.Value + cell.offest(1,0).Value + cell.offset(2,0).Value) Then
.... ..... ..... + 15
and so on
Else
End If
Else
End If
Else
Range("K" & i).Value = Range("K" & i).Value + 0
End If
Next
И, наконец, вот мой вопрос:
К сожалению, мы не можем записать это так:
If Match(ActiveCell.Value, cell.Value + cell.offest(1,0).Value)
Do вы знаете, как выразить эту идею? Спасибо заранее.
спасибо за ваше объяснение, очень полезно. Я пробовал это: если Match (ActiveCell.Value, cell.Value & cell.Offset (1,0) .Value), и он действительно не работает, он по-прежнему не распознает комбинацию слов, то есть он будет забивать даже если только второе слово замечено, а не целое слово word2. Я не понимаю, почему, когда он ищет совпадение «word1», он работает, но для «word1 word2» он не работает. Это не так ... Я собираюсь взглянуть на ваше другое предложение, но я боюсь, что это слишком сложно для меня, моя база данных огромна, и я не знаю, как работать с массивом и т. Д. – Phalanx
концепция из массивов слишком сложно - см. [эту ссылку] (http://www.cpearson.com/excel/vbaarrays.htm) –
Спасибо за ссылку, закончите читать ее после этого сообщения. Это кажется сложным, хотя моя идея очень проста. Вот что я сделал: "Dim StringData() As переменной Для я = а к Ь Range (" B "& I) .Activate StringData = Split (ActiveCell.Value", ")" Я сейчас попробую найти способ петли в элементе моего массива и использовать что-то похожее на смещение для сравнения элементов по элементам. – Phalanx