2015-10-01 3 views
0

Я пытаюсь сделать цикл, где ЕСЛИ условие истинно, а индекс ячейки n (столбец E) совпадает с индексом n + 1 ячейки, чтобы скопировать значение столбца C в столбец G.Как сделать «Do While» с условием?

К сожалению, значение столбца последней C не копируется в колонке G, поэтому я просто решить его с помощью строки:

Sheets("Report KIT").Range("G" & n) = Sheets("Report KIT").Range("C" & n).Value 

после Do While. Может ли кто-нибудь помочь с этим, пожалуйста? Благодаря

Sub Macroarea1() 
Dim ws As Worksheet 
Dim LastRow As Long 
Dim LastRow1 As Long, LastRow3 As Long 
Dim i, n As Integer, x As Integer, y As Integer 
Set ws = ActiveWorkbook.Sheets("Report KIT") 

    If Sheets("Migrazioni").Range("F" & 7) = "si" Then 
    n = Sheets("Migrazioni").Range("N" & 7).Value 
    Do While _ 
Sheets("Report KIT").Range("E" & n) = Sheets("Report KIT").Range("E" & n + 1) 
Sheets("Report KIT").Range("G" & n) = Sheets("Report KIT").Range("C" & n).Value 
n = n + 1 
Loop 
Sheets("Report KIT").Range("G" & n) = Sheets("Report KIT").Range("C" & n).Value 
End If 

End Sub

enter image description here

+1

Обязательно проверяйте логику перед выполнением кода. Вы говорите, что если текущая ячейка не равна следующей, ничего не делайте. Вам понадобится оператор 'или' в вашем' Do While', чтобы проверить, равна ли ячейка выше. –

ответ

0

я вымыл ваш цикл немного и добавил проверку значения в E столбца первой и модифицировал цикл, чтобы проверить, чтобы убедиться, что каждая строка соответствует начальным E Значение столбца, чтобы проверить его. Я проверил это с вашими типовыми данными, и он дал результат, который вы хотели. Иногда эти условные петли могут быть сложными, чтобы понять!

Sub Macroarea1() 

    Dim wsR As Worksheet, wsN As Worksheet 
    Dim LastRow As Long 
    Dim LastRow1 As Long, LastRow3 As Long 
    Dim i, n As Integer, x As Integer, y As Integer 

    Set wsR = ActiveWorkbook.Sheets("Report KIT") 
    Set wsN = ActiveWorkbook.Sheets("Migrazioni") 

    If wsN.Range("F7") = "si" Then 

     n = wsN.Range("N7").Value 
     i = wsR.Range("E" & n).Value 

     Do Until wsR.Range("E" & n) <> i 
      wsR.Range("G" & n).Value = wsR.Range("C" & n).Value 
      n = n + 1 
     Loop 

    End If 

End Sub 
+0

Спасибо, он отлично работает – Ale