2011-09-12 141 views
0

我很欣賞那裏有很多類似的問題,但我一直在搜索各種論壇三天現在還沒有找到任何我需要的東西 - 所以要麼我在做非常奇怪的事情或我的搜索技能不達標!試圖合併列在Excel中的列

我真的很感激,如果有人能讓我知道我哪裏出錯了,或者甚至可以將我聯繫到一個可能有幫助的解決方案,因爲我沒有找到一個解決方案。

我目前有一個包含六個工作表的電子表格。工作表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:上述四個的fulllist是源數據列出了哪些不是唯一列表 FullItemList:列進我希望所有從唯一列表中的數據,以最終

我之所以有其指定的範圍內每列而不是使用命名範圍是,我試圖看看這是否會使它更好,因爲它只是給我一個模糊和蓬鬆的範圍問題的錯誤。使用該範圍中定義的列,它會告訴我目標的大小/形狀與源不匹配。

確切的錯誤是: 運行時錯誤'1004': 信息無法粘貼,因爲複製區域和粘貼區域的大小和形狀不一樣。請嘗試以下之一: - 單擊一個單元格,然後粘貼 - 選擇一個矩形,這是相同的大小和形狀,然後粘貼

誰能幫助我?可悲的是我是一個SQL Server的女孩,我寧願從數據庫中提取數據,但我不允許這個數據庫!

預先感謝您

夏季

+0

澄清 - 您想通過將四個「唯一」列表複製到一個列中來合併? –

+0

您是否需要四個唯一列表,或者您是否可以將值從xxxFullList直接複製到DrugTotals表單中? –

+0

我需要四個唯一的列表,因爲他們正在用於其他事情。您添加了未經測試的代碼的帖子非常棒,謝謝! – Elatesummer

回答

0

如果您不需要單獨的唯一名單,但只是想創建所有的唯一值的單列那麼這應該爲你工作(雖然未經測試...)

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 
+0

啊,謝謝你,改變了一些與我的情況相關的位,並像魅力一樣工作! – Elatesummer

4

不能粘貼到一個範圍內的整列開始第2行(或任何其他行比1),因爲那時的最後一行(S)列不適合表格。這就是爲什麼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

謝謝 - 我沒有設置列的長度的原因是它會改變,因爲我將數據從其他工作表拖到這些列中。這些是按月使用的,因此長度將根據銷售的藥物類型而變化。 我已經修改了代碼,因爲您建議,但我仍然得到完全相同的問題關於我認爲的大小/形狀,因爲我複製了四列的範圍,並試圖將其粘貼到一列。由於char限制,我無法在這裏完整修改代碼 - 但是感謝您的修改,這是比我的簡單的代碼! – Elatesummer

+0

不客氣。我在發佈之前測試了代碼。把你修改後的代碼作爲編輯你的問題,並指出你在哪一行發生錯誤。此外,如果您找到有用的答案,請記住點擊左側的複選標記以接受答案。 –