정렬하지 않고 다음으로 가장 작은/가장 큰 값을 찾으려면 어떻게 해야 합니까?

정렬하지 않고 다음으로 가장 작은/가장 큰 값을 찾으려면 어떻게 해야 합니까?

별도의 테이블에 있는 값을 기준으로 다음으로 가장 큰 값 및/또는 가장 작은 값을 가져와야 하는 테이블이 있습니다. 그러나 조회의 정확성에 영향을 주지 않고 모든 기준에 따라 첫 번째 테이블을 정렬할 수 있도록 허용해야 합니다.

다음으로 큰/다음으로 작은 값을 찾기 위해 VLOOKUP, LOOKUP, HLOOKUP 및 MATCH를 사용하는 다양한 방법을 검색하고 읽었지만 내가 찾은 모든 것은 소스 열을 오름차순/내림차순으로 정렬해야 하는 것 같습니다. 다음으로 가장 작은/가장 큰 값을 원합니다. 두 가지를 동시에 사용하거나 수식을 깨지 않고 테이블을 정렬할 수 있기를 원할 때 기능이 중단됩니다.

Excel에서 다음으로 큰 값/다음으로 작은 값에 대해 정렬을 구분하지 않는 검색을 수행하는 방법이 있나요?

선호하는 솔루션은 현재 VBScript에 익숙하지 않고 타사 도구를 설치할 수 없기 때문에 기본 Excel 기능만 사용하는 것입니다. 솔루션은 Excel 2010과도 호환되어야 합니다.그리고2013.

답변1

제안된 결과

여기에 이미지 설명을 입력하세요

ARRAY 수식에 IF 및 SMALL 사용

그림에 표시된 결과가 찾고 있는 결과인 경우 다음으로 큰 값을 찾는 공식은 다음과 같습니다.
=SMALL(IF(Relative[Value]>[@Value];Relative[Value];99999999999);1)

설명

  • Relative[Value]>[@Value]TRUE또는 배열을 반환합니다 .FALSE
  • IF(Relative[Value]>[@Value];Relative[Value];99999999999)그런 다음 상대 테이블에서 더 큰 값을 반환하고 그렇지 않은 값에 대해서는 범위를 벗어난 큰 값을 반환합니다. 데이터에서 자연적으로 발생하지 않는 것을 선택하세요. 0또는 FALSES에 대한 값을 사용하거나 오류 값으로 작업할 수 있습니다.
  • 그런 다음 SMALL인수와 함께 함수 를 사용하여 k=1더 큰 값에서 가장 작은 값을 찾습니다.
  • 배열 수식이므로 CTRL+SHIFT+ENTER로 수식을 입력하세요.

연결:

답변2

번호가 고유한 경우 다음과 같이 작동합니다.

다음으로 작은 것:

=SMALL(YourRange,RANK.EQ(YourValue,YourRange,1)+1)

다음으로 큰 규모:

=SMALL(YourRange,RANK.EQ(YourValue,YourRange,1)-1)

그렇지 않은 경우 배열 수식이나 도우미 열을 사용하여 좀 더 복잡한 조작을 수행할 수 있습니다. 또한 LARGE의 정렬 순서를 사용하고 변경하는 방식으로 전환할 수 있는 중복 숫자를 처리하는 방법(동일하거나 다른 값 반환)을 결정해야 합니다 RANK.

그래도 이것이 출발점이 될 것입니다.

답변3

빈 도우미(악) 열을 사용하고 이를 복사하여 아래까지 붙여넣습니다. =IF(B3>NOW(),B3,"") 열 T라고 부르겠습니다. 그런 다음 "다음" 필드에 입력합니다. **=최소(T1:T1000)

함수로는 다음과 같습니다.

    Function Soonest(scolumn As String) As Date

'
'
Dim a, b
Dim test(20000) As Date
Dim Min As Date

b = 0

   For a = 1 To 20000
    If (IsEmpty(Range(scolumn & a))) Then
     GoTo SkipMe
    End If

     If (Range(scolumn & a).Value - Now() > 0) Then
     b = b + 1
     test(b) = Range(scolumn & a).Value
     End If
SkipMe:
  Next a

  If b = 0 Then
   Min = "None"
  GoTo NoneFound
  End If
  Min = test(1)
  For c = 1 To b
   If test(c) < Min Then Min = test(c)
  Next c
NoneFound:

Soonest = Min
End Function

관련 정보