
주어진 셀 범위를 반복하고 일부 내용과 일치하는 셀 옆에 셀을 반환하는 간단한 매크로를 만들려고 합니다.
일부 포럼에서 셀 개체에 대해 작동하는 줄을 찾았습니다.
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
업데이트됨: 코드는 셀 대상의 텍스트와 정확히 일치하거나 부분적으로 일치하는 기준 셀 범위에서 셀을 찾고 기준 셀 범위의 일치 셀에서 colIndex의 가로 오프셋이 있는 셀을 반환한다고 가정합니다. 따라서 기본적으로 부분 텍스트와도 일치하는 VLOOKUP입니다.
그래서...여기우리에게도 같은 문제가 있는데, 거기에 대한 대답은 내 의심을 확증해 줍니다.
셀 범위를 함수의 매개변수로 전달할 때 함수가 문자열이나 값을 수신한다고 생각합니다. 0은 빈 셀의 값일 뿐입니다. 코드를 보지 않으면 문제에 대한 해결책을 제안하기가 어렵습니다.
그런데 저는 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
로부터OO 문서:
인수는 값으로 전달됩니다.
Calc에서 매크로로 전달된 인수는 항상 값입니다. 어떤 셀이 사용되는지 알 수 없습니다. 예를 들어 =PositiveSum(A3)은 셀 A3의 값을 전달하며 PositiveSum에서는 셀 A3이 사용되었는지 알 수 없습니다. 셀의 값이 아닌 참조되는 셀을 알아야 하는 경우 범위를 문자열로 전달하고 문자열을 구문 분석한 다음 참조된 셀의 값을 가져옵니다.
그래서 내가 달성하고 싶은 것은 불가능합니다. :(