2014-01-11 2 views
3

여러 조건이있는 SUMIF()에 대한 Excel의 일반적인 해결책은 입니다 (이 수식은 A 열의 값이 C1이고 B 열의 값이 D1에서) :Excel에서 VBA에 행렬 (?)을 전달

=SUMPRODUCT((A1:A9=C1)*(B1:B9=D1)) 

이제는 여러 조건을 충족하는 줄의 문자열을 연결하는 기능이 필요합니다. 따라서 하위 제품()를 사용 위에서 트릭 - 내가하지만, 여러 조건을 검사 할 http://www.ms-office-forum.net/forum/showthread.php?t=273352

에서 하나 조건에 대한 훌륭한 솔루션이있다. 내 문제는 : 배열에서 얻으려면 함수에서 매개 변수를 정의해야합니까? 이것은 내가 지금까지 무엇을 가지고 있습니다 :

' ********************************************************************** 
' Modul: Modul1 Typ: Allgemeines Modul 
' ********************************************************************** 

Option Explicit 

Public Function CONCATIF(Kriterium, Inhalte) 
    Dim mydic As Object 
    Dim L As Long 
    Set mydic = CreateObject("Scripting.Dictionary") 

    For L = 1 To UBound(Kriterium) 
     If Kriterium(L, 1) = 1 Then 
      If Inhalte(L, 1) <> "" Then 
       mydic(L) = Inhalte(L, 1) 
      End If 
     End If 
    Next 
    CONCATIF = Join(mydic.items, vbCrLf) 
End Function 

내가 매개 변수 1. 하나의 열을 선택하지만 경우는, 잘 작동 최대한 빨리 (위와 같이) 제품 공식을 포함하는 같은 값으로 만 변형/더블 1은 Kriterium에 전달됩니다.

=CONCATIF(A1:A9; E1:E9)     Works fine (if column A is 0/1 coded) 
=CONCATIF((A1:A9=C1)*(B1:B9=D1); E1:E9) Does not work at all 

의견이 있으십니까? 고맙습니다! 공식 때문에

+1

보십시오. 그것은 나를 위해 작동 –

+0

전혀 SumProduct()를 호출하고 싶지 않아 - SumProduct()와 비슷한 것을하는 함수를 작성하고 싶다. – BurninLeo

+0

@simoco : 문제가 해결되었습니다! 고마워. SUMPRODUCT()가 CRTL + SHIFT + ENTER를 필요로하지 않는 이유는 무엇입니까? – BurninLeo

답변

2

문제가 있었다 :

=CONCATIF((A1:A9=C1)*(B1:B9=D1); E1:E9) 

필요가 + 완전성을 위해서

+0

+1 멋지게 완료되었습니다. –

+0

@SiddharthRout, 감사합니다! 그러나 질문에 대한 나의 마지막 코멘트를 읽었습니까? 난이 행동과 혼동 스럽다. –

+2

왜냐하면'SUMPRODUCT()'는 다른 배열 수식과는 다르게 장면 뒤에서 배열 계산을하기 때문이다.'SUMPRODUCT()'는 배열 처리 함수가 있는지 Excel이 이미 프로그램되어 있으므로 배열을 입력 할 필요가 없습니다. :) –

0

를 입력CTRL + SHIFT 키를 눌러 호출 할, 여기에 완전한 엑셀 VBA 매크로의 다른 열의 기준과 일치하는 경우 범위에서 문자열을 연결합니다 (여러 문자열 열이있을 수 있음). 와 +

에서

A  B  C   D 
01 male young Comment 1 Comment 2 
02 male old  Comment 3 Comment 4 
03 female young Comment 5 Comment 6 
04 female old  Comment 7 Comment 8 
05 male young Comment 9 Comment A 

결과

=CONCATIF((A1:A:9="male")*(B1:B9="young"); C1:D9) 

샘플 데이터를 입력CTRL + SHIFT으로 입력하는 것을 잊지 마세요 -

' ********************************************************************** 
' Modul: Modul1 Typ: Allgemeines Modul 
' ********************************************************************** 

Option Explicit 


Public Function CONCATIF(Kriterium, Inhalte) 
    Dim mydic As Object 
    Dim L As Long 
    Dim C As Long 
    Dim N As Long 
    Dim cols As Long 
    Set mydic = CreateObject("Scripting.Dictionary") 
    cols = Inhalte.Columns.Count 
    N = 1 

    For L = 1 To UBound(Kriterium) 
     If Kriterium(L, 1) = 1 Then 
      For C = 1 To cols 
       If Not IsEmpty(Inhalte(L, C)) Then 
        mydic(N) = "* " & Inhalte(L, C) 
        N = N + 1 
       End If 
      Next 
     End If 
    Next 
    CONCATIF= Join(mydic.items, vbCrLf) 
End Function 

를 사용하여 다음과 같은구글

* Comment 1 
* Comment 2 
* Comment 9 
* Comment A 

: 이것은 또한 VERKETTENWENN로 발견된다() __CTRL + SHIFT + ENTER__를 눌러 함수를 호출하는