Страницы: 1
RSS
Урезание величина массива без использования цикла
 
Добрый вечер.Существует сформированный массив размером 150на11.Нужно без использования циклов уменьшить его величину до 100на11 (50 значений нужно отбросить сначала, а не в конце).
 
vigor, за что Вы его - цикл - так не любите ?
 
Почему не люблю, просто неужели в такой сложной штуке как VBA, нет возможности простого урезания масивов
 
{quote}{login=vigor}{date=31.05.2012 08:53}{thema=}{post}неужели в такой сложной штуке как VBA, нет возможности простого урезания масивов{/post}{/quote}Есть. Снизу (в конце).
 
Юрий шутку заценил))), а по сути
 
Да легко и просто.  
Выгружаем на лист, и грузим снова начиная с 50.  
Не вариант?
 
Да я и не шутил :-) - снизу обрезать можно. А почему именно без цикла? ведь это займёт долю секунды. Примеры на форуме были.
 
Та просто суть в следующем.Есть строки кода которые из одного массива взятого на листе (массив А) фильтруют и формируют другой массив b. После этого, нужно сделать массив k, в котором были бы нижние 6 строк массива b.  
Когда я следующий раз перебирал массив b, для j брал не 1, а 6. Но хочется поменьше строчек кода.    
 
vidb = ThisWorkbook.Worksheets("1").Range("H1").Value  
ZSS = Application.WorksheetFunction.CountIf(Range("A2:A100000"), vidb)  
' определяем величину массива  
With ThisWorkbook.Worksheets("VID")  
A = .Range(.Cells(2, 1), .Cells(lLastRow, 29)) 'массив обрабатываемых значений  
End With  
ReDim b(1 To UBound(A, 1), 1 To 12)  
For i = 1 To UBound(A) 'перебираем массив обрабатываемых значений  
If A(i, 1) = vidb Then 'если первое сравнение верно  
' Переносим в массив данные таблицы, удовлетворяющие условию  
j = j + 1         'увеличиваем индекс  
b(j, 1) = A(i, 5) 'перекладываем выбранные значения из массива в массив  
b(j, 2) = A(i, 6) 'перекладываем выбранные значения из массива в массив  
b(j, 3) = A(i, 9) 'перекладываем выбранные значения из массива в массив  
b(j, 4) = 1 'перекладываем выбранные значения из массива в массив  
b(j, 5) = "" 'перекладываем выбранные значения из массива в массив  
b(j, 6) = A(i, 24) 'перекладываем выбранные значения из массива в массив  
b(j, 7) = "" 'перекладываем выбранные значения из массива в массив  
b(j, 8) = "" 'перекладываем выбранные значения из массива в массив  
b(j, 9) = "" 'перекладываем выбранные значения из массива в массив  
b(j, 10) = "" 'перекладываем выбранные значения из массива в массив  
b(j, 11) = "" 'перекладываем выбранные значения из массива в массив  
b(j, 12) = "" 'перекладываем выбранные значения из массива в массив  
End If  
Next i
 
Ка писал один из гур Экс-форумов ZVI - избыточность кода не есть его недостаток, поелику пишется оный один раз, а используется - много.  
PS я бы еще и это:  
b(j, 7) = "" 'перекладываем выбранные значения из массива в массив  
b(j, 8) = "" 'перекладываем выбранные значения из массива в массив  
b(j, 9) = "" 'перекладываем выбранные значения из массива в массив  
b(j, 10) = "" 'перекладываем выбранные значения из массива в массив  
b(j, 11) = "" 'перекладываем выбранные значения из массива в массив  
b(j, 12) = ""  
в цикл запихнул бы:-)
Я сам - дурнее всякого примера! ...
 
По сути топика - можно через API copymemory. На форуме неоднократно обсуждалось. А оно надо? Я бы не заморачивался. Намного код оно не сократит, а в плане понимания, читабельности кода, однозначно его ухудшит.
Я сам - дурнее всякого примера! ...
 
Понял всем спасибо.Буду через цикл прогонять и не заморачиваться.Раз уж KukLP сказал, значит так оно и есть (он мне конкретно помогал много раз). P.S. Изучал возможности массивов, очень уж мало всяких вкусненьких штучек и уловок, кроме ReDim, UBound и типа того нет ничего, вы не находите гуру?
 
Можно выбирать "строки" или "столбцы" массива с помощью application.index():  
 
Sub tt()  
   Dim a(), b(), c()  
   a = [a1:c3].Value
   b = Application.Index(a, 2, 0)  
   c = Application.Index(a, 0, 2)  
End Sub  
 
 
Но мне не нравится... :)  
Но иногда можно использовать.
 
to KukLp, Hugo: Вот спасибо за решения с  API copymemory и  Application.Index - я о такой красоте и не догадывался!
Страницы: 1
Читают тему
Наверх