私の質問は非常にトリッキーなので、できるだけ明確にしようと思います。
私のプログラムでは、セルの値をデータベースと比較して一致を見つけます。比較しているセルは列形式で、各セルに 1 つの単語があります。一方、私のデータベースのセルには、セルに文全体が含まれています。
例:
私のプログラムの目標は、場所を特定するための一致を見つけることです。データベースからセルをアクティブ化し、列からの要素の選択である「elementsListRange」の各セルと比較します(私の写真では「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 (建物) で 3 回一致し、合計 36 ポイントになります。
これが私がやりたいことです:今、単語の位置を考慮してより正確にしたいと思います。したがって、データベースのセルが「Corporate Center Building」で、Corporate/Center と Building という単語が同じ順序で表示されている場合、さらにポイントが追加されます。アイデアは: アクティブなセルとセル 1 (企業) が一致する場合、12 ポイントを追加して、別のチェックを行います: アクティブなセルとセル 1 + セル 2 (企業センター) が一致する場合、さらに 10 ポイントを追加し、別の場合: アクティブなセルとセル 1 + セル 2 + セル 3 (企業センタービル) が一致する場合、15 点を追加します。
そのため、一致を見つけるだけでなく、単語の位置を重視します。そのため、入力が「Corporate Center Building」で、データベースに「Corporate Center Building」と「Building Corporate Center」の両方がある場合、正しい一致にはより多くのポイントが与えられます。
このようなもの :
'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)
この考えを表現する方法を知っていますか?前もって感謝します。