9

ExcelでVBAマクロを使用してセルの範囲を転置しようとしていますが、いくつかのエラーが発生します。ほとんどの場合、エラー91です。

私はVBAにかなり慣れておらず、関数についてもあまり理解していません。

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

いくつかのフォーラムを通過した後、これは私が思いついたものです。注意すべき点の1つは、それらを他のセルにコピーする必要がないことです。

私が達成しようとしているのは、共分散メソッドを作成することです。オプションウィンドウで、ユーザーは範囲を選択し、列または行のいずれかを選択するオプションがあります。これは、結果の共分散行列に影響します。

4

6 に答える 6

17

これにより、別の関数に渡すことができるバリアント配列としてXとX'が取得されます。

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

転置された値を範囲として使用するには、この回答のようにワークシートを介して値を渡す必要があります。共分散関数がどのように機能するかを確認しないと、必要なものを確認するのは困難です。

于 2012-11-01T11:45:46.590 に答える
6

最初にソース範囲をコピーしてから、Transpose:= True、短いサンプルを使用してターゲット範囲に特別に貼り付けます。

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関数は、Varaiant型のパラメーターを受け取り、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

'転置を2回呼び出す'の目的を説明しようと思います。Excelに行データがある場合(例: "a1:h1 ") 、Range( "a1:h1")。Valueは、1から1、1から8の次元の2Dバリアント配列です。Transpose(Range( "a1:h1")。Value)を呼び出すと、次元が1から8、1から1の2Dバリアント配列が転置されます。また、 Transpose(Transpose(Range( "a1:h1")。Value))を呼び出すと、次元が1から8の1Dバリアント配列が取得されます。

最初の転置は行を列に変更し、2番目の転置は列を行に戻しますが、次元は1つだけです。

ソース範囲にさらに多くの行(列)がある場合、たとえば「a1:h3」の場合、転置関数は次のようにディメンションを変更します。1から3、1から8 1から8、1から3に転置し、その逆も同様です。

私があなたを混乱させなかったことを願っています、私の英語は悪いです、ごめんなさい:-)。

于 2012-11-01T10:49:57.193 に答える
0

これを行う必要はありません。共分散メソッドを作成する方法は次のとおりです。

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

または、Excelにある統計分析パッケージを使用することもできます。

于 2012-11-01T10:27:05.050 に答える
0

厳密に言えば、本の「転置」の前置きに関しては、どちらかが機能します。つまり、application.transpose()またはworksheetfunction.transpose()であり、経験上、入力が本当に好きな場合は、application.WorksheetFunction.Transpose()も機能します-

于 2014-07-25T17:26:16.517 に答える
0

このような何かがあなたのためにそれをするはずです。

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/transposed.htm

于 2017-01-15T15:33:42.630 に答える
0

クリップボードの値をコピーして転置したいだけの場合は、次のマクロを使用できます。

Sub PasteVal()
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=True
End Sub
于 2021-07-14T10:08:00.290 に答える