Excel VBA – 将垂直数组中的公式转置为水平数组

我已经search了各种各样的短语来回答我的问题,但我很难find一个有效的解决scheme。 这可能涉及几种不同解决scheme的组合,或者我还没有想到的方法; 所以任何帮助,将不胜感激。

说我在单元格A1,A2,A3和A4中有公式。 比方说,我希望那些精确的公式移动到正确的一列。

在VBA中我可以这样说:

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

我正在做的是这样的事情:

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

看看我的B:E范围是如何水平alignmentA1:A4的垂直范围的。

我已经尝试了各种转置选项,但我找不到任何工作,因为我想要精确公式的转移。

有什么想法吗?

你可以尝试像这样:

 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 

您也可以在每个范围的第一个单元格中使用偏移function

是否可以locking您的公式内的单元格引用? 我相信你知道,但F4键(PC)将切换引用的单元格锁。 美元符号locking列字母或行号[A6,$ A $ 6,A $ 6,$ A6]。 如果您locking单元格引用,则可以复制和转置公式。

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

这是另一个select:尝试录制一个macros,同时在单元格中input公式。 如果你的公式是:

 =SUM(D3:D4) 

根据您input公式的位置,VBA输出可能如下所示:

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

这里是VBA的绝对参考:

 "=SUM(R3C4:R4C4)" 

然后你可以做这样的事情:

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

这将在“A8:A23”的所有单元格中input公式= SUM($ D $ 3:$ D $ 4)。 如果使用VBA公式中的方括号,则应该能够使其工作。 下面的公式search包含文本“nff”公式的选定单元格左侧的列:

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