Смещение результатов в массиве Excel VBA - PullRequest
0 голосов
/ 12 мая 2018

Я разработал массив на основе результатов ввода в рабочий лист.Используя командную кнопку, я могу заполнить необходимые данные в листе задержки.Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить результаты массива так, как я хочу, на листе задержки.На листе задержки есть смещение в один столбец между 10 и 11 и смещение в 4 столбца между 13 и 14.

    arval = "" 'This will be the total strig value of the individual array values that are captured
    a = 0 'counts the total number of rows of data that exist in the array

    For i = 2 To lr  'Start the array
        aval = wsg.Range("A" & i).Value

        If aval = "Y" Then  'Set the search parameters
            arval = wsg.Range("B" & i).Value & "~#pop#~"  'Start collecting data with the B column

                For j = 3 To 14
                    arval = arval & wsg.Cells(i, j).Value & "~#pop#~"   'continue collecting information in the various columns
                Next j
            ReDim Preserve array1(a)
            array1(a) = arval
            a = a + 1
        End If

    Next i

    wsd.Range("G2:X15").ClearContents  'Clears the inserts range

If a > 0 Then
    cr = 2
    For i = LBound(array1) To UBound(array1)
        cc = 7
        newarr = Split(array1(i), "~#pop#~")
        For j = LBound(newarr) To UBound(newarr)
            wsd.Cells(cr, cc).Value = newarr(j)
            cc = cc + 1
        Next j
        cr = cr + 1
    Next i
End If

Я смотрел на использование функции смещения, но не могу понятькак эффективно использовать его в коде.Я также подумал об использовании дополнительного массива, например, о том, что нужно использовать переменную "b", а затем установить для cc значение 11 и продолжить отображение информации.Я все в замешательстве.Я хочу пропустить столбец между 10 и 11. Это цель.Если я могу получить один, я могу получить остальные.

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Я хотел бы предложить установить целевой диапазон как несмежный, например,

dim r as range
set r  = wsd.range("G2:P2,R2:T2,X2:X2")

Затем использовать смещение, как это (я предполагаю, что lbound вашего массива равен 0).Также вы сможете обойтись без подсчета cc / cr, поскольку диапазон должен справиться с этим ...

    For j = LBound(newarr) To UBound(newarr)
        r.offset(i,0) = newarr(j)
    Next j

Не можете проверить это здесь, так что вам, вероятно, придется исправить мой код!

0 голосов
/ 12 мая 2018

Добавьте некоторые условные математические выражения, основанные на предпосылке, что false равно нулю, а true равно минус единице.

    For j = LBound(newarr) To UBound(newarr)
        wsd.Cells(cr, cc).Value = newarr(j)
        cc = cc + 1 + (abs(cc=10)) + (abs(cc=13)*4)
    Next j
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...