Comment créer un «Cross-Join» dans Excel?

5

J'ai 2 feuilles en Excel, chacune avec 10 rangées. Existe-t-il une sorte de formule / macro de "jonction croisée" dans Excel qui me permet de créer une 3ème feuille avec toutes les lignes imbriquées (100 lignes au total).

Espo
la source

Réponses:

0

Si utiliser OLEDB n’est pas une option, la fonction ci-dessous peut être utilisée pour générer des produits croisés.

Option Base 1

Function Cross_Product_range(r1 As Range, r2 As Range) As Variant
    Cross_Product_range = Cross_Product_array(r1.Value, r2.Value)
End Function

Function Cross_Product_array(a1 As Variant, a2 As Variant) As Variant
    On Error GoTo ErrorHandler
    Dim TempArray(), k, m
    ReDim TempArray(UBound(a1) * UBound(a2), UBound(a1, 2) + UBound(a2, 2))
    k = 1
    For i = 1 To UBound(a1)
        For j = 1 To UBound(a2)
            m = 1
            For u = 1 To UBound(a1, 2)
                TempArray(k, m) = a1(i, u)
                m = m + 1
            Next
            For u = 1 To UBound(a2, 2)
                TempArray(k, m) = a2(j, u)
                m = m + 1
            Next
            k = k + 1
        Next
    Next
    Cross_Product_array = TempArray
    Exit Function
    ErrorHandler:
    Debug.Print Err
End Function

Une fois que la fonction ci-dessus est ajoutée au module vba, Pour produire un produit croisé de A1:B5et C1:D5sélectionner les cellules cibles (dites E1: H25) et entrez la formule et utilisez ctrl + maj + entrée

=Cross_Product_range(A1:B5,C1:D5)
Prashant Bhate
la source
0

Vous pouvez le faire assez facilement avec Power Query (si vous l'avez avec votre version d'Excel):

Configurez une connexion de données à chacune des tables que vous souhaitez combiner: sélectionnez la table dans Excel, puis choisissez "De la table / plage" dans "Données" du ruban. Cela fera apparaître l'éditeur Power Query.

Pour revenir à Excel, cliquez sur la petite flèche du bouton "Fermer et charger", sélectionnez "Fermer et charger dans", puis "Connexion uniquement". Sinon, vous obtiendrez une copie de votre tableau dans Excel ...

Faites la même chose pour la deuxième table.

Le volet "Requêtes et connexions" doit maintenant être ouvert à droite de la fenêtre. Sinon, cliquez sur "Données -> Requêtes et connexions" dans le ruban.

Les deux tables doivent être répertoriées en tant que requêtes.

L'étape suivante consiste à créer une requête de jointure croisée combinant les deux et à renvoyer le résultat à Excel:

Cliquez avec le bouton droit de la souris sur l'une des requêtes dans le volet "Requêtes et connexions" et sélectionnez "Référence". Cela ouvrira à nouveau l'éditeur Power Query et créera une troisième requête qui pointe vers l'une de vos tables.

Choisissez maintenant "Ajouter une colonne -> Colonne personnalisée" dans le ruban de requête de puissance ... La formule de la nouvelle colonne correspondra au nom de la deuxième requête, c'est-à-dire les données à associer. S'il n'y a pas d'espace dans le nom, vous pouvez le saisir directement (par exemple = Table2, sinon il devra être = # "Table 2".

Vous devriez maintenant avoir une nouvelle colonne intitulée "Personnalisé" avec "Tableau" dans chaque cellule. Cliquez sur le petit symbole dans l'en-tête de colonne pour développer chaque tableau.

Tout va bien, vous avez terminé! Cliquez sur "Close and Load" et le tableau croisé devrait apparaître dans une nouvelle feuille de calcul.

Une chose à noter: cette jointure ne se mettra pas à jour automatiquement lorsque vous modifiez les données source. Vous devrez cliquer avec le bouton droit de la souris et sélectionner "Actualiser" pour réexécuter la requête de jointure croisée.

C'est probablement plus simple que je ne le fais paraître!

OfficeWorkerGuy
la source