Board logo

標題: 多資料匯整成在同data中 [打印本頁]

作者: hugh0620    時間: 2010-12-2 15:14     標題: 多資料匯整成在同data中

DEAR 大大們

      小弟又來請教了, 問題是需要將多活頁的資料,匯到同一個data中,如附件概述
      1.  附件中sheet A B兩個資料總合在DATA中   (我的方式是一筆一筆貼,在少筆數的處理上還OK, 但我的筆數為 列大於10000  欄約 15 - 25 )
                                                                           有沒有比較好的寫法
      2. 在匯入時需要將SHEET A B 欄頭的月份與DATA欄頭月份需要一樣才能匯入  (小弟還未撰寫 ,但是會用IF的放式做判別後,相同才執行匯入動作)
           [attach]3884[/attach]
作者: oobird    時間: 2010-12-2 16:06

看不出來月份是哪一欄,如何比對。
你目前是全部匯入。全部匯入不要循環!
  1. Private Sub CommandButton1_Click()  '匯整
  2. With Sheets("A")
  3. a = .Range(.[d7], .[w65536].End(3))
  4. With Sheets("B")
  5. b = .Range(.[d7], .[w65536].End(3))
  6. End With
  7. End With
  8. With Sheets("DATA")
  9. .[d7].Resize(UBound(a), UBound(a, 2)) = a
  10. .[d65536].End(3)(2, 1).Resize(UBound(b), UBound(b, 2)) = b
  11. End With
  12. End Sub
複製代碼

作者: hugh0620    時間: 2010-12-2 17:15

本帖最後由 hugh0620 於 2010-12-2 17:30 編輯

回復 2# oobird


    大大 L6到W6是日期的資料 (201001-201012)

         另外在程式碼的部份~ 有不了解的大地方
      [d65536].End(3)(2, 1).Resize(UBound(a), UBound(a, 2)) = a  程式碼中的
      1.  End(3)(2, 1) 是什麼意思?  (end內的常數意思為何??)  (因為有看過大大們在使用,但是自己就是無法徹底了解,也就不會使用)
         2.  Resize 的使用方法 ?        (有查過資料說明在"移動表格或調整表格大小"  ,感覺就很奇怪)
         3.  另外一個offset的用法     (我看了大部份程式碼大部份用在資料最旁邊下一格是空格,將資料填寫進去)
         4.  在大大撰寫中並會寫copy或past等指令 , 就可把資料貼至到另一個data中 (不甚明白)

        以上,希望大大能解惑, 讓小弟能看的懂大大們在寫些什麼
作者: GBKEE    時間: 2010-12-2 19:41

回復 3# hugh0620
程式複製後 請選擇一空白的工作  執行看看
其他函數請多看說明多操作 應會運用自如
Sub Ex()
    MsgBox ActiveSheet.Range("C100").End(1)(2, 1).Address '
    MsgBox ActiveSheet.Range("C100").End(xlToLeft).Cells(2, 1).Address '
   
    MsgBox ActiveSheet.Range("C100").End(2)(2, 1).Address '
    MsgBox ActiveSheet.Range("C100").End(xlToRight).Cells(2, 1).Address '
   
    MsgBox ActiveSheet.Range("C100").End(3)(2, 1).Address '
    MsgBox ActiveSheet.Range("C100").End(xlUp).Cells(2, 1).Address '
   
    MsgBox ActiveSheet.Range("C100").End(4).Address
    MsgBox ActiveSheet.Range("C100").End(xlDown).Address '
'ActiveSheet.Range("C100").End(xlDown) 已到檔案底端 如指明-> 下一列位 .Cells(2, 1) 會產生錯誤
    MsgBox ActiveSheet.Range("C100").End(4)(2, 1).Address                     '<-產生錯誤
    MsgBox ActiveSheet.Range("C100").End(xlDown).Cells(2, 1).Address    '<-產生錯誤
   
End Sub
作者: GBKEE    時間: 2010-12-2 20:06

