2016-08-11 1 views
0

와 나는 다음과 같은 정보와 워크 시트가있는 경우 :대안을 FormulaArray

| A | B | C | 
| 10 | cat |   | 
| 15 | cat |   | 
| 5 | dog |   | 
| 4 | dog |   | 
| 11 | dog |   | 
| 6 | fish |   | 
| 10 | fish |   | 

내가 B 컬럼에 값에 따라 그들을 그룹화하여 컬럼의 최대 값 인 발견 할을 . 즉, 고양이와 개, 물고기에 대한 최대 값.

는 제가 MaxIf 기능 함수 FormulaArray 사용에 대해 생각

:

mysheet.range("C1:C7").FormulaArray="=Max(If(R1C2:R7C2=RC[-1],R1C1:R7C1))" 

그것을 테스트하지만 작업 그다지이 수식은 전체 범위 (B1과 제 소자 (B1)을 비교한다 : B7).

더 좋은 대답이 있습니까?

+1

왜 직접'mysheet.range. ("C1 : C7") 수식 = "= SUMPRODUCT (최대 ((R1C2 : R7C2 = RC [-1]) * R1C1 : R7C1))?" ' –

답변

0

는이 같은 MAXINDEX의 조합을 사용할 수 있습니다

enter image description here

+1

또는 배열 수식으로 'INDEX'가 없으면'= MAX (($ B $ 1 : $ B $ 7 = B1) * $ A $ 1 : $ A $ 7)' –

+0

배열 수식의 경우 OP의 현재 구현. 내 대답을 보라. – JMcD

+0

@JMcD - 감사합니다. 배열 수식 기반 응답에 대한 대안을 제공했습니다. 나는 OP가 배열 공식을 선호한다고 생각한다. –

0

배열 수식은 하나의 결과 또는 여러 개의 결과를 반환 할 수 있습니다. 범위의 각 셀에 대해 단일 결과를 반환하기를 원하지만 배열 수식을 전체 범위에 적용하기 때문에 단일 수식 대신 전체 범위에 대해 여러 결과를 반환하는 단일 수식으로 해석됩니다. 각 세포.

배열 범위에서 변경하여 테스트 할 수 있습니다. C3에서 ", 0)"을 "1"로 변경하십시오. 배열의 일부를 변경할 수 없다는 것을 알려줍니다. 그들은 모두 연결되어 있습니다.

당신이해야 할 일은 범위의 셀을 반복하고 각각의 수식을 적용하는 것입니다.

Dim r As Range 
Dim rFormulas As Range 
Set rFormulas = ActiveSheet.Range("C2:C8") 
For Each r In rFormulas.Cells 
    r.FormulaArray = "=MAX(IF(R2C2:R8C2=RC2,R2C1:R8C1,0))" 
Next r 
+0

그게 맞아요,하지만 난 시트를 당 2,000 행과 다른 루프 안에 루프를 가지고 있기 때문에 그것을 할 빠른 방법이 필요합니다. –

관련 문제