пожалуйста, помогите мне создать цикл для этого кода vba

#excel #vba #loops #if-statement #conditional-statements

Вопрос:

У меня есть 2 листа,исходная таблица и дополнительный лист. Из таблицы источников мне нужно скопировать значения из таблицы источников.Диапазон(Ячейки(14, 3),Ячейки(14, 8)) до AcctSheet.диапазон(Ячейки(2, 11),Ячейки(7, 11)), однако каждая ячейка из таблицы источников отличается от acctsheet таким образом, что

 sourceSheet.Cells(14, 3) = AcctSheet.Cells(2, 11) sourceSheet.Cells(14, 4) = AcctSheet.Cells(3, 11) sourceSheet.Cells(14, 5) = AcctSheet.Cells(4, 11) and so on until sourceSheet.Cells(14, 8) = AcctSheet.Cells(7, 11)  

полный код здесь, но я надеюсь зациклиться на этом.

 sourceSheet.Activate  'EQ  If IsEmpty(sourceSheet.Cells(14, 3).Value) Then  AcctSheet.Cells(2, 11).Value = sourceSheet.Cells(7, 1).Value   ElseIf sourceSheet.Cells(14, 3).Value lt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(2, 11).Value = sourceSheet.Cells(14, 3).Value   ElseIf sourceSheet.Cells(14, 3).Value gt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(2, 11).Value = sourceSheet.Cells(7, 1).Value   End If  'WS  If IsEmpty(sourceSheet.Cells(14, 4).Value) Then  AcctSheet.Cells(3, 11).Value = sourceSheet.Cells(7, 1).Value   ElseIf sourceSheet.Cells(14, 4).Value lt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(3, 11).Value = sourceSheet.Cells(14, 4).Value   ElseIf sourceSheet.Cells(14, 4).Value gt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(3, 11).Value = sourceSheet.Cells(7, 1).Value   End If  'TO  If IsEmpty(sourceSheet.Cells(14, 5).Value) Then  AcctSheet.Cells(4, 11).Value = sourceSheet.Cells(7, 1).Value   ElseIf sourceSheet.Cells(14, 5).Value lt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(4, 11).Value = sourceSheet.Cells(14, 5).Value   ElseIf sourceSheet.Cells(14, 5).Value gt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(4, 11).Value = sourceSheet.Cells(7, 1).Value   End If  'FL  If IsEmpty(sourceSheet.Cells(14, 6).Value) Then  AcctSheet.Cells(5, 11).Value = sourceSheet.Cells(7, 1).Value   ElseIf sourceSheet.Cells(14, 6).Value lt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(5, 11).Value = sourceSheet.Cells(14, 6).Value   ElseIf sourceSheet.Cells(14, 6).Value gt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(5, 11).Value = sourceSheet.Cells(7, 1).Value   End If  'FR  If IsEmpty(sourceSheet.Cells(14, 7).Value) Then  AcctSheet.Cells(6, 11).Value = sourceSheet.Cells(7, 1).Value   ElseIf sourceSheet.Cells(14, 7).Value lt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(6, 11).Value = sourceSheet.Cells(14, 7).Value   ElseIf sourceSheet.Cells(14, 7).Value gt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(6, 11).Value = sourceSheet.Cells(7, 1).Value   End If  'TR  If IsEmpty(sourceSheet.Cells(14, 8).Value) Then  AcctSheet.Cells(7, 11).Value = sourceSheet.Cells(7, 1).Value   ElseIf sourceSheet.Cells(14, 8).Value lt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(7, 11).Value = sourceSheet.Cells(14, 8).Value   ElseIf sourceSheet.Cells(14, 8).Value gt; sourceSheet.Cells(7, 1).Value Then  AcctSheet.Cells(7, 11).Value = sourceSheet.Cells(7, 1).Value   End If  

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

1. У вас есть lt; и gt; , но ничего, если = , это подразумевается ?

Ответ №1:

Является ли что-то подобное тем, что вы ищете?

 Option Explicit  Sub test()  Dim sourceSheet As Worksheet, acctSheet As Worksheet  Dim i As Long  Dim sourceCell As Range, targetCell As Range, defaultCell As Range    Set defaultCell = sourceSheet.Cells(7, 1)    For i = 3 To 8    Set sourceCell = sourceSheet.Cells(14, i)  Set targetCell = acctSheet.Cells(i - 1, 11)    If IsEmpty(sourceCell) Then  targetCell.Value2 = sourceCell.Value2  ElseIf sourceCell.Value2 lt; defaultCell.Value2 Then  targetCell.Value2 = sourceCell.Value2  ElseIf sourceCell.Value2 gt; defaultCell.Value2 Then  targetCell.Value2 = defaultCell.Value2  End If    Next i   End Sub  

Строго говоря, я не думаю, что вам нужно включать .Value2 после каждой ячейки, так как VBA использует это по умолчанию при чтении кода, но это не повредит.

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

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

1. о боже мой! Спасибо! это решает мою проблему!