Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Извлечь данные из массива - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Извлечь данные из массива
Oleg34 Дата: Воскресенье, 23.09.2018, 13:23 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте. Не могу записать в ячейки данные из массива(((
[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

Range("L6:L18").ClearContents

ReDim arrTN(count)
ReDim arrFIO(count)
ReDim arrPod(count)

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]
К сообщению приложен файл: 1263021.xlsm (15.9 Kb)
 
Ответить
СообщениеЗдравствуйте. Не могу записать в ячейки данные из массива(((
[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

Range("L6:L18").ClearContents

ReDim arrTN(count)
ReDim arrFIO(count)
ReDim arrPod(count)

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]

Автор - Oleg34
Дата добавления - 23.09.2018 в 13:23
_Boroda_ Дата: Воскресенье, 23.09.2018, 13:54 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Так нужно?
Массивы из ячеек (или в ячейки) всегда двумерные
[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]
К сообщению приложен файл: 1263021_1.xlsm (16.2 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно?
Массивы из ячеек (или в ячейки) всегда двумерные
[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]

Автор - _Boroda_
Дата добавления - 23.09.2018 в 13:54
Oleg34 Дата: Воскресенье, 23.09.2018, 17:10 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
_Boroda_, Спасибо) огромное!
 
Ответить
Сообщение_Boroda_, Спасибо) огромное!

Автор - Oleg34
Дата добавления - 23.09.2018 в 17:10
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!