8
votes

Transposer une gamme dans VBA

J'essaie de transposer une gamme de cellules dans Excel via VBA Macro, mais je reçois des erreurs, principalement une erreur 91.

Je suis assez nouveau à VBA et je n'ai pas beaucoup d'idée des fonctions non plus. P>

Range(InRng).Select
Set Range1 = Selection
Dim DestRange As Range
Set DestRange = Application.WorksheetFunction.Transpose(Range1)


0 commentaires

6 Réponses :


0
votes

Vous n'avez pas besoin de faire cela. Voici comment créer une méthode de co-variance:

http://www.youtube.com/watch?v=rqafc4jxd4a < / p>

Vous pouvez également utiliser un emballage d'analyse statistique qui Excel a.


2 commentaires

Merci pour votre contribution, mais je dois créer une macro pour le faire. J'ai le forumla et ça va bien pour moi. Le seul problème consiste également à intégrer la fonction Transpose


Ensuite, je ne sais pas si vous comprenez comment utiliser Application.worksheetFunction. correctement.



6
votes

Copiez d'abord la plage source, puis Coller-spécial sur la plage de la cible avec transpose: = True, échantillon court: xxx pré>

La fonction transpose prend le paramètre de type varien et renvoie la variante. p>

  Sub transposeTest()
    Dim transposedVariant As Variant
    Dim sourceRowRange As Range
    Dim sourceRowRangeVariant As Variant

    Set sourceRowRange = Range("A1:H1") ' one row, eight columns
    sourceRowRangeVariant = sourceRowRange.Value
    transposedVariant = Application.Transpose(sourceRowRangeVariant)

    Dim rangeFilledWithTransposedData As Range
    Set rangeFilledWithTransposedData = Range("I1:I8") ' eight rows, one column
    rangeFilledWithTransposedData.Value = transposedVariant
  End Sub


2 commentaires

La question avec cette approche est que je ne peux pas copier la plage en cellules. J'ai juste besoin des valeurs brutes transposées que je peux ensuite passer sur une fonction qui calcule la co-variance.


J'ai essayé votre code mis à jour, mais le Sourcerowrangevariant et Transposedvariant ont les mêmes valeurs après avoir exécuté la fonction. Ceci est maintenant réparé. Vous appeliez Application.Transposez deux fois dans votre code.



17
votes

Ceci vous obtient x et x 'comme des tableaux de variante que vous pouvez passer à une autre fonction.

Dim X() As Variant
Dim XT() As Variant
X = ActiveSheet.Range("InRng").Value2
XT = Application.Transpose(X)


3 commentaires

La fonction de co-variance que j'ai accepte la plage d'un paramètre, ce que le code ci-dessus est une variante, une recherche rapide de Google indique qu'il n'est pas possible de convertir une variante en gamme. Y a-t-il quelque chose d'autre que je dois faire?


Ne devrait-il pas être application.worksheetfunction.transpose (x)


@Andrew u Voir l'autre réponse ici



0
votes

En référence strictement en référence au préfaquage "transpose", par le livre, soit on fonctionnera; I.e., Application.Transpose () ou Feuille de travail.Transposez (), et par expérience, si vous aimez vraiment la dactylographie, l'application.worksheetfunction.Transposez () va également fonctionner -


0 commentaires

0
votes

Quelque chose comme ça devrait le faire pour vous. XXX PRE>

Vous pouvez le faire aussi. P>

Sub TransposeFormulas()
    Dim vFormulas As Variant
    Dim oSel As Range
    If TypeName(Selection) <> "Range" Then
        MsgBox "Please select a range of cells first.", _
                vbOKOnly + vbInformation, "Transpose formulas"
        Exit Sub
    End If
    Set oSel = Selection
    vFormulas = oSel.Formula
    vFormulas = Application.WorksheetFunction.Transpose(vFormulas)
    oSel.Offset(oSel.Rows.Count + 2).Resize(oSel.Columns.Count, oSel.Rows.Count).Formula = vFormulas
End Sub


0 commentaires

0
votes

Si vous souhaitez simplement copier et transposer les valeurs dans le Presse-papiers, vous pouvez utiliser le Makro suivant:

Sub PasteVal()
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=True
End Sub


0 commentaires