Страницы: 1
RSS
Циклическое перемещение диапазона с помощью массивов VBA
 
Добрый день Уважаемые Эксперты.

Прошу помочь разобраться в следующем вопросе.
У наc имеется диапазон  Range("F4:G9")
Подскажите пожалуйста как с помощью массивов в три захода его перенести в соседний диапазон Range("I4:J9")?
Под речевым оборотом в три захода, я имею ввиду естественно цикл. Т.е. если у нас массив размерностью 6х2 (6 строк Х 2 столбца), то по задумке желательно, чтобы
присваивание шло в переменные массива 2х2 (2 строки и 2 столбца). Координаты начала и конца каждой строки распологаются в диапазоне Range("C4:D6")
Вообщем вот мой вариант:
Код
Sub Maassive()
Dim A As Variant
   Nom_grup = 3
     ReDim A(1 To Nom_grup)

 k = 3
 m = 3

For i = 1 To Nom_grup
    
    k = k + 1
    A(Nom_grup) = Range("F" & Cells(k, 3) & ":G" & Cells(k, 4))
    
Next i

Shag_cikla2 = Nom_grup
Nom_grup = 0

For i = 1 To Shag_cikla2

   Nom_grup = Nom_grup + 1
   m = m + 1
   Range("I" & Cells(m, 3) & ":J" & Cells(m, 4)) = A(Nom_grup)

Next i

End Sub
По факту выполнения данного кода заполнятся только диапазон  Range("I8:J9"), т.е. тот A(Nom_grup), при котором Nom_grup = 3.
Соответственно, а как собственно говоря необходимо дополнить или видоизменить данный код, чтобы A() при Nom_grup = 1 и 2, тоже заполнялись?
на свои места, т.е.  Range("I4:J5") и Range("I6:J7")?
Признаю что формулировку проблемы вряд ли можно отнести к разряду удачных, за это отдельно прошу прощения.
Попробую попроще, как диапазон(6Х2) с помощью трех массивов(2Х2) перенести в соседний диапазон с помощью VBA.

Прошу помочь разобраться.

Благадарю Вас.
 
 
Может так?

Скрытый текст
"Все гениальное просто, а все простое гениально!!!"
 
Уважаемый Nordheim благодарю Вас за ответ.
А не подскажите как это делать по частям? и динамическими диапазонами?
Благодарю за ответ еще раз.
Код
Sub Maassive1()
    Dim arr()
    'arr = [f4:g9].Value
    A1 = Cells(4, 3)
    A2 = Cells(4, 4)
    
   ' arr = ["f" & Cells(4,3) & ":g" & Cells(4,3)].Value
   arr = ["f"&A1&":g"& A2].Value
    
    [i4].Resize(UBound(arr), UBound(arr, 2)).Value = arr
End Sub
На строрке:
Код
arr = ["f"&A1&":g"& A2].Value
возникает ошибка объект не обнаружен.
Что делаю не так, мне не ясно.
Прошу помочь доразобраться
Изменено: IgorBoot - 01.02.2019 14:10:46
 
Цитата
IgorBoot написал:не подскажите как это делать по частям?
Поясните зачем это делать по частям, есть ли пример задачи для перенесения по частям?
"Все гениальное просто, а все простое гениально!!!"
 
Уважаемый Nordheim.
Пример задачи, если учебной, то Перемещение только 1 и только 3 элмента массива, т.е. общий массив (6х2, разбивается на 3 участка, по 2Х2 и небходимо,
в условное место вывести нужные элементы массива. В реальной задаче просто выборка объемнее. Там в файлике в заглавном посте, был диапазон C4:D6, в котором были границы строк отбора. Т.е. в столбце C начало отбора диапазона, в стоблце D конец отбора диапазона.
Подскажите пожалуйста, тогда как строку из предложенного Вами кода:
Код
arr = [f4:g9].Value
Задать с помощью динамического диапазона?.
Благодарю.
Изменено: IgorBoot - 01.02.2019 14:30:57
 
Не совсем понятно, что нужно конкретно. В файле перенесенные данные не соответствуют упорядоченности в искомом массиве.
Строка
Код
 arr = [f4:g9].Value
формирует искомый массив. нужно кусок данных укажите другой диапазон, зачем циклы гонять.
"Все гениальное просто, а все простое гениально!!!"
 
Уважаемый Nordheim

В ячейке C4 или Cells(4, 3)
В ячейке D4 или Cells(4, 4)

Находится Границы массивов, в данном случае это будет "F4:G5".
Подскажите как в строке:
Код
arr = [f4:g9].Value
Задать тоже самое но динамическим диапазоном, т.е. 4 и 9( в данном случае 5) брать из ячеек C4 и D4?
Благодарю Вас.
Изменено: IgorBoot - 01.02.2019 15:01:20
 
Вот пара вариантов может подойдет какой:
Скрытый текст
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
IgorBoot написал:
с помощью массивов в три захода его перенести в соседний диапазон
?
Не совсем вас понял, но может быть так ?
Код
Option Explicit

Sub yolki_palki()
    Const c% = 6
    Const col% = 7
    Const corc% = 3
    
    Dim r&, vbeg&, vend&, arr()
    
    r = 4
    Do Until Cells(r, "c").Value = ""
        vbeg = Cells(r, "c").Value
        vend = Cells(r, "d").Value
        arr = Range(Cells(vbeg, c), Cells(vend, col)).Value
        Range(Cells(vbeg, c + corc), Cells(vend, col + corc)).Value = arr
        r = r + 1
    Loop
    Erase arr
End Sub
?
 
Вот что я хотел в итоге:
Код
Sub Maassive()

Dim A As Variant

   Nom_grup = 3
     ReDim A(1 To Nom_grup)

'A = Range("F4:G9")

'Range("I4:J9") = A

 k = 3
 m = 3
 
Shag_cikla2 = Nom_grup
Nom_grup = 0

For i = 1 To Shag_cikla2
    
    k = k + 1
    Nom_grup = Nom_grup + 1
    'A(Nom_grup) = Range("F4:G5")
    A(Nom_grup) = Range("F" & Cells(k, 3) & ":G" & Cells(k, 4))
    
Next i

Shag_cikla2 = Nom_grup
Nom_grup = 0

For i = 1 To Shag_cikla2

   m = m + 1
   Nom_grup = Nom_grup + 1

   'Range("I4:J9") = A(Nom_grup)
   Range("I" & Cells(m, 3) & ":J" & Cells(m, 4)) = A(Nom_grup)

Next i

End Sub
Спасибо Всем за участие
Изменено: IgorBoot - 02.02.2019 17:49:58
Страницы: 1
Наверх