j = 1 For i = 1 To 18 If Range("I" & (i + 5)) > 0 Then arrFIO(j) = Range("B" & (i + 5)).Value arrTN(j) = Range("A" & (i + 5)).Value arrPod(j) = Range("I" & (i + 5)).Value j = j + 1 End If Next i
Range("L6:L13").Value = arrFIO Range("M6:M13").Value = arrTN Range("N6:N13").Value = arrPod End Sub
[/vba]
Здравствуйте. Не могу записать в ячейки данные из массива((( [vba]
Код
Option Explicit
Public arrTN Public arrFIO Public arrPod
Private Sub Worksheet_Activate() Dim i As Integer Dim j As Integer Dim count As Integer
'считаю количество строк в которых число в ячейке >0 For i = 6 To 18 If Range("I" & i) > 0 Then count = count + 1 End If Next
j = 1 For i = 1 To 18 If Range("I" & (i + 5)) > 0 Then arrFIO(j) = Range("B" & (i + 5)).Value arrTN(j) = Range("A" & (i + 5)).Value arrPod(j) = Range("I" & (i + 5)).Value j = j + 1 End If Next i
Range("L6:L13").Value = arrFIO Range("M6:M13").Value = arrTN Range("N6:N13").Value = arrPod End Sub
Так нужно? Массивы из ячеек (или в ячейки) всегда двумерные [vba]
Код
Private Sub Worksheet_Activate() For i = 6 To 18 If Range("I" & i) > 0 Then count_ = count_ + 1 End If Next Range("L6:N18").ClearContents ReDim arr(1 To count_, 1 To 3) For i = 1 To 18 If Range("I" & (i + 5)) > 0 Then j = j + 1 arr(j, 1) = Range("B" & (i + 5)).Value arr(j, 2) = Range("A" & (i + 5)).Value arr(j, 3) = Range("I" & (i + 5)).Value End If Next i Range("L6").Resize(count_, 3) = arr End Sub
[/vba] А лучше так [vba]
Код
Private Sub Worksheet_Activate() ar0 = Range("I6:I18") 'это ДВУМЕРНЫЙ массив 13х1 ar1 = Range("A6:B18") 'это ДВУМЕРНЫЙ массив 13х2 For i = 1 To UBound(ar0) If ar0(i, 1) > 0 Then count_ = count_ + 1 'count в VBA уже есть, использовать такую же переменную не нужно End If Next Range("L6:N18").ClearContents ReDim arr(1 To count_, 1 To 3) For i = 1 To UBound(ar0) If ar0(i, 1) > 0 Then j = j + 1 arr(j, 1) = ar1(i, 1) arr(j, 2) = ar1(i, 2) arr(j, 3) = ar0(i, 1) End If Next i Range("L6").Resize(count_, 3) = arr End Sub
[/vba]
Так нужно? Массивы из ячеек (или в ячейки) всегда двумерные [vba]
Код
Private Sub Worksheet_Activate() For i = 6 To 18 If Range("I" & i) > 0 Then count_ = count_ + 1 End If Next Range("L6:N18").ClearContents ReDim arr(1 To count_, 1 To 3) For i = 1 To 18 If Range("I" & (i + 5)) > 0 Then j = j + 1 arr(j, 1) = Range("B" & (i + 5)).Value arr(j, 2) = Range("A" & (i + 5)).Value arr(j, 3) = Range("I" & (i + 5)).Value End If Next i Range("L6").Resize(count_, 3) = arr End Sub
[/vba] А лучше так [vba]
Код
Private Sub Worksheet_Activate() ar0 = Range("I6:I18") 'это ДВУМЕРНЫЙ массив 13х1 ar1 = Range("A6:B18") 'это ДВУМЕРНЫЙ массив 13х2 For i = 1 To UBound(ar0) If ar0(i, 1) > 0 Then count_ = count_ + 1 'count в VBA уже есть, использовать такую же переменную не нужно End If Next Range("L6:N18").ClearContents ReDim arr(1 To count_, 1 To 3) For i = 1 To UBound(ar0) If ar0(i, 1) > 0 Then j = j + 1 arr(j, 1) = ar1(i, 1) arr(j, 2) = ar1(i, 2) arr(j, 3) = ar0(i, 1) End If Next i Range("L6").Resize(count_, 3) = arr End Sub