Excel VBA – transposer des formules en tableau vertical vers un tableau horizontal

J'ai googlé toutes sortes de phrases pour une réponse à ma question, mais j'ai du mal à find une solution qui fonctionne. Cela implique probablement la combinaison de quelques solutions différentes, ou d'une méthode que je n'ai pas encore pensée; de sorte que toute aide serait appréciée.

Disent que j'ai des formules dans les cellules A1, A2, A3 et A4. Disons que je veux que ces formules EXACT se déplacent vers la colonne droite.

En VBA, je peux dire:

Range("B1:B4").Formula = Range("A1:A4").Formula 

Ce que je cherche à faire, c'est quelque chose comme ça:

 Range("B1:E1").Formula = Range("A1:A4").Formula 

Voyez comment ma gamme B: E correspond à la gamme verticale A1: A4.

J'ai essayé toutes sortes d'options de transposition, mais je ne trouve pas ce travail parce que je veux que la formule EXACT soit transférée.

Des pensées?

Vous pourriez essayer quelque chose comme:

 Sub PivotRangeFormulas() Dim rngSrc As Range: Set rngSrc = ActiveSheet.Range("A1:A4") Dim rngTgt As Range: Set rngTgt = ActiveSheet.Range("B1:E1") Dim i As Long: For i = 1 To rngSrc.Rows.Count Application.Index(rngTgt, i).Formula = Application.Index(rngSrc, i).Formula Next i End Sub 

Vous pouvez également utiliser une fonction Offset à partir de la première cellule dans chaque plage

Le locking de la reference de la cellule dans vos formules est-il possible? Je suis sûr que vous le savez, mais la key F4 (pc) va basculer les verrous de cellule référencés. Le signe dollar verrouille la lettre de colonne ou le numéro de ligne [A6, $ A $ 6, A $ 6, $ A6]. Si vous verrouillez les references de votre cellule, vous pouvez ensuite copyr et transposer les formules.

 Range("B1:E1").Copy Range("A1").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True 

Voici une autre option: Essayez d'save une macro tout en entrant dans votre formule dans la cellule. Si votre formule est:

 =SUM(D3:D4) 

Selon l'endroit où vous avez entré la formule, la sortie VBA pourrait ressembler à:

 "=SUM(R[3]C:R[4]C)" 

Voici la reference absolue dans VBA:

 "=SUM(R3C4:R4C4)" 

Vous pourriez alors faire quelque chose comme:

 Range("A8:A23").FormulaR1C1 = "=SUM(R3C4:R4C4)" 

Cela entrera la formule = SUM ($ D $ 3: $ D $ 4) dans toutes les cellules de "A8: A23". Si vous jouez avec les parenthèses dans la formule VBA, vous devriez pouvoir le faire fonctionner. La formule ci-dessous search la colonne à gauche de la (les) cellule (s) sélectionnée (s) contenant la formule pour le text "nff":

  Selection.FormulaR1C1 = _ "=SEARCH(""nff"",RC[-1])" 
 Range("B1:E1").Formula = WorksheetFunction.Transpose(Range("A1:A4").Formula)