Symétrique expressions dans excel matrice
J'arrive de travailler avec des matrices symétriques dans MS-Excel (les deux v2007 et v2003).
Est-il possible de m'aider pour copier les expressions du triangle inférieur à celui du haut?
Il devrait être quelque chose comme le copier-coller/transponse mais ces fonctions normalement travailler uniquement avec des zones rectangulaires.
dans l'ajout de l'image vous pouvez voir un exemple d'une expression que j'ai à reproduire en reliant le symétrique de la valeur dans le triangle supérieur de la matrice.
J'ai fait face à la même question, et j'ai manuellement le programme d'installation de formules pour extraire des valeurs, ou utiliser une combinaison de
C'est un problème qui peut nécessiter une programmation de réponse. Je vote pour garder la question à l'ouvrir.
Je suis d'accord - et même si elle n'a pas besoin de VBA (shameless plug pour ma réponse), la programmation peut être formules excel - il y a (pour l'instant) 1688 questions sur les formules excel.
toujours pas de réponse qui correspond à vos besoins? S'il vous plaît commentaire ou d'accepter l'une des réponses - merci
INDEX()
, ROW()
et COLUMN()
fonctions. Je suppose que y est une solution VBA.C'est un problème qui peut nécessiter une programmation de réponse. Je vote pour garder la question à l'ouvrir.
Je suis d'accord - et même si elle n'a pas besoin de VBA (shameless plug pour ma réponse), la programmation peut être formules excel - il y a (pour l'instant) 1688 questions sur les formules excel.
toujours pas de réponse qui correspond à vos besoins? S'il vous plaît commentaire ou d'accepter l'une des réponses - merci
OriginalL'auteur Ale | 2013-10-14
Vous devez vous connecter pour publier un commentaire.
Pour obtenir le nombre dans la cellule appropriée, nous pouvons utiliser
OFFSET
et l'adresse de la cellule la forme la base de la table. Notez que la formule va produire un *Référence Circulaire` erreur si entré dans la diagonale. La formule de travail pour les deux côtés de la diagonale - vous avez juste à décider lequel va contenir les données, et qui tiendra la formule.Compensée prend de Ligne et de Colonne pour décider de la cible. En soustrayant la cellule de base de ligne et de colonne de la position actuelle, nous pouvons inverser les lignes et de colonnes, et d'obtenir les données.
À l'aide de votre exemple, à l'origine de la table dans B2, nous nous retrouvons avec la formule suivante:
vous pouvez copier cette formule dans les cellules, et de la réflexion. Maintenant, vous avez le numéro, vous pouvez faire le calcul vous avez besoin sur la réflexion. À l'aide de votre exemple, ce serait faire de la formule:
Résultat:
À l'aide de
INDEX
pour le rendre non volatile allait changer la formule légèrement. Tout d'abord, nous aurions besoin d'une référence pour l'ensemble de la table, non seulement le haut de la cellule. Deuxièmement, nous aurions besoin pour ajouter 1 à la ligne/colonne de calcul, car il fait référence à la première cellule de la ligne/colonne1
, pas un décalage de0
que la formule précédente.et votre exemple de 10 Cellules devient:
MyTranspose = Evaluate(10-OFFSET($B$2,COLUMN()-COLUMN($B$2),ROW()-ROW($B$2)))
et l'utiliser au=MyTranspose
dans toutes ces cellules. Et encore moins qu'elle peut faire référence à une cellule au lieu de 10, et donc de modifier le symétrique de l'élément dynamique!+1 - je voudrais utiliser une approche similaire, mais préfère toujours
INDEX
àOFFSET
. Il offre la même fonctionnalité, mais dans la non-volatile. Ce qui est un énorme avantage dans les grands calculs!bonne idée, j'ai ajouté de la formule appropriée dans la réponse
OriginalL'auteur SeanC
Comme l'une des réponses ci-dessus le démontre, ce qui peut être fait en utilisant des formules Excel. Je trouve cependant que c'était là une procédure fastidieuse. Surtout si c'est quelque chose que vous devez faire sur une base régulière. Dans ce cas, VBA, vous pourriez économiser beaucoup de temps.
Le code suivant fonctionne sur un carré de sélection et de remplir le reste de la matrice, peu importe si c'est la partie inférieure ou supérieure de la partie de la matrice qui est pré-rempli.
OriginalL'auteur Søren Holten Hansen
Je suppose que ce que vous avez besoin est une fonction qui renvoie la "diagonale" de la valeur d'une matrice carrée, par exemple, pour tout
X(j,k)
retourX(k,j)
Essayez ceci:
une fois que vous avez entré de cette fonction en VBA, vous pouvez l'utiliser à l'intérieur ou à l'extérieur de votre matrice carrée ... vous avez juste besoin de s'assurer que votre argument (ou paramètre: Arg) est à l'intérieur de la matrice (paramètre de Référence) ... ou si vous obtenez une erreur #N/A. Ou vous obtenez une erreur #REF si la matrice n'est pas carrée.
Donc dans votre exemple, vous devez entrer en B4:
=10-DIAGONAL(B4,$B$2:$K$11)
et de les copier dans le triangle inférieur.Vous pouvez même transposer une matrice complète ... dans votre capture d'écran, déplacez-vous vers la cellule B13, entrez
=DIAGONAL(B2,$B$2:$K$11)
et copie 9x bas & droitPas de boutons, pas besoin explicitement lancer un Sous ... de n'importe quelle taille n x n de la matrice, les poignées des chaînes et des nombres, ...
OriginalL'auteur MikeD
Voici un exemple avec VBA. Commencer avec une liste non-remplis le tableau et d'un bouton.
Puis faire le bouton exécuter le code:
et, enfin, d'observer les résultats
quelle est la prochaine, sparse solver d'Excel? J/k, il est possible de le faire. Pouvez-vous modifier l'OP avec un exemple donc, le problème est mieux défini.
a ajouté une photo (notez que je ne suis pas en mesure de VBA)
OriginalL'auteur ja72
Similaire à Sean de solution, je voudrais aussi utiliser des formules. Afin d'obtenir la transposée de la valeur, utilisez cette formule:
Si vous voulez faire une opération plus complexe (par exemple,
=10-[transposedValue]
), je vous recommande d'utiliser une plage nommée: Insérer un nouveau nom, par exempleTransposedValue
dans le Gestionnaire de noms. Au lieu d'une cellule de liaison, de fournir la formule ci-dessus. Maintenant, vous pouvez littéralement écrire la formule suivante dans votre matrice:OriginalL'auteur Peter Albert
J'ai de cette façon. Comme vous l'avez dit de copier coller transposition de travail sur la plage rectangulaire. Et votre problème est que vous avez une triangulaire gamme.
Vous allez adorer ce....
1). Sélectionnez le carré plage contenant vos triangulaire supérieure de la matrice et de la Copie.
2). Sélectionnez un cellule dans un endroit vide et de faire les deux étapes suivantes
Et vous avez obtenu votre matrice symétrique 🙂
Anil.
OriginalL'auteur Anil Saini
Mélange de Ja72 de remplissage de code avec SeanC c de la fonction Excel code, je pense que je peux faire un générique de la matrice modèle est correctement remplie au préalable avec la dynamique de formule Excel. De manière dynamique, et peut être réutilisé sans copier-coller.
Je ne sais pas vraiment tout VB, donc je n'ai pas vraiment compris comment remplir l'en-tête encore. Je ne sais pas Stackoverflow encore, mais je vais essayer d'ajouter une image.
Liste originale pour Matrixize
Dynamiquement la transposition de valeurs saisies dans le sud-ouest de la moitié Nord-est de la moitié
OriginalL'auteur Dan Y.
Réponse courte:
INDIRECT(ADDRESS(COLUMN(D2), ROW(D2)))
Explnation: vous vous souvenez peut-on utiliser les coordonnées avec des nombres pour représenter un emplacement dans le Système de Coordonnées Cartésiennes. Ainsi, il est facile d'obtenir une diagonale symétrique de la valeur par exemple, il suffit de changer (2, 3) (3, 2).
Mais dans Excel, nous avons besoin d'un wordaround si nous voulons le faire. Parce que, l'adresse est marquée par une combinaison d'une lettre et d'un chiffre, dire
B2
. Vous ne pouvez pas modifierB2
à2B
.Heureusement, nous pouvons toujours utiliser les nombres pour représenter une cellule en tirant parti de la puissance de VACHE() et la COLONNE().
Dans l'image ci-dessous,
C2
etB3
sont symétriques. Cela montre comment mettre de la valeur deC2
àB3
.OriginalL'auteur Charles