Я пытался найти ответ на этот вопрос и ничего не нашел.
Я загружаю два рабочих листа в массивы - оба рабочих листа содержат один и тот же уникальный идентификатор, но остальные данные идентификатора могут быть разными - затем я проверяю уникальные идентификаторы друг против друга, и если они совпадают, то сначала сравниваю и обновляю листы, используя массив измерение для ссылки на строки рабочего листа.
Когда я пишу обратно на лист, в настоящее время я использую следующий код:
Range("A" & StRow).Value = copyArr(newLine, 1)
Range("B" & StRow).Value = copyArr(wipLine, 2)
Range("C" & StRow).Value = copyArr(wipLine, 6)
...
Range("AA" & StRow).Value = copyArr(wipLine, 50)
Данные в каждом массиве не находятся в одном и том же месте в каждом (т.е. столбец 10 массива1 может быть столбцом 43 массива2 и т. д.).
Есть ли более эффективный способ сделать это, который мне не хватает? Могу ли я записать массив обратно на другой лист, переместить его, чтобы столбцы выровнялись, а затем использовать его для записи по строке за раз? Является ли это проблемой, и я должен просто двигаться дальше?
Любой вклад приветствуется.

Я не могу публиковать данные, поэтому попытался включить пример: два массива, один и тот же уникальный идентификатор, связывающий их, но столбцы в другом порядке и могут иметь разные данные.
Ваш вопрос не ясен. Вы хотите просто скопировать массивы в столбцы, как говорит ваш заголовок? Вы хотите сравнить 2 столбца 2 разных массивов? Вы пытаетесь объединить эти массивы в один? Вы пытаетесь получить, какой идентификатор не является общим для обоих массивов? Или вам нужны только обычные?
Итак, каков будет желаемый результат для этого?
Извините, похоже, мой вопрос не так ясен, как я хотел. Я уже сравниваю столбцы/массивы в более раннем коде, но обратная запись на рабочие листы при выполнении условий означает, что мне нужно записывать каждую ячейку в строке отдельно из массива, поскольку порядок столбцов несопоставим между двумя массивами. Есть ли лучший способ написать обратно на листы, чем построчные инструкции, опубликованные в исходном вопросе?
На примере изображения верхняя таблица — массив1, нижняя таблица — массив2. При переборе массивов, если UniqueID совпадает, мне нужно записать данные из массива1 в лист в позиции столбцов в массиве 2, т.е. Ref1 в массиве1 — это столбец A, а в массиве2 — столбец B и т. д.
Вы можете использовать application.match, чтобы найти позицию столбца, которая будет действовать как номер столбца рабочей таблицы.
Что вы ожидаете на выходе? Замечу, что иногда ID/Ref/Value совпадают, а иногда отличаются. В лучшем примере было бы как минимум два уникальных идентификатора и пример вывода.
@SJR Спасибо, я посмотрю на application.match.
@RonRosenfeld ожидаемый результат - это данные сверху в соответствующие ссылки внизу, т. Е. Ref5 в нижней таблице должен быть «MNO».
Разве это не то же самое, что сортировать столбцы массива 1 в том же порядке, что и в массиве 2?



Поскольку исходные и целевые столбцы расположены в разном порядке, вам нужен какой-то способ сопоставления источника с целевым. Прямо сейчас вы выполняете сопоставление в коде, который записывает источник в пункт назначения. В результате вам потребуется строка кода для каждого сопоставления. Однако, если бы вы выполняли сопоставление в другой конструкции (например, в массиве), вы могли бы написать цикл для вывода. Вот пример:
Dim source As Variant
Dim dest As Variant
Dim x As Integer
source = Array(1, 2, 6, 50)
dest = Array("A", "B", "C", "AA")
For x = LBound(soruce) To UBound(source)
Range(dest(x) + StRow).Value = copyArr(wipLine, source(x))
Next
При первом прохождении цикла x будет равно 0, поэтому dest(x) будет равно "A", а source(x) будет равно 1. Поэтому:
Range(dest(x) + StRow).Value = copyArr(wipLine, source(x))
будет эквивалентно:
Range("A" & StRow).Value = copyArr(newLine, 1)
Во второй раз в цикле x будет равно 1, поэтому пункт назначения (x) будет равен «B», а источник (x) будет равен 2. Следовательно:
Range(dest(x) + StRow).Value = copyArr(wipLine, source(x))
будет эквивалентно:
Range("B" & StRow).Value = copyArr(newLine, 2)
Спасибо за это, я попробую этот метод. Я не думал об использовании большего количества массивов для сопоставления источника и назначения!
@ Тоби, рад быть полезным. Если это сработает, я буду признателен за голосование и отметку этого ответа как правильного.
Возможно, вы захотите опубликовать небольшой скриншот своих данных — я не думаю, что понимаю, о чем вы спрашиваете.