Arrays VBA关联数组(如何索引)

Arrays VBA关联数组(如何索引),arrays,vba,indexing,Arrays,Vba,Indexing,我是VBA的新手,请原谅我缺乏经验 我正在使用ExcelVBA,试图找出如何为数组编制索引。我正在导入CSV并使用拆分功能。我需要访问拆分为数组的项目的每个单独项目。解释我需要什么的最好方法是Actionscript中的一个例子: var a:Array = []; a[1] = "Hello"; a[2] = "World"; (Except that what I have is a dynamic array created by the SPLIT function) Where I c

我是VBA的新手,请原谅我缺乏经验

我正在使用ExcelVBA,试图找出如何为数组编制索引。我正在导入CSV并使用拆分功能。我需要访问拆分为数组的项目的每个单独项目。解释我需要什么的最好方法是Actionscript中的一个例子:

var a:Array = [];
a[1] = "Hello";
a[2] = "World";
(Except that what I have is a dynamic array created by the SPLIT function)
Where I could access "Hello" with the var a[1]
以下是我到目前为止的情况:

Sub getTxtfile()
FilePath = Application.GetOpenFilename _
(Title:="Please choose a file to open", _
FileFilter:="CSV Files *.csv* (*.csv*),")
Open FilePath For Input As #1
row_number = 0
Do Until EOF(1)
    Line Input #1, LineFromFile
    LineItems = Split(LineFromFile, ",")
    'ActiveCell.Offset(row_number, 0).Value = LineItems(1)
    'ActiveCell.Offset(row_number, 1).Value = LineItems(0)
    row_number = row_number + 1
    'Debug.Print LineItems(0) & ": " & LineItems(1)
    Loop
Close #1
End Sub
我现在有2个数组(LineItems(0)和LineItems(1)),但此时如何索引其中的内容

非常感谢您的帮助,非常感谢

迈克



我使用的CSV是格式化的,可以与Excel以外的其他应用程序(SolidWorks、python等)一起使用。我只需要访问数组中的某些元素来填充某些单元格。实际上…我可以将整个数组拉入列中,但我不想这样做,只想做我需要的那些。以下是CSV的示例:

0.200 p、 1.0709 q、 1.167 r、 1.177 s、 1.216 t、 1.570 u、 1.5843 v、 1.6883 w、 1.9079 e、 .2645

我想做的是引用第一个元素中的字母,并将第二个元素插入到某个单元格中:通过索引引用“t”,并插入“1.570”


我的数组中的元素是LineItems(0)和LineItems(1)。因此,理想情况下,我希望将元素中的每个索引项引用为LineItems(1)(a)/LineItems(1-a)或类似的内容。

我认为代码中注释掉的行实际上应该有效,至少就数组访问而言是如此。(但是,我可能不完全理解您试图实现的目标。请编辑您的问题以澄清吗?)我建议添加

Option Explicit
Option Base 0
在文件的顶部,以及

Dim LineItems as Variant
拆分
调用之前。这样,编译器将帮助您查找错误

但是,如果您真正想要的是打开CSV,请允许我建议:

Dim wb as Workbook
Workbooks.OpenText Filename:="<filename>", DataType:=xlDelimited, Comma:=True
Set wb = Workbooks(Workbooks.Count)
Dim wb as工作簿
Workbooks.OpenText文件名:=“”,数据类型:=xlDelimited,逗号:=True
Set wb=工作簿(Workbooks.Count)

这将为您提供一个新的工作簿
wb
,其中CSV已解析,可以像任何其他工作表一样访问()。

我认为代码中注释掉的行实际上应该可以工作,至少就数组访问而言是这样。(但是,我可能不完全理解您试图实现的目标。请编辑您的问题以澄清吗?)我建议添加

Option Explicit
Option Base 0
在文件的顶部,以及

Dim LineItems as Variant
拆分
调用之前。这样,编译器将帮助您查找错误

但是,如果您真正想要的是打开CSV,请允许我建议:

