Увеличивайте строки и столбцы, чтобы найти отклонения и вставить значения в Excel VBA

#excel #vba

#excel #vba

Вопрос:

У меня есть два листа. Лист1 содержит данные в формате B3: W296, а Лист2 содержит данные в альтернативных столбцах B3: B23, D3: D23, .., T3: T23. Теперь я должен заполнить пустые альтернативные столбцы на листе 2 (C3: C23, E3: E23, .., U3: U23)

Значения листа 2 должны быть заполнены следующим образом,

Лист2.C3.value = VARP(«Лист1».Диапазон (C3: C16)) …

Лист2.U3.value = VARP(«Лист1».Диапазон (U3: U16))

Для строки 4 на листе 2 формулу следует изменить следующим образом,

Лист2.C4.value = VARP(«Лист1».Диапазон (C17: C30)) …

Лист2.U4.value = VARP(«Лист1».Диапазон (U17: U30))

Мне приходится делать это в разных файлах, поэтому количество строк и столбцов на обоих листах может отличаться. Поэтому я не могу явно указать номера строк и столбцов.

Я начал писать следующий код, но я застрял,

 Dim lRow, lRow2 As Long
Dim lCol, lCol2 As Long
Dim i, j As Integer

lRow = ThisWorkbook.Worksheets("Sheet2").Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, _
LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
lCol = ThisWorkbook.Worksheets("Sheet2").Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, _
LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
lRow2 = ThisWorkbook.Worksheets("Sheet1").Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, _
LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
lCol2 = ThisWorkbook.Worksheets("Sheet1").Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, _
LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column

For i = 3 To lRow
    For j = 3 To lCol - 2 Step 2
            ThisWorkbook.Worksheets("Sheet2").Range(j amp; i).Value = VarP(ThisWorkbook.Worksheets("Sheet1").Range())
    Next j
Next i
  

Я не уверен, как выполнить цикл for для этого случая.

Буду признателен за любую помощь. Заранее спасибо.

Комментарии:

1. Всегда ли вычисляемые диапазоны состоят из 14 ячеек?

2. @SJR да.. Я всегда буду вычислять отклонения в 14 ячейках

Ответ №1:

Я полагаю, вы хотите указать отдельное число, отличное от вашего текущего i для строк… вам нужно будет найти количество наборов varp для перебора, аналогично (непроверенному):

 dim lr as long, lc as long, i as long, j as long, k as long, ns as long
with sheets(1)
    lc = .cells(1,.columns.count).end(xltoleft).column
    lr = .cells(.rows.count,1).end(xlup).row
    ns = application.rounddown(lr/14.01) 'uses 14.01 to divide so you start the 15th row on a separate set
    for j = 3 to lc -2 step -2
        for i = 3 to ns 3 'just added the plus 3 as edit1
            k = i*14 3  'starts on row 3
            sheets(2).cells(i,j).value = varp(.range(.cells(k,j),.cells(k 13,j))
        next i
    next j
end with
  

Комментарии:

1. В коде lc, lr и ns относятся к sheet1, а в sheet2 количество строк отличается от sheet1. Таким образом, цикл for идеально подходит для вычисления различий, но не для вставки. Поэтому мне пришлось бы заменить ‘i’ в sheets (2).cells(i, j).value другой переменной. Как мне это сделать?

2. @Aprnaa для листа 2 у вас столько строк, сколько у вас наборов отклонений? именно так я обрабатывал лист 2, поэтому у вас ns (количество наборов) является максимальным, начиная со строки 3 (только что понял, что мне нужно «ns 3» как максимум для i. использование lr (последняя строка на листе 1) будет использоваться для поиска ns, что будет определять использование строк на листе 1 вплоть до последней строки.

3. Извините за поздний ответ. Не пробовал отредактированный код, но он имеет смысл. Скоро вы узнаете результат.