Passando una matrice (?) Per VBA in Excel
Domanda
Una soluzione comune in Excel a Sumif () con più condizioni è così (Questa formula conta tutti i casi in cui la colonna A ha il valore in C1 e colonna B ha il valore in D1):
=SUMPRODUCT((A1:A9=C1)*(B1:B9=D1))
.
I, ora, ha bisogno di una funzione che stringhe concatenate da linee che soddisfano più condizioni. C'è una grande soluzione per uno condizione a http://www.ms-office-forum.net/forum/showthread.php?t=273352
I, tuttavia, vuole controllare più condizioni - e quindi utilizzare il trucco del sottoprodotto () dall'alto. Il mio problema è: come devo definire il parametro nella funzione per ottenere un array? Questo è quello che sono arrivato finora:
' **********************************************************************
' 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
.
Funziona bene, se selezionando una colonna per il parametro 1. Ma non appena includo una formula del prodotto (come sopra), solo una variante / doppia con il valore 1 è superato per 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
.
Qualche suggerimento? Grazie!
Soluzione
Il problema era perché formula:
=CONCATIF((A1:A9=C1)*(B1:B9=D1); E1:E9)
.
Devi essere chiamato premendo ctrl + shift + immettere
Altri suggerimenti
Per la completezza, ecco l'Excel VBA macro completo per concatenare stringhe da una gamma (può avere più colonne di stringa), se i criteri in altre colonne sono abbinati.
' **********************************************************************
' 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
.
Usa come segue - e non dimenticare di inserire da ctrl + shift + inserisci
=CONCATIF((A1:A:9="male")*(B1:B9="young"); C1:D9)
.
Dati di esempio
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
.
Risultati in
* Comment 1
* Comment 2
* Comment 9
* Comment A
.
Per Google: questo sarà anche trovato come Verchettenwenn ()