arrays - 使用未分配的变量作为条目创建 Excel VBA 数组

标签 arrays vba excel

我正在尝试设置一个工作流/UX,其中导入了 CSV 文件,并使用每列顶部的下拉菜单为导入文件的每一列分配了一个“数据类型”。一旦这些数据类型被指定/分配给每一列,另一个宏将使用导入的 CSV 数据填充第二个工作表,其中新工作表中的位置取决于为导入数据的每一列指定的数据类型。

例如,如果导入数据的第一列是数据类型“DataA”,则将为此第一列选择下拉选择(从下拉菜单中的总共 12 个“数据类型”中选择)。然后,此“DataA”数据将填充到第二张表的第五列中。

这是我到目前为止的代码:

Dim DataA As Integer, DataB As Integer, DataC As Integer, DataD As Integer, DataE As Integer, DataF As Integer, DataG As Integer, DataH As Integer, DataI As Integer, DataJ As Integer, DataK As Integer, DataL As Integer

    Dim ColArray(12) As Variant

    For p = 1 To LastColImport 'This is a previously-defined/assigned variable

        q = 1

        Do While q <= 12

        If ActiveSheet.DropDowns(p).Value = q Then

            ColArray(q) = p

            Exit Do

            Else

            q = q + 1

        End If

        Loop

    Next p

这将填充 ColArray如果选择了数据类型,则具有整数条目的数组,如果尚未选择,则为空条目。我要做的下一步是分配每个 ColArray命名变量的条目值,以便我可以调用 ColArray通过数据类型名称输入值,而不必记住或查找每个数据类型 ColArray整数值是指。

我在任何地方都找不到内置的“下拉列表范围名称”召回功能,所以我想做的是以下内容:
Dim ColArrayNames(12) As Variant

ColArrayNames(1) = DataA 'These variables were defined in the previous code block
ColArrayNames(2) = DataB

...

ColArrayNames(12) = DataL


ColArrayNames = ColArray

我意识到在这种特定情况下,将数据类型变量直接分配给 ColArray 值可能会更容易,而不是将它们放入数组中,然后使数组值相等。我觉得用未分配的变量填充数组在其他情况下也很有用。我尝试使用这种分配变量的方法失败了。

将最后一行代码更改为:
For i = 1 to 12

ColArrayNames(i) = ColArray(i)

Next i
ColArray值不会分配给数据类型变量。话虽如此,ColArrayNames条目被分配了正确的值,因此问题似乎是通过 ColArrayNames 将 ColArray 值分配给数据类型变量的“最后一步”未分配变量的数组。

如果有人对如何解决使用未分配变量数组为每个数组条目分配值的“一般”问题提出建议(同时保留使用条目的“原始”变量名称调用这些值的能力),或者如果有更有效地使用此电子表格功能的方法,请告诉我!

编辑 1:按照 John Coleman 的要求,我将详细说明我在这里尝试做的事情。

将导入的列号分配给数据类型后,我想通过以下方式将数据发送到带有一些代码的第二张工作表:
For i = 2 to LastRow 'The LastRow variable value will be found using a simple xlDown search process

Worksheets(2).Cells(1,i).Value = Worksheets(1).Cells(DataA,i).Value
Worksheets(2).Cells(4,i).Value = Worksheets(1).Cells(DataB,i).Value

Etc.

Next i

再一次,我意识到我可以很容易地使用
Worksheets(2).Cells(1,i).Value = Worksheets(1).Cells(ColArrayNames(1),i).Value

等等,但我觉得如果我要问的问题是可能的,我也许可以在另一种情况下使用它(即使它不是这个例子最理想的方法)。

最佳答案

据我了解您的问题,它似乎归结为有效(和高效)定义原始源数据和格式化输出(在这种情况下,第二个工作表上的单元格)之间的数据映射。

当遇到问题的数据类型部分时,我意识到目标数据类型的最终“持有者”是持有它的对象——在这种情况下,它是工作表单元格,而不是 VBA 变量或数组。您的重点似乎是 VBA 代码,它将数据从一个工作表传输/复制到另一个工作表(或到/从变体数组)。您自己的效率选择应该是您的指南。如果您想对多种数据类型使用相对通用的代码,我的建议是使用 Variant值或数组,并在复制到目标单元格后,设置目标单元格的格式(有效地“键入”它以供以后需要使用)。

如果可以灵活地扫描映射表以容纳任意数量的数据类型、格式或列,则甚至可能不需要字典。

关于arrays - 使用未分配的变量作为条目创建 Excel VBA 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34596487/

相关文章:

excel - 如何使用vba从具有多个数据字段的Excel数据透视表中删除小计

c++ - 使用多态基类(包含虚函数)访问时数组元素的类型

excel - 在 Excel 中的 HYPERLINK 中使用 INDIRECT

c - 从数组中获取最大最小元素,删除它们并对数组的其余部分求和

excel - 从个人宏访问两个不同的工作簿

vba - 自动将电子邮件签名插入 Outlook session 邀请

excel - 根据不同单元格的值填充单元格的宏

vba - 表内宏循环中的 Vlookup

javascript - 生成器未定义

c# - 跨度和二维数组