我是VBA的新手所以请原谅我缺乏经验。
我正在使用excel VBA并试图弄清楚如何索引数组。我导入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,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 即,0.2645
我想要做的是引用第一个元素中的字母并将第二个元素插入某个单元格中:参考" t"通过一个索引,并有" 1.570"插入
我的数组中的元素是LineItems(0)和LineItems(1)。理想情况下,我希望将元素中的每个索引项引用为LineItems(1)(a)/ LineItems(1-a)或类似的东西。
答案 0 :(得分:0)
我认为代码中注释掉的行实际上应该可以工作,至少就数组访问而言。 (但是,我可能不完全明白你想要完成什么。你能编辑你的问题以澄清吗?)我建议你添加
Option Explicit
Option Base 0
位于文件顶部,
Dim LineItems as Variant
在Split
来电之前。这样编译器将帮助您找到错误。
然而,如果真正想要的是打开CSV,请允许我建议:
Dim wb as Workbook
Workbooks.OpenText Filename:="<filename>", DataType:=xlDelimited, Comma:=True
Set wb = Workbooks(Workbooks.Count)
将为您提供一个新的工作簿wb
,其中CSV已经过解析,可以像其他任何工作表一样随时访问(docs on MSDN)。
答案 1 :(得分:0)
您可以在VBA中使用Scripting.Dictionary对象或.NET spring-web 4.1.4.RELEASE
创建关联数组,但这似乎有点矫枉过正。
你可以像这样使用Jagged Arrays(Arrays of Arrays):
System.Collections.HashTable