2016-05-16 7 views
0

を通じてエクセル内部の2つの列を読んで、私はこのコードを持っている:VBAがループ

Dim cityList() 

Set objExcel = CreateObject("Excel.Application") 

Set objWorkbook = objExcel.Workbooks.Open("C:\Users\xyz\Desktop\Test\Cities.xlsx") 
objExcel.Visible = True 

i = 1 
x = 0 

Do Until objExcel.Cells(i, 1).Value = "" 
ReDim Preserve cityList(x) 
cityList(x) = objExcel.Cells(i, 1).Value 
i = i + 1 
x = x + 1 

Loop 

objExcel.Quit 

私は2つの条件でこのような配列を作る際の問題を抱えています。私のExcelが2列に含まれています 市の日、私は列市を読み、それらを一つずつ読むために管理している

Mumbai 22.04.2016 
Delhi 23.05.2016 
Goa  24.06.2016 

を、私は日付を読み取るためにも必要と条件が似ている:

市のために= " Mumbai "とDate =" 22.04.2016 "のいずれかを実行します....

私はVBAにはあまり慣れていませんが、スクリプトを記述する必要があります。

誰も私の中に日付を追加する方法を教えてくれるので、彼は両方の列を読むことができますか?

おかげで先行

+0

ある都市のインスタンスが1つだけの場合は、配列ではなく「Dictionary」オブジェクトを使用するほうが良いかもしれません。複数のバージョンを使用できる場合は、代わりに2次元配列を考慮する必要がありますか?また、これはVBAではなくvbscriptです(Excelアプリケーションオブジェクトを作成しなければならない場所を示しています) – Dave

+0

Excelでこれを使用しているという問題は、配列にどれだけのメンバーが含まれているのかわからないためです。私は2つのメンバーを持つ空の配列を持っていたい、都市のリストと日付が毎週変更される原因になるあなたは私に役立ついくつかの例を私に送ることができますか?私はドキュメントを読んだことがありますが、実際にはっきりしているわけではありません。それらはすべて事前定義されたサイズです。 – marija

+0

さらに更新が必要だと思われる場合は、私の投稿された回答をチェックし、コメントしてください。 – Dave

答えて

1

ここでは、既存のコードの迅速な書き換えは、私はあなたが後にしていると思うものを達成することです:

Dim cityList(1,0) 
Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open("C:\Users\xyz\Desktop\Test\Cities.xlsx") 
objExcel.Visible = True 
Set oSheet = objWorkbook.Worksheets("Sheet1") ' set the correct sheet name here 
iLastRow = oSheet.Cells(oSheet.Rows.Count, 1).End(xlUp).Row ' determine the last row to look at 

For iRow = 1 To iLastRow 
    ReDim Preserve cityList(1,iRow-1)      ' within the loop, extend the array by 1 
    cityList(0,UBound(cityList)) = oSheet.Cells(iRow,1)  ' Set the city value 
    cityList(1,UBound(cityList)) = oSheet.Cells(iRow,2)  ' Set the date value 
Next 

' Now you have all the data you can iterate over it like so: 
For iLoop = 0 To UBound(cityList,2) 
    If cityList(0, iLoop) = "Mumbai" And cityList(1, iLoop) = "22.04.2016" Then 
     ' Do whatever you needed to do 
    End If 
Next 

objExcel.Quit 
+0

私は実際の値を入力しないでください。私は都市と日付をわかりませんので、私のExcelは含まれています:( – marija

+0

あなたのOPに基づいて例としてそれらを追加しました。おそらくあなたはスクリプトを実行しているとき、あなたは後になっているので、その情報をスクリプトに入れて、reqDateまたは同様に定義された変数でcityNameと "22.04.2016"を "Mumbai"に置き換える必要があります。 – Dave

0
' in your code you can capture date values using offset property 

ReDim Preserve cityList(x) 
cityList(x) = objExcel.Cells(i, 1).Value 
' = objExcel.Cells(i, 1).Offset(0, 1).Value ' offset property to capture date 
' As Dave said either you can use Dictionary or 2D arrays to store date. . . 
i = i + 1 
+0

こんにちは、私は試しましたこれは私が唯一の日付をキャッチしていて、都市はスキップされていますか? – marija

1

なぜ、これらすべてのループやredim

Dim cityList as variant, lastRow as Long 
lastRow = range("A" & rows.count).End(xlUp).Row 
cityList = range("A1:B" & lastrow) 

書くと

+0

私はこれを試しましたが、それは文の終わりのような私のエラーを示しています... :(おそらく私は良いことをやっていません – marija

0

私が見つけた解決策を実行するためにはるかに高速 :

Dim cityList() 

Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open("C:\Users\xyz\Desktop\Test\Cities.xlsx") 
objExcel.Visible = True 
i = 1 
x = 0 
y = 0 

Do Until objExcel.Cells(i, 1).Value = "" 
ReDim Preserve cityList(x) 
ReDim Preserve cityDate(y) 
cityList(x) = objExcel.Cells(i, 1).Value 
cityDate(y) = objExcel.Cells(i, 2).Value 

i = i + 1 

x = x + 1 
y = y + 1 

Loop 

objExcel.Quit 

j = 0 

For Each city in cityList 

tab = "City" 
     datetime = cityDate(j) 
     j = j + 1 
     count = count + 1 
     ..... 
Next 

は多分ない最適なソリューションですが、働いています!提案と助けをいただきありがとうございます!