#excel #vba #loops
#excel #vba #циклы
Вопрос:
Я пытаюсь выполнить поиск в столбце C для конкретной строки из массива и распечатать все связанные данные в этой строке. Однако мне нужно, чтобы вся информация, содержащая соответствующие столбцы C и D, печаталась под одним и тем же заголовком. Я не могу понять, как обеспечить, чтобы все данные печатались по порядку под правильными заголовками без повторения данных. Мой код для этого конкретного раздела приведен ниже.
Пример моих входных данных выглядит так:
В идеале, это должно быть напечатано следующим образом:
Вместо этого это выглядит так:
Имейте в виду, что это будет работать следующим образом: проверьте столбец C на наличие информации, хранящейся в массиве, когда что-то найдено, проверьте столбец D. Затем просмотрите весь лист в поисках других экземпляров данных, которые имеют одинаковые столбцы C и D, и распечатайте эти данные с заголовком. Вернитесь к началу листа и найдите соответствующий столбец C с другим столбцом D, распечатайте эти данные и продолжите для всего массива.
Я не знаю, как это сделать, не имея соответствующей информации столбца D под другим заголовком или бесконечно печатая позицию массива 0.
'Check the array for each ICAO and begin writing unit taskings
For Each chkString In iCAOArray
Set rng = ActiveWorkbook.Worksheets("Admin Data").Range("C5:C1000")
rng.Find(chkString).Select
conICAO = ActiveCell
startAddress = ActiveCell.Address
ActiveCell.Offset(0, -2).Select
conCallsign = ActiveCell
ActiveCell.Offset(0, 1).Select
conAC = ActiveCell
ActiveCell.Offset(0, 2).Select
conUnit = ActiveCell
ActiveCell.Offset(0, -1).Select
rng.FindNext(ActiveCell).Select
Print #1, ("SVCTASK/" amp; letterArray(arrayCheck) amp; "//")
Print #1, ("TASKUNIT/" amp; conUnit amp; "/ICAO:" amp; conICAO amp; "//")
arrayCheck = arrayCheck 1
While ActiveCell.Address <> startAddress
conICAOCurrent = ActiveCell
ActiveCell.Offset(0, -2).Select
conCallsignCurrent = ActiveCell
ActiveCell.Offset(0, 1).Select
conACCurrent = ActiveCell
ActiveCell.Offset(0, 2).Select
conUnitCurrent = ActiveCell
ActiveCell.Offset(0, -1).Select
'Moves to next unit tasking
If conUnitCurrent = conUnit Then
Print #1, ("Units are same")
Else
Print #1, ("SVCTASK/" amp; letterArray(arrayCheck) amp; "//")
Print #1, ("TASKUNIT/" amp; conUnitCurrent amp; "/ICAO:" amp; conICAO amp; "//")
arrayCheck = arrayCheck 1
conUnit = conUnitCurrent
End If
rng.FindNext(ActiveCell).Select
Wend
Next chkString
Комментарии:
1. В чем проблема с вашим кодом? Вы получаете сообщение об ошибке? Если да, то в чем ошибка и в какой строке? Если нет, то в чем собственно проблема? Также было бы полезно просмотреть ваш лист или образец листа
2. @Zac Мой код работает так, как написано, однако он не достигает желаемого конечного состояния. Я не могу понять, как форматировать в комментариях, поэтому смотрите Мой исходный пост для моего листа и желаемого результата.