2016-10-03 56 views
1

我是VBA的新手,請原諒我缺乏經驗。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門陣列(了LineItem(0)&了LineItem (1))但是我現在怎麼索引它們裏面的內容呢?

感謝您的任何和所有幫助,這是不勝感激。

邁克


我使用的格式與其他應用程序的SolidWorks,蟒蛇等)除了Excel中使用CSV。我只需要訪問數組中的某些元素來填充某些單元格。就像這樣......我可以將整個數組放入列中,但我不想那樣做,只是我需要的那些。下面是CSV的樣品:

0,0.200 P,1.0709 Q,1.167 R,1.177 S,1.216 噸,1.570 U,1.5843 V,1.6883 W,1.9079 È ,.2645

我想要做的是引用第一個元素中的字母,並將第二個元素插入某個單元格中:通過索引引用「t」並插入「1.570」。

我的數組中的元素是LineItems(0)和LineItems(1)。所以理想情況下,我正在尋找引用元素中的每個索引項作爲LineItems(1)(a)/ LineItems(1-a)或類似的東西。

+2

你已經有2項的數組。要查看裏面的內容,可以執行類似於第一項的Debug.Print LineItems(0)或第二項的(1)。您可以使用For循環來迭代項目,例如:'For i = LBound(LineItems)to UBound(LineItems)' –

+0

您沒有2個數組 - 您有* 1個*數組有兩個*元素*。 – Comintern

+1

VBA中沒有關聯數組...所有索引都是數字的。 – salih0vicX

回答

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)。

+0

我使用的CSV格式化爲與Excel以外的其他應用程序一起使用。我只需要訪問數組中的某些元素來填充某些單元格。就像這樣......我可以將整個數組放入列中,但我不想那樣做,只是我需要的那些。以下是CSV示例: – Mike

+0

除了Excel以外,我正在使用的CSV格式用於其他應用程序SolidWorks,Python等)。我只需要訪問數組中的某些元素來填充某些單元格。就像這樣......我可以將整個數組放入列中,但我不想那樣做,只是我需要的那些。下面是CSV的樣品: 0,0.200 P,1.0709 Q,1.167 R,1.177 S,1.216 噸,1.570 U,1.5843 V,1.6883 W,1.9079 È,. 2645我想要做的是引用第一個元素中的字母,並將第二個元素插入某個單元格中:通過索引引用「t」並插入「1.570」。 – Mike

+0

@Mike謝謝你的額外信息!請你[編輯你的問題](http://stackoverflow.com/posts/39834124/edit)在那裏添加信息?這樣它會更容易閱讀,並且其他人可以更容易地添加另一個答案。 **順便**,歡迎來到本網站!查看[tour](https://stackoverflow.com/tour)獲取更多關於提問問題的信息,這些問題將吸引高質量的答案(和另一個徽章!)。 – cxw

0

您可以在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"