Почему цикл в моем коде VBA агрегирует данные? - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть код VBA, который копирует данные с одного листа и вставляет на новый лист. Код должен циклически проходить по каждой строке на целевом листе и вставлять данные, если уникальные идентификаторы совпадают. Вставленные данные в первом ряду верны. Однако в каждой последовательной строке данные агрегируются

Например: Токовый выход

Строка 1 - test1

Строка 2 - test1 test2

Строка 3 - test1 test2 test3

Требуемый выход

Строка 1 - test1

Строка 2 - test2

Строка3 - test3

Почему происходит агрегирование данных? Я подозреваю, что это как-то связано с логикой цикла, но я не смог это исправить ..

Любые рекомендации по переписыванию кода для устранения агрегации очень приветствуются !!

Option Explicit

Sub Update_Market_Status()

Dim d As Long
Dim j As Long
Dim prev_acts As String
Dim next_acts As String
Dim ws As Object
Dim status_report As Object
Dim lastRow As Long
Dim last_project As Long

Set ws = ThisWorkbook.Sheets("Project plan")
Set status_report = ThisWorkbook.Sheets("Status Report")
lastRow = ThisWorkbook.Sheets("Project plan").Cells(Rows.Count, "D").End(xlUp).Row + 1
last_project = ThisWorkbook.Sheets("Status Report").Cells(Rows.Count, "C").End(xlUp).Row + 1

On Error Resume Next

    For j = 8 To last_project

    If ThisWorkbook.Sheets("Status Report").Range("C" & j).Value <> "" Then

        For d = 2 To lastRow

           If ws.Range("V" & d).Value = ThisWorkbook.Sheets("Status Report").Range("I" & j).Value Then

            If LCase(ws.Range("N" & d).Value) = "y" Then

            If LCase(ws.Range("T" & d).Value) = "c" Then
                    If prev_acts = vbNullString Then
                        prev_acts = "'- " & ws.Range("D" & d).Value
                        Else
                        prev_acts = prev_acts & vbLf & "- " & ws.Range("D" & d).Value
                    End If

                ElseIf LCase(ws.Range("T" & d).Value) = "o" Or LCase(ws.Range("T" & d).Value) = vbNullString Then
                    If next_acts = vbNullString Then
                        next_acts = "'- " & ws.Range("D" & d).Value
                        Else
                        next_acts = next_acts & vbLf & "- " & ws.Range("D" & d).Value
                    End If
               End If
         End If
         End If

      Next d

    ThisWorkbook.Sheets("Status Report").Range("E" & j).Value = prev_acts ' Previous Actions
    ThisWorkbook.Sheets("Status Report").Range("F" & j).Value = next_acts ' Next Actions

    End If

    Next j

    End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...