Arrays 使用Excel VBA从数组写入单元格

Arrays 使用Excel VBA从数组写入单元格,arrays,excel,vba,Arrays,Excel,Vba,我需要从数组中写入Excel单元格 我在数组中有三个值,我想把它写在单元格中,看起来是这样的: EUR GBP USD 此时,我想将值写入单元格 ReDim CurrencyArray(0 To myCollection.Count, 1 To 1) For element = 1 To myCollection.Count CurrencyArray(element, 1) = myCollection(element) Next element CurrencyArray(0, 1) =

我需要从数组中写入Excel单元格

我在数组中有三个值,我想把它写在单元格中,看起来是这样的:

EUR GBP USD 此时,我想将值写入单元格

ReDim CurrencyArray(0 To myCollection.Count, 1 To 1)
For element = 1 To myCollection.Count
CurrencyArray(element, 1) = myCollection(element)
Next element


CurrencyArray(0, 1) = "Sum Currency"

Set Summary = Range("M1").Resize(UBound(CurrencyArray, 1) + 1)
'Sum currency values
Dim Count As Integer
Dim SumArray As Variant

For Each element In CurrencyArray
 For Count = 2 To lRow
    If ws.Cells(Count, 5) = element Then
      SumArray = SumArray + ws.Cells(Count, 6)
    End If
 Next Count
Next element


Summary.Value = CurrencyArray
它应该是这样的:

EUR 1000
GBP 500
YEN 100
问题是,我有一个具有不同值的电子表格,但我不允许编辑电子表格,除非使用VBA

Currency Amount EUR 1000 EUR 100 EUR 12 EUR 70 GBP 40 GBP 20 货币金额 1000欧元 100欧元 12欧元 70欧元 40英镑 20英镑 我必须过滤不同的货币,并总结货币的金额。然后我想将它设置到excel工作表的正确位置

EUR 1182 GBP 60 1182欧元 60英镑
但我事先不知道会有多少种货币,或者数额有多大。首先,我想筛选重复项,然后根据货币汇总金额。

要垂直写入,需要有一个2D数组和一个大小合适的目标。所以 (完全未经测试):


另一个选择是转置一维数组。但是对于一个数组可以转置的大小是有限制的;而且,当您必须将集合中的元素单独写入数组时,按上述方式执行,可以节省该步骤。

我不确定是否正确理解您的问题,但请尝试以下操作:

Dim CurrencyArray As Variant
CurrencyArray = Array("EUR", "GBP", "USD")
Range("A1:A3") = Application.Transpose(CurrencyArray)

哈哈,我发布了转置版本LOL:)@L42,我以前经常使用它,直到我遇到了“工作表中的列数”的限制,至少在2003年和2007年。不知道以后的版本。我仍然将其用于使用
Array
方法构建的小型阵列。但对于从集合构造数组,我发现只需写入2D数组就更简单了。这正是我想要的。现在我需要用这些值来计算。e、 g.如果值为欧元,则应将表中的所有值相加,对于英镑,则相同。如果您遇到问题,应在1000欧元、500英镑、400日元的背面左侧写上。您可能可以使用
SUMIF
公式,不过,根据您的数据安排,我想知道您是否只需要一个透视表。我又遇到了一些问题。我原以为可以将值保存在数组中,但这行不通。我已经添加了到目前为止我编写的代码。我希望你能纠正它们。不完全是……我以前过滤过这些值。有多个值(欧元、欧元、欧元、英镑、日元),我不得不将它们减少到3个值(欧元、英镑、美元),我不知道该表中会使用多少种不同的货币。关于您的其他问题,您没有提供足够的信息来重现您的问题,甚至不知道问题是什么。请阅读。您还应该查看Chip Pearson的网站,以便了解从数组到范围的写入。为了解决您的全部问题,我建议使用透视表,如下所述。只需在同一工作表上创建一个表;使用宏记录器;然后把它清理干净。它会给你一份货币清单,以及每种货币的总数。当列表更改时,只需刷新它。您可能需要进行编辑,以便在展开列表时更新轴的范围。
ReDim CurrencyArray(0 To myCollection.Count, 1 to 1)
For element =  1 To myCollection.Count
   CurrencyArray(element, 1) = myCollection(element)
Next element

'You can put the header in the first cell of an array where the first dimension is zero-based
CurrencyArray(0,1) = "Sum Currency"

Set Summary = Range("M1").Resize(ubound(currencyarray,1)+1)
 Summary.Value = CurrencyArray
Dim CurrencyArray As Variant
CurrencyArray = Array("EUR", "GBP", "USD")
Range("A1:A3") = Application.Transpose(CurrencyArray)