2016-01-13 67 views
1

我有从4X1格式1×4格式(4行)移调范围变

我找遍但我似乎无法找到任何工作调换范围变量的问题。

这里是我的尝试:在价值分配

Function test(periodcol2 As Range, ratecol2 As Range, X As Range) 
    Dim periodcol As Range 
    Dim ratecol As Range 

If periodcol2.Columns.Count > 1 Then 
    periodcol.Value = Application.WorksheetFunction.Transpose(periodcol2) 
    ratecol.Value = Application.WorksheetFunction.Transpose(ratecol2) 
End If 

崩溃。

If periodcol2.Columns.Count > 1 Then 
    Set periodcol = Application.WorksheetFunction.Transpose(periodcol2) 
    Set ratecol = Application.WorksheetFunction.Transpose(ratecol2) 

End If 

相同的结果。

编辑:这也不起作用,而不是它使periodcol内容“空”所示用Excel工具提示

Dim periodcol As Variant 
Dim ratecol As Variant 

If periodcol2.Columns.Count > 1 Then 
    periodcol = Application.WorksheetFunction.Transpose(periodcol2) 
    ratecol = Application.WorksheetFunction.Transpose(ratecol2) 
Else 

EDIT2:rate_count & period_count等于0在此代码的末尾。

Function TEST(periodcol2 As Range, ratecol2 As Range, X As Range) 
Dim periodcol As Variant 
Dim ratecol As Variant 

If periodcol2.Columns.Count > 1 Then 
    periodcol = Application.Transpose(periodcol2) 
    ratecol = Application.Transpose(ratecol2) 
Else 

    Set periodcol = periodcol2 
    Set ratecol = ratecol2 
End If 



Dim period_count As Integer 
Dim rate_count As Integer 
period_count = periodcol.Rows.Count 
rate_count = ratecol.Rows.Count 

注意:我不想将值粘贴到任何位置,只是将它们放在代码中。

+0

当你从一个范围内调换值时,你不使用范围而是使用数组。所以你声明(例如)'periodcol'为Variant并且不要使用'Set'来指定来自'Transpose'的返回值。 –

+0

参见编辑,使它们变体产生不同的结果(没有崩溃),但仍然不起作用 – LucasSeveryn

+0

编辑我的帖子,那些输入到函数,如果函数检测到更多的列然后一个,它需要转置它。 – LucasSeveryn

回答

0
Sub Tester() 

    Dim rng As Range, arr, arr2 

    Set rng = Range("A1:D1") 'contents 1,2,3,4 

    If rng.Columns.Count > 1 Then 
     arr = Application.Transpose(rng.Value) 
     'arr is now a 2-d array (1 to 4, 1 to 1) 
     Debug.Print arr(1, 1), arr(2, 1), arr(3, 1), arr(4, 1) 
     ' >>> 1 2 3 4 

     'EDIT: if you want a 1-D array 
     arr2 = Application.Transpose(arr) 
     Debug.Print arr2(1), arr2(2), arr2(3), arr2(4) 

    End If 


End Sub