iT邦幫忙

1

使用VBA將多工作表,欄位不為空白的資料複製到另一個工作表

  • 分享至 

  • xImage

各位前輩大家好,因為對程式完全一竅不通,本來想試著自己寫不行再上來發問
後來發現完全生不出一個字/images/emoticon/emoticon02.gif
想用錄製的 但好像也錄不出我人工判斷的效果,所以直接上來發問,還請見諒!

目標說明:我想製作一個多個工作表的訂購單,透過巨集的方式,自動將各工作表有下單的品項集中到另一個工作表中。

細節說明:

  1. 我的訂購單會有多個工作表,前面的幾個工作表都是不同產品的訂購單,以下圖為例有「上衣」、「褲子」、「洋裝」(實際會有更多)。
    https://ithelp.ithome.com.tw/upload/images/20230204/20135885NRt6HcMiUI.jpg
  2. 如上圖及下圖,訂購單填寫完每個工作表有下單的地方數量會有值
    https://ithelp.ithome.com.tw/upload/images/20230204/20135885R2IavMzKWc.jpg
  3. 當我要整理訂單的時候,我希望可以到巨集頁籤點下我寫好巨集的鈕
    https://ithelp.ithome.com.tw/upload/images/20230204/20135885p0nlb5vjSP.jpg
  4. Excel可以自動幫我把有數量的那B-E欄的資料表複製到「訂單整理」的工作表
    https://ithelp.ithome.com.tw/upload/images/20230204/201358855ctFSP7uP2.jpg
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
aaron3399
iT邦好手 1 級 ‧ 2023-02-04 17:13:26
最佳解答

看起來這個應該不用到VBA或巨集!? 似乎用公式就可以了

看更多先前的回應...收起先前的回應...
Pinky iT邦新手 5 級 ‧ 2023-02-04 17:22:39 檢舉

真的假的?!我也來研究看看!
方向上是框多個範圍用IF判斷後來複製貼上嗎?

aaron3399 iT邦好手 1 級 ‧ 2023-02-04 18:13:09 檢舉

ccenjor
公式版本的話要請教ccenjor大神了....

aaron3399 iT邦好手 1 級 ‧ 2023-02-04 20:32:17 檢舉

VBA版本如下
1.要在最右邊的統計訂單sheet中執行
2.因為使用迴圈抓sheet,所以左邊頁籤必須都是商品,巨集的頁籤請先移除

Sub order_list()

Range("A2:E999").Delete    '先清空資料

For i = 1 To Worksheets.Count - 1 '所有Sheets,扣除最右邊的

  Set s = Sheets(i) '依序指定工作表
  
  For j = 2 To s.Range("B1").End(xlDown).Row '依序檢查sheet中所有項目
  
     If s.Range("E" & j).Value <> "" Then    '如果項目有數量的話
        s.Range(j & ":" & j).Copy       '複製此項目
   
        x = ActiveSheet.UsedRange.Rows.Count + 1    '最後資料的下一列
        Range("A" & x).Select
        Range("A" & x).PasteSpecial '貼至目前sheet
     End If
  Next j
Next i

End Sub
Pinky iT邦新手 5 級 ‧ 2023-02-07 10:22:24 檢舉

剛剛使用成功!!!
感謝Aaron的作法,清楚又仔細的寫出每一條是在做什麼,
讓我自己還可以試著小改一下!!

也謝謝您,不只解答,還讓我這個菜鳥認識到這裡VBA大神跟公式大神 ^^

1
ccenjor
iT邦大師 9 級 ‧ 2023-02-04 21:02:55

VBA做法較好,我的做法僅供參考,太麻煩了:(工作表名稱若改變,公式也要跟著改)。
A2:
=IF(ROW()<=101,上衣!A2,IF(ROW()<=201,INDIRECT("褲子!R"&ROW()-100&"C"&COLUMN(),0),INDIRECT("洋裝!R"&ROW()-200&"C"&COLUMN(),0)))
向下複製公式到A2:E300。(預計一種商品約佔100列),每張工作表列數視資料量可以設大一點沒關係。
資料 > 篩選
點取E1下拉式按鈕,將0核取方塊空白,再按確定鈕。
https://ithelp.ithome.com.tw/upload/images/20230204/2010988133tf6e29y1.jpg
結果
https://ithelp.ithome.com.tw/upload/images/20230204/20109881dy3LE0nJm9.jpg
如果要只留E欄為的資料,可以每次都複製到新的一張工作表,選擇貼上值,將公式變數值。
按CTRL+F鍵
https://ithelp.ithome.com.tw/upload/images/20230204/20109881sI8pflqucm.jpg
點全部尋找鈕
按CTRL+A鍵
https://ithelp.ithome.com.tw/upload/images/20230204/20109881q9MDaKtYUo.jpg
點取「常用 > 刪除 >刪除工作表列」。
點關閉鈕,結果如下
https://ithelp.ithome.com.tw/upload/images/20230204/20109881QZHznOlmqc.jpg

Pinky iT邦新手 5 級 ‧ 2023-02-07 10:23:33 檢舉

天啊,原來公式可以這樣用!我之前有試過「INDIRECT」其實一直沒有成功!我下次也來試試看!!!!
謝謝前輩!!!!

我要發表回答

立即登入回答