本帖最後由 GBKEE 於 2010-12-2 20:07 編輯
1.  附件中sheet A B兩個資料總合在DATA中  hugh0620 發表於 2010-12-2 15:14
  1. Sub Ex()  '匯整
  2.     Dim S As Worksheet
  3.     For Each S In Sheets(Array("A", "B"))
  4.         S.Range("D6").CurrentRegion.Offset(1).Copy Sheets("DATA").Range("D" & Rows.Count).End(xlUp).Cells(2)
  5.     Next
  6. End Sub
複製代碼

作者: Hsieh    時間: 2010-12-2 22:44

表格位置若都相同,使用共用參照
=OFFSET(!$A$2,,,COUNTA(!$A$1:$A$65536)-1,20)
可使多表使用同一名稱,巨集也可只使用同一巨集
作者: hugh0620    時間: 2010-12-3 11:16

回復 4# GBKEE


    謝謝大大詳細的程式碼說明~ 小弟已經能夠對END的用法清楚了解~
作者: hugh0620    時間: 2010-12-3 11:33

回復 5# GBKEE


Dear 大大
    您寫的方式, 想請你幫忙指較我所理解的對不對
   
   1. Dim S As Worksheet     將S指為工作頁的變數
     2. For Each S In Sheets(Array("A", "B"))  ~  Next        使用陣列將中每一個SHEET 資料放在S這個SHEET
                                                                                         問題1:大大的Next 為什麼沒有加S 是因為陣列的原因嘛???
    3. S.Range("D6").CurrentRegion.Offset(1).Copy          問題2. CurrentRegion 與 Offset 是什麼意思???
    4. Sheets("DATA").Range("D" & Rows.Count).End(xlUp).Cells(2)
                         問題3.   Rows.Count 的意思???
作者: oobird    時間: 2010-12-3 14:18

問題1:大大的Next 為什麼沒有加S
不一定要加S,程式自己會知道Next什麼,以前有人認為加上去程式才不會搞錯,怎麼可能搞錯。實際測試多層循環時,不加跑得比加上的更順暢。

問題2. CurrentRegion 與 Offset 是什麼意思???
CurrentRegion是一個連續資料的範圍,如你的a1:g100有資料,那麼[a1].CurrentRegion就是[a1:g100]
Offset是位移,CurrentRegion.Offset(1)就是把這個範圍向下位移一列,通常為了避開標題列。
Rows.Count 顧名思意當然是指列的總數,通常直接用65536。
作者: GBKEE    時間: 2010-12-4 08:40

Rows.Count 顧名思意當然是指列的總數,通常直接用65536oobird 發表於 2010-12-3 14:18

我的Excle版本是2003版 Rows.Count=65536 ,2007版 ??, 2010版 ??
每當程式碼如有計算到檔案最底端列的數值,我習慣用Rows.Count,可通用所有版本避免錯誤產生.
作者: oobird    時間: 2010-12-4 08:53

喔,我當然知道你的用意,你是辦事情相當嚴謹牢靠的人,所以懂得自我要求到最完美。
我則隨便慣了,也常凸槌!
作者: Hsieh    時間: 2010-12-4 11:55

回復 10# oobird

其實定義有定義的好處,就算多表,只要各表資料起始位置確定一樣
那麼只要一個定義,然後使用同一個程序就能達到各表資料複製
只差一個就是必須Sheet需要Select
當然各有所長,端看使用者的需求
作者: oobird    時間: 2010-12-4 17:11

我沒說定義名稱不好哇,尤其定義一個名稱可供多表使用絕對是最佳方式。
我還是刪了較好。
作者: Hsieh    時間: 2010-12-4 18:13

回復 13# oobird
我不是說哪個方式好啦,其實任何問題最重要在於使用者
使用者會用的方式,只要能解決問題就是好方法
程序用快速鍵驅動
可檢閱工作表資料無誤再執行(有時半自動也會有好處)
附件中
複製資料用Ctrl+p
刪除資料用Ctrl+d
[attach]3935[/attach]




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)