Dim wb as Workbook
Workbooks.OpenText Filename:="<filename>", DataType:=xlDelimited, Comma:=True
Set wb = Workbooks(Workbooks.Count)
Dim wb as工作簿
Workbooks.OpenText文件名:=“”,数据类型:=xlDelimited,逗号:=True
Set wb=工作簿(Workbooks.Count)

这将为您提供一个新的工作簿
wb
,其中CSV已解析,可以像任何其他工作表一样访问()。

您可以在VBA中使用Scripting.Dictionary对象或.NET
System.Collections.HashTable创建关联数组,但这似乎有点过头了

可以像这样使用锯齿阵列(阵列的阵列):

Line = "0,.200 p,1.0709 q,1.167 r,1.177 s,1.216 t,1.570 u,1.5843 v,1.6883 w,1.9079 e,.2645"
LineItems = Split(Line, ",")

Dim LineSubItems()      ' has to be Variant or Variant() array
ReDim LineSubItems(0 To UBound(LineItems))

For i = 0 To UBound(LineItems)
    LineSubItems(i) = Split(LineItems(i), " ")
Next

Debug.Print LineSubItems(1)(1) ' "p"

在VBA中,可以使用Scripting.Dictionary对象或.NET
System.Collections.HashTable
创建关联数组,但这似乎有点过分了

可以像这样使用锯齿阵列(阵列的阵列):

Line = "0,.200 p,1.0709 q,1.167 r,1.177 s,1.216 t,1.570 u,1.5843 v,1.6883 w,1.9079 e,.2645"
LineItems = Split(Line, ",")

Dim LineSubItems()      ' has to be Variant or Variant() array
ReDim LineSubItems(0 To UBound(LineItems))

For i = 0 To UBound(LineItems)
    LineSubItems(i) = Split(LineItems(i), " ")
Next

Debug.Print LineSubItems(1)(1) ' "p"

您已经有一个包含2项的数组。若要查看内部内容,可以执行类似“调试”的操作。第一个项目打印行项目(0),第二个项目打印行项目(1)。您可以使用For循环来迭代项,例如:
For i=LBound(LineItems)到UBound(LineItems)
您没有两个数组-您有一个带有两个元素的数组。VBA中没有关联数组。。。所有索引都是数字的。@salih0vicX字典都是关联数组,尽管这不是Mike所说的。(你可以反驳说,字典本身不是VBA的一部分,但实际上它们被用作本机数据结构)。你想过使用字典吗?请参见此处的问题:您已经有一个包含2项的数组。若要查看内部内容,可以执行类似“调试”的操作。第一个项目打印行项目(0),第二个项目打印行项目(1)。您可以使用For循环来迭代项,例如:
For i=LBound(LineItems)到UBound(LineItems)
您没有两个数组-您有一个带有两个元素的数组。VBA中没有关联数组。。。所有索引都是数字的。@salih0vicX字典都是关联数组,尽管这不是Mike所说的。(你可以反驳说,字典本身不是VBA的一部分,但实际上它们被用作本机数据结构)。你想过使用字典吗?请看这里的问题:我使用的CSV已格式化,可用于Excel以外的其他应用程序。我只需要访问数组中的某些元素来填充某些单元格。实际上…我可以将整个数组拉入列中,但我不想这样做,只想做我需要的那些。下面是CSV的一个示例:我使用的CSV是格式化的,可以与Excel以外的其他应用程序(SolidWorks、python等)一起使用。我只需要访问数组中的某些元素来填充某些单元格。实际上…我可以将整个数组拉入列中,但我不想这样做,只想做我需要的那些。这是一个CSV的示例:0.200p,1.0709q,1.167r,1.177s,1.216t,1.570u,1.5843v,1.6883w,1.9079e,2645我想做的是引用第一个元素中的字母,并将第二个元素插入到某个单元格中:通过索引引用“t”,并插入“1.570”。@Mike感谢提供更多信息!请你在那里添加信息好吗?这样,阅读起来会更容易,其他人也会更容易添加另一个答案。顺便说一句,欢迎来到这个网站!查看,了解更多有关提问的信息,这些问题将吸引高质量的答案(以及另一个徽章)