Страницы: 1
RSS
Удалить строку из двухмерного массива по условию VBA
 
Добрый день, уважаемые коллеги.  Пытаюсь удалить строку из массива 1 по условию (если значение одного из элементов в строке массива 1 равно, например 0). Понимаю, что оптимальное решение для этого - заполнить другой массив (массив 2), в который необходимо записать строки из массива 1, которые удовлетворяют установленному  выше критерию. Написал код ниже, но опять вылазит какая-то проблема с размерностью массива. Вроде в этой строке косяк: Revised(g) = Table(i), Подскажите плиз, что поправить ? Файл откуда записываю данные в массив 1 прилагаю
Код
    Dim Table()
    Dim Revised()
    Dim lLastRow  As Long, i As Long, g As Long
        
    lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Table = Range("A1:I" & lLastRow).Value
    
    For i = 1 To lLastRow
    If Table(i, 8 )<> 0 Then
    For g = 1 To lLastRow
    Revised(g) = Table(i)
    Next g
    End If
    Next i
 
 
Процедура имеет не случайное имя.
Код
Sub Большая_Северная_Беленькая_Лисичка()
    Dim Table(), dict
    Dim Revised()
    Dim lLastRow As Long, i As Long, g As Long, Sh As Worksheet
    Set dict = CreateObject("scripting.dictionary")
    Set Sh = ActiveSheet
    lLastRow = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row
    Table = Sh.Range("A1:I" & lLastRow).Value
    For i = 1 To lLastRow
        If Table(i, 8) <> 0 Then
            dict.Item(i) = i
        End If
    Next i
    keys = dict.keys
    If dict.Count = 0 Then Exit Sub
    ReDim Revised(1 To dict.Count, 1 To 9)
    For i = 0 To UBound(keys)
        For g = 1 To 9
            Revised(i + 1, g) = Table(keys(i), g)
        Next
    Next

End Sub
Изменено: doober - 09.03.2020 18:45:19
 
Цитата
doober написал:
Sub Большая_Северная_Беленькая_Лисичка()
:D  :D  :D
По вопросам из тем форума, личку не читаю.
 
Цитата
Duke2 написал:
какая-то проблема с размерностью массива
Обратите внимание на строку 16 кода, предложенного doober.
 
Цитата
Duke2 написал:
оптимальное решение для этого - заполнить другой массив
- думаю оптимальнее переложить всё нужное наверх в этом же массиве, ну хотя бы для памяти :)
Если конечно не в напряг тягать далее этот неиспользуемый хвост (и нужно не забыть что он есть!).
А на практике обычно долго ничего таскать и не нужно - создали и тут же выгрузили на лист...
Но формально конечно это не соответствует задаче темы :)
Изменено: Hugo - 09.03.2020 19:48:51
 
Цитата
doober написал:
Процедура имеет не случайное имя
Чтобы не зависеть от региональных настроек, лучше избегать русскоязычных имен функций. Можно, например, POLARFOX. :)  
Владимир
 
Так пропадёт большая и белая )
 
doober, спасибо. Код работает, мне осталось только понять как...Понял, что много (отн-но) строк отводится на определение размерности массива 2
 
Эх, только медведь и кот меня поняли
 
doober, Все зверье и пернатый Sokol поняло  :D
По вопросам из тем форума, личку не читаю.
 
Не, ну привлекать сюда словарь - это конечно большая и белая :)
Но зато не будет излишне большого массива, как в варианте когда просто создаём сразу второй такой же пустой и перекладываем.
Страницы: 1
Наверх