関数の引数としてセルの範囲を取得する方法

関数の引数としてセルの範囲を取得する方法

指定された範囲のセルをループし、何らかのコンテンツに一致するセルの隣のセルを返す簡単なマクロを作成しようとしています。

いくつかのフォーラムから、セル オブジェクトに機能するはずの行を見つけました。

someCell.Offset(0,colIndex)

しかし、デバッグしてみると、選択範囲からの入力データは Variant/String のセットであり、「セル」オブジェクトではないことがわかります。

関数で Variant/Strings ではなくセルの範囲を取得する方法はありますか?

私の完全なコードも以下です:

Function RVLOOKUP(target, criteriaCellRange, colIndex)

    Dim found as Boolean
    Dim resultCell as Variant

    For Each cell In criteriaCellRange
        matchPosition = instr(target,cell)
        If matchPosition > 0 Then
            found = True
            resultCell = cell
            Exit For
        end if
    Next cell

    If found Then
        ' Here resultCell seems to be just a String not an actual cell object
        RVLOOKUP = resultCell.Offset(0,colIndex)
    else
        RVLOOKUP = "#NoMatch"
    end if

End Function

更新: このコードは、セル ターゲットのテキストと完全または部分的に一致するセルを criteriaCellRange から検索し、criteriaCellRange の一致するセルから colIndex の水平オフセットを持つセルを返すことになっています。つまり、基本的には部分的なテキストにも一致する VLOOKUP です。

それで...ここ私たちは同じ問題を抱えており、その答えは私の疑いを裏付けています。

セル範囲を関数のパラメータとして渡す場合、関数は文字列または値のいずれかを受け取ると思います。ゼロは空白セルの値です。コードを見ないと、問題の解決策を提案するのは難しいです。

ちなみに私はLibreoffice 5.4.4.2を使用しています。

答え1

ほんの少し調整するだけです:

Function RVLOOKUP(target, criteriaCellRange, colIndex)

    Dim found As Boolean
    Dim resultCell As Range

    For Each cell In criteriaCellRange
        matchPosition = InStr(cell, target)
        If matchPosition > 0 Then
            found = True
            Set resultCell = cell
            Exit For
        End If
    Next cell

    If found Then
        ' Here resultCell seems to be just a String not an actual cell object
        RVLOOKUP = resultCell.Offset(0, colIndex)
    Else
        RVLOOKUP = "#NoMatch"
    End If

End Function

私は議論を逆転させInStr()resultCell範囲

答え2

からオブジェクト指向ドキュメント:

引数は値として渡される

Calc からマクロに渡される引数は常に値です。どのセルが使用されているかを知ることはできません。たとえば、=PositiveSum(A3) はセル A3 の値を渡し、PositiveSum はセル A3 が使用されたことを知る方法がありません。セル内の値ではなく、どのセルが参照されているかを知る必要がある場合は、範囲を文字列として渡し、文字列を解析して、参照されているセル内の値を取得します。

だから私が達成したいことは不可能です。:(

関連情報