2016-11-30 5 views
1

У меня есть 2D массив Dim Line_Qty(6, 2) со значениями в нем, как следующее:Найти индекс пустой записи в 2D массив Excel VBA

**Date  Line_No Quantity** 

2016-11-15 1  5856 

2016-11-15 2  5451 

2016-11-15 3  5499 

2016-11-15  

2016-11-15  

2016-11-15  

Что я хочу найти это индекс первого пробела, который Line_Qty(4, 1)

Целью этого является то, что я вставляю эти значения в листе excel и хочу прекратить вставлять их до последней записи количества.

мой вставляя код это

For i = 0 To 6 
For j = 0 To 2 

Worksheets("DY_SET").Cells(i + 1, j + 1).Value = Line_Qty(i, j) 
Worksheets("DY_SET").Range("A" & i + 2).NumberFormat = "yyyy-mm-dd" 

Next j 
Next i 

Надежда Я ясно, и заранее спасибо

+0

Вы хотите выйти из обоих циклов? – tjb1

+0

да, я хочу выйти из обоих циклов, потому что я не хочу только даты без lineno и количества. поэтому цикл должен выйти при последнем значении количества. – Tahmaseeb

ответ

1

Вы можете первым «усечение» массив, а затем вставьте выживших значения, как следует:

Dim Line_QtyCopy(0 to 6, 0 to 2) As Variant 

' search Line_Qty first row with empty qty 
For i = 0 To 6 
    If Line_Qty(i, 2) = "" Then Exit For 
Next i 

With Worksheets("DY_SET").Range("A1") '<--| reference target range 
    If i <7 Then '<--| if found empty qty before reaching array end 
     i = i - 1 '<--| update row index to last not emoty one 
     ReDim Line_QtyCopy(0 to i, 0 to 2) '<--| size a new array to the number of rows 
     ' fill it up to last not empty qty in Line_Qty 
     For i = 0 To i 
      For j = 0 To 2 
       Line_QtyCopy(i,j) = Line_Qty(i, j) 
      Next 
     Next 
     .Resize(i).Value = Line_QtyCopy '<--| write it down from cell A1 
    Else 
     .Resize(6).Value = Line_Qty 
    End If 
End With 
+0

благодарит много, он отлично работает, я думал об указателе точки зрения, вот почему я застрял, усечение массива не было даже в моей голове. спасибо много снова. – Tahmaseeb

+0

Добро пожаловать – user3598756

1

Этот код ускользает цикла, когда некоторое значение массива является пустым. Это то, что вам нужно?

For i = 0 To 6 
    For j = 0 To 2 
     If Line_Qty(i, j) = "" Then Exit For 
     Worksheets("DY_SET").Cells(i + 1, j + 1).Value = Line_Qty(i, j) 
    Next j 
    Worksheets("DY_SET").Range("A" & i + 2).NumberFormat = "yyyy-mm-dd" 
Next i 
+0

Спасибо @ Limak, я подобрал ваш ответ с user3598756, чтобы получить свой собственный ответ. спасибо за вашу помощь :) – Tahmaseeb