【问题标题】:Write from array to cells using Excel VBA使用 Excel VBA 从数组写入单元格
【发布时间】:2015-09-17 00:34:42
【问题描述】:

我需要从一个数组向下写入 Excel 单元格。

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

欧元 英镑 美元

代码:

On Error Resume Next
For Each element In CurrencyArray
    myCollection.Add Item:=element, Key:=element
Next element
On Error GoTo 0

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


Set Summary = Range("M1")
Summary.Value = "Sum Currency"

此时我想将值写入单元格。

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。

货币金额 1000 欧元 100 欧元 12 欧元 70 欧元 40 英镑 20 英镑

我必须过滤不同的货币并总结货币的数量。然后我想把它设置到excel表的正确位置。

1182 欧元 60 英镑

但我事先不知道会有多少种货币或金额有多大。一开始我想过滤重复项,然后根据货币总结金额。

【问题讨论】:

  • 关于您的其他问题,您没有提供足够的信息来重现您的问题,甚至无法确定是什么问题。请阅读How to create a minimal, complete and verifiable example。您还应该查看 Chip Pearson 的网站,以便了解如何将数组写入范围。
  • 为了解决您的全部问题,我建议如下所示,使用数据透视表。只需在同一个工作表上创建一个表格;使用宏记录器;然后清理它。它将为您提供货币列表以及每种货币的总和。当列表发生变化时,只需刷新它。您可能需要进行编辑,以便在展开列表时更新 Pivot 的范围。

标签: arrays excel vba


【解决方案1】:

要垂直书写,您需要一个二维数组和一个适当大小的目标。所以 (完全未经测试):

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

另一种选择是转置您的一维数组。但是你可以转置多大的数组是有限制的。并且,按照上述方式,当您必须将元素从集合中单独写入数组时,可以节省该步骤。

【讨论】:

  • 哈哈我贴了转置版LOL :)
  • @L42 以前经常用,直到遇到“工作表中的列数”的限制,至少在2003年和2007年。不知道以后的版本。我仍然将它用于使用Array 方法构建的小型数组。但是对于从集合构造数组,我发现只写入二维数组更简单。
  • 这正是我想要的。现在我需要用这些值来计算。例如如果值为 EUR,那么它应该总结表中的所有值,对于 GBP,则相同。这应该写在左侧 EUR 1000 GBP 500 YEN 400
  • 如果遇到问题请回帖。您可能可以使用SUMIF 公式,不过,根据您的数据排列,我想知道您是否只需要一个数据透视表。
  • 我又遇到了一些问题。我以为我可以将值保存在数组中,但这不起作用。我已经添加了到目前为止我编写的代码。我希望你能纠正他们。
【解决方案2】:

我不确定我是否正确地回答了你的问题,但试试这个:

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

【讨论】:

  • 不完全是......我之前已经过滤了这些值。有多个值(欧元、欧元、欧元、英镑、日元)我不得不将它们减少到 3 个值欧元、英镑、美元,而且我事先不知道该表中将使用多少种不同的货币。
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 2018-04-28
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 2016-01-25
相关资源
最近更新 更多