Попытка объединить столбцы в Excel - PullRequest
0 голосов
/ 12 сентября 2011

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

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

В настоящее время у меня есть таблица с шестью листами.Рабочие листы 2-6 содержат данные о товарах, которые были проданы из разных источников.Рабочий лист 1 в настоящее время содержит четыре столбца, которые заполняют данные элемента с помощью макроса, который я собрал в четыре отдельных столбца.Рабочий лист 2 содержит столбец «itemlist», в который я хочу скопировать данные из каждого из четырех столбцов рабочего листа 2.

Надеюсь, это имеет смысл.На данный момент код, который у меня есть ниже:

Sub UpdateList()
  'Clear the current ranges
  Range("PharmacyItems").Clear
  Range("PrelabelItems").Clear
  Range("RestockItems").Clear
  Range("TakehomeItems").Clear
  Range("FullItemList").Clear

  'Populate control with unique list
  Range("PharmacyFullList").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("PharmacyItems"), Unique:=True
  Range("PrelabelFullList").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("PrelabelItems"), Unique:=True
  Range("RestockFullList").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("RestockItems"), Unique:=True
  Range("TakehomeFullList").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("TakehomeItems"), Unique:=True

  'Combine the four ranges into one
  Range("UniqueLists!$A:$A, UniqueLists!$B:$B, UniqueLists!$C:$C, UniqueLists!$D:$D").Copy Sheets("Drug totals").Range("A2")
  'Sort the data
  Range("FullItemList").Sort Key1:=Range("FullItemList").Columns(1), Order1:=xlAscending, Orientation:=xlSortColumns, Header:=xlYes, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption2:=xlSortNormal
End Sub

Чтобы пояснить вышесказанное, вот определение того, какой диапазон какой:

PharmacyItems, PrelabelItems, RestockItems и TakehomeItems: это отдельные списки, которые содержат уникальные элементы, скопированные из каждого листа данных.FullList: полный список из вышеперечисленных четырех - это списки исходных данных, которые не являются уникальными спискамикаждый столбец, а не использование именованного диапазона, заключается в том, что я пытался выяснить, не улучшит ли это ситуацию, поскольку изначально оно давало мне расплывчатую и пушистую ошибку, связанную с диапазоном.С столбцами, определенными в диапазоне, он говорит мне, что размер / форма пункта назначения не соответствует источнику.

Точная ошибка: Ошибка времени выполнения '1004': информация не может быть вставлена, потому чтоОбласть копирования и область вставки не совпадают по размеру и форме.Попробуйте выполнить одно из следующих действий: - щелкните одну ячейку, а затем вставьте - выберите прямоугольник того же размера и формы, а затем вставьте

Кто-нибудь может мне помочь?К сожалению, я девушка SQL Server, я бы предпочел получать данные из базы данных, но мне не разрешено!

Заранее спасибо

Лето

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011

Нельзя вставить весь столбец в диапазон, начинающийся со строки 2 (или любой другой строки, кроме 1), потому что тогда последние строки столбца не поместятся на листе. Вот почему Excel говорит: «Область копирования и вставки имеют разный размер».

Вместо

Range("UniqueLists!$A:$A, UniqueLists!$B:$B, UniqueLists!$C:$C, UniqueLists!$D:$D").Copy Sheets("Drug totals").Range("A2")

попробуйте вставить его, начиная с первого ряда.

Range("UniqueLists!A:D").Copy Sheets("Drug totals").Range("A1")

Но я предполагаю, что у вас нет данных вплоть до самого низа вашего листа "UniqueLists"? Если так, то почему вы копируете весь столбец? Просто скопируйте ту часть, которая вам нужна. Тогда вы сможете вставить, начиная с ячейки "A2". Пример:

Range("UniqueLists!A1:D1234").Copy Sheets("Drug totals").Range("A2")
0 голосов
/ 12 сентября 2011

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

Sub UpdateList()

   Range("FullItemList").Clear  'Clear the full item list range

   'Populate control with unique list
   UniquesToFullItemList Range("PharmacyFullList")
   UniquesToFullItemList Range("PrelabelFullList")
   UniquesToFullItemList Range("RestockFullList")
   UniquesToFullItemList Range("TakehomeFullList")

   'Sort the data
   Range("FullItemList").Sort Key1:=Range("FullItemList").Columns(1), _
      Order1:=xlAscending, Orientation:=xlSortColumns, Header:=xlYes, _
      SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, _
      DataOption2:=xlSortNormal

End Sub

Sub UniquesToFullItemList(rngFrom As Range)
   rngFrom.AdvancedFilter Action:=xlFilterCopy, _
     CopyToRange:=Sheets("Drug totals").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0), _
             Unique:=True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...