在VBA中调换一个范围

我试图通过VBAmacros在Excel中转​​置一系列单元格,但我得到一些错误,主要是错误91。

我对VBA相当陌生,对function也不太了解。

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

通过几个论坛后,这是我所提出的。 有一点要注意的是,我不必将其复制到任何其他单元格中。

我想要实现的是创build一个协方差方法,在选项窗口中,用户可以select范围,然后select列或行,这将影响结果协方差matrix。

这让你X和X'作为变种arrays,你可以传递给另一个函数。

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

要将转置的值作为范围,您必须通过工作表将其传递给此答案 。 没有看到你的协变函数如何工作,很难看到你需要什么。

首先复制源范围,然后粘贴特殊目标范围与移调:=真,短样本:

 Option Explicit Sub test() Dim sourceRange As Range Dim targetRange As Range Set sourceRange = ActiveSheet.Range(Cells(1, 1), Cells(5, 1)) Set targetRange = ActiveSheet.Cells(6, 1) sourceRange.Copy targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True End Sub 

Transpose函数使用Varaianttypes的参数并返回Variant。

  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 

我将尝试解释“ 调用两次转置 ”的目的。 如果你在Excel中有行数据 ,比如“a1:h1”,那么Range(“a1:h1”)。Value是一个二维variables数组 ,其范围为1到1,1到8 。 当你调用Transpose(Range(“a1:h1”).value)时,你得到的转置2D数组 1到8,1到1 。 如果你调用转置(移调(范围(“a1:h1”)价值))你得到一维variables数组 1到8。

第一次转置将行更改为列,第二次转置将列更改回行,但只有一个维度

如果源范围会有更多的行(列),例如“a1:h3”,那么移调function就会像这样改变尺寸: 1到3,1到8移到1到8,1到3,反之亦然。

希望我没有混淆你,我的英语不好,对不起:-)。

严格地说,在“转置”的前提下,任何一个人都可以工作; 即application.transpose()或者worksheetfunction.transpose(),并且根据经验,如果你真的喜欢打字,application.WorksheetFunction.Transpose()也可以工作 –

你不需要这样做。 以下是如何创build协方差方法:

http://www.youtube.com/watch?v=RqAfC4JXd4A

或者,你可以使用Excel的统计分析软件包。

像这样的东西应该为你做。

 Sub CombineColumns1() Dim xRng As Range Dim i As Long, j As Integer Dim xNextRow As Long Dim xTxt As String On Error Resume Next With ActiveSheet xTxt = .RangeSelection.Address Set xRng = Application.InputBox("please select the data range", "Kutools for Excel", xTxt, , , , , 8) If xRng Is Nothing Then Exit Sub j = xRng.Columns(1).Column For i = 4 To xRng.Columns.Count Step 3 'Need to recalculate the last row, as some of the final columns may not have data in all rows xNextRow = .Cells(.Rows.Count, j).End(xlUp).Row + 1 .Range(xRng.Cells(1, i), xRng.Cells(xRng.Rows.Count, i + 2)).Copy .Cells(xNextRow, j) .Range(xRng.Cells(1, i), xRng.Cells(xRng.Rows.Count, i + 2)).Clear Next End With End Sub 

你也可以这样做。

 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 

看到这个更多的信息。

http://bettersolutions.com/vba/arrays/transposing.htm