Можно ли вывести на лист определенный диапазон вариантов? - PullRequest
3 голосов
/ 03 октября 2011

У меня есть вариант, подобный этому

var = sheet1.Range("A1:P3600").Value

Я выполнил несколько оперионов и выдвинул ненужные строки наверх в варианте.Теперь мне нужно скопировать вариант var на другой лист из определенного диапазона.

sheet1.range("A3444:P" & i).value = var(range(cells(r,"A").cells(l,"P"))

, то есть var (от 350 до конца var) следует скопировать на другой лист.Является ли это возможным ?мы можем сделать это?

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Один из способов - сбросить уменьшенный массив во второй массив, затем второй массив в ваш диапазон

Приведенный ниже код создает вариантный массив с 3600 строками на 16 столбцов (т. Е. A: P), данныевыгружается в массив для выборочных данных (обратите внимание, что у вас уже есть этот массив как Var) , затем переменная используется в качестве маркера для уменьшения массива до второго массива, затем второй массив записывается вrange.

Обновлено в соответствии с вашими точными местоположениями данных.В вашем случае у вас уже есть Var1 (ваш Var), поэтому вам просто нужна вторая часть кода, которая начинается с lngStop = 350, и мой код Var1 ссылается на Var

Sub TestME()
Dim Var1
Dim Var2
Dim lngCnt As Long
Dim lngCnt2 As Long
Dim lngCnt3 As Long
Dim lngCnt4 As Long
Dim lngStop As Long
Var1 = Sheet1.Range([a1], [p3600]).Value2
For lngCnt = 1 To UBound(Var1, 1)
    For lngCnt2 = 1 To 16
        Var1(lngCnt, lngCnt2) = "I am row " & lngCnt & " column " & lngCnt2
    Next lngCnt2
Next lngCnt
lngStop = 350
ReDim Var2(1 To UBound(Var1, 1) - lngStop + 1, 1 To UBound(Var1, 2))
For lngCnt3 = lngStop To UBound(Var1, 1)
    For lngCnt4 = 1 To UBound(Var1, 2)
        Var2(lngCnt3 - lngStop + 1, lngCnt4) = Var1(lngCnt3, lngCnt4)
    Next lngCnt4
Next lngCnt3
Sheet1.[a3444].Resize(UBound(Var2, 1), UBound(Var2, 2)).Value2 = Var2
End Sub
1 голос
/ 03 октября 2011

Вы можете шлепнуть только часть вашего массива на лист, но только если эта часть находится в верхнем левом углу вашего массива, то есть только первые n столбцы и первые m строки. Не существует простого способа присвоения столбцов last n и строк last m. В этом случае вам придется прибегнуть к переносу материала во второй, меньший массив, а затем сбросить его на лист, как в ответе @ brettdj - это работает нормально, но это немного обходно и слишком много кода на мой вкус.

Вместо этого, если бы вы могли вытолкнуть ваши «нежелательные строки» вниз в конец массива, то было бы однострочно, чтобы шлепнуть верхние строки этого массива на лист (без последних 350).

Вот пример, где считывается массив 4 x 3, и только верхний левый 3 x 2 возвращается обратно на лист. Секрет заключается в том, чтобы сделать целевой диапазон меньше, чем весь массив.

Dim v
v = Range("A2:C5")
Range("E2:F4") = v
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...