Passer une matrice (?) À VBA dans Excel
Question
une solution commune dans Excel pour SUMIF () avec de multiples conditions va comme ceci (Cette formule chiffres tous les cas où la colonne A a la valeur de C1 et de la colonne B a la valeur D1):
=SUMPRODUCT((A1:A9=C1)*(B1:B9=D1))
I, maintenant, besoin d'une fonction que les chaînes de concaténer les lignes remplissant plusieurs conditions. Il y a une grande solution pour un à la condition http://www.ms-office-forum.net/forum/showthread.php?t=273352
Cependant, je veux vérifier plusieurs conditions - et donc utiliser l'astuce subproduct () d'en haut. Mon problème est: Comment dois-je définir le paramètre dans la fonction pour obtenir un tableau? Voilà ce que je suis arrivé à ce jour:
' **********************************************************************
' 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
Cela fonctionne bien, si je sélectionne une colonne pour le paramètre 1. Mais dès que j'inclure une formule de produit (comme ci-dessus), seule une variante / Double avec la valeur 1 est passé pour 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
Toutes les suggestions? Merci!
La solution
Le problème était parce que la formule:
=CONCATIF((A1:A9=C1)*(B1:B9=D1); E1:E9)
doit être appelé en appuyant sur Ctrl + shift + entrez
Autres conseils
Par souci d'exhaustivité, voici la macro Excel VBA complète pour concaténer des chaînes d'une plage (peut avoir plusieurs colonnes à chaîne), si des critères d'autres colonnes sont assortis.
' **********************************************************************
' 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
Utilisez comme suit - et n'oubliez pas d'entrer par Ctrl + shift + entrée
=CONCATIF((A1:A:9="male")*(B1:B9="young"); C1:D9)
échantillons de données
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
Résultats dans
* Comment 1
* Comment 2
* Comment 9
* Comment A
pour Google: Ceci doit également être trouvé comme Verkettenwenn ()