Как объединить или добавить строки на основе условия IF при сохранении порядка строк столбцов - PullRequest
0 голосов
/ 27 марта 2019

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

Данные являются сложными и запутанными, но, по сути, проблему, которую я не могу решить, можно для простоты искусственно сократить до следующего:

[править: желтый автобус останавливается на следующих кодах остановки в указанном порядке. Синий автобус останавливается на следующих кодах остановки в указанном порядке. Порядок остановки автобусов изменить нельзя. Выходными данными является один список, включающий все коды остановки только один раз, сохраняя порядок, присутствующий в обоих списках.]

two columns with some common entries

Я хочу изменить это на следующее:

enter image description here

Цветовое кодирование просто для того, чтобы дать понять читателям здесь. Зеленый цвет показывает, где дубликаты были уменьшены до одного (это позволит мне просмотреть данные по коду и ввести данные с обоих листов в одну строку.

Порядок, в котором находятся коды, должен поддерживаться, поэтому я думаю, что мне просто нужно переместить все данные вниз.

Итак, это (концептуально) то, что я пытался сделать на первом этапе.

enter image description here

Каждая строка сохраняет порядок данных, но распределена по достаточному количеству строк, чтобы иметь достаточно места для обоих столбцов в одном. Дубликаты занимают позицию той, которая имеет больший номер строки.

Остальное решение следует процедурно. Затем я могу удалить дубликаты кодов и создать новый список со всеми значениями, а затем удалить пробелы.

Так что, если я смогу туда добраться, я должен быть в порядке.

Поэтому, насколько я могу судить, мне нужно сопоставить две формулы:

    =MATCH(A1,$B$1:$B$11,0)
=MATCH(B1,$A$1:$A$11,0)

но я не уверен, действительно ли это направление. Это дает мне номера строк, на которых встречаются общие записи, но я не уверен, как воссоздать необходимые позиции. Возможно, мне нужно создать эти фиктивные столбцы, а затем подсчитать необходимое количество строк, но как это сделать между ошибками? Или динамическое смещение. Но не уверен, как это сделать. Мне очень трудно обернуть вокруг него голову.

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

Большое спасибо заранее за любые указатели / решения. Я попытался уменьшить проблему и сделать ее как можно более понятной. Если кто-то может увидеть решение, а также увидеть, где мне нужно сосредоточить свое обучение, будет также полезен совет по конкретной области обучения. ура D

1 Ответ

0 голосов
/ 29 марта 2019

Я думаю, что вашу проблему легче решить с помощью VBAПредположим, вы работаете в столбцах A и B (имеется в виду 1-й и 2-й столбцы).В вашем примере у вас есть два столбца и 11 строк, и, поскольку вы хотите обрабатывать данные построчно, строка - это внешний цикл, а столбец - это внутренний цикл:

Sub Indexing()
Dim irow, icol, count As Integer
Dim lookIn, FoundRange As Range
count = 1
For irow = 1 To 11:
    For icol = 1 To 2:
            Cells(irow, icol).Select
            Selection.Copy
            Set lookIn = Range("F1:F" & count)
            Set FoundRange = lookIn.Find(what:=Cells(irow, icol).Value, lookIn:=xlFormulas, lookat:=xlWhole)
            If FoundRange Is Nothing Then
                Range("F" & count).Select
                ActiveSheet.Paste
                count = count + 1
            End If
    Next icol
Next irow

End Sub

Это приводит к следующемурезультат, вывод в столбце F:

enter image description here

Обратите внимание, что порядок немного отличается от вашего, но в некотором роде имеет больше смысла.В вашем примере результата у вас 113 перед 68, хотя первое число в строке № 4 - 68. Существуют и другие отличия, поэтому, возможно, я неправильно понял требуемый порядок.

Этот код можно адаптировать следующим образом:

  • Если у вас есть больше столбцов, просто замените 2 в цикле icol на любое количество столбцов.
  • Если у вас есть больше строк, просто замените 11 вцикл irow на любое количество строк, которое вы хотите.
  • Если вы хотите, чтобы это было записано в другом столбце (не в столбце F, как сейчас), просто замените букву F на нужную букву столбца.

Если вы не знакомы с макросами и вам нужна помощь в настройке, сообщите мне.

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