返回列表 上一主題 發帖

[發問] 如何 取不同工作表的欄位值,帶入另一工作表做運算

[發問] 如何 取不同工作表的欄位值,帶入另一工作表做運算

ask.jpg
2016-3-10 23:54


如何 取不同工作表的欄位值,帶入另一工作表做運算


運作背景:
我有 甲乙工作表 和一個"統計工作表"
請問如何將 "甲工作表"  "乙工作表" 的特定欄位值

帶入  "統計工作表" 做運算使用

可以請大家幫我寫一個VBA
讓我按一下 它直接帶入
感謝大家的幫忙

小弟的檔案
Book1.rar (8.72 KB)
學習 學習 一直學習

回復 1# peter95


    參考看看附加檔

Book1.zip (23.3 KB)

人生不一定球球是好球,但是有歷練的強打者,隨時都可以揮棒。

TOP

回復 2# yifan2599

感謝大大的回覆
小弟很糗 因為我是小學生等級
無法下載附檔

可以請大大 貼源碼 嗎?

不好意思 麻煩你了
謝謝你的幫忙
學習 學習 一直學習

TOP

人生不一定球球是好球,但是有歷練的強打者,隨時都可以揮棒。

TOP

回復 1# peter95
  1. Sub 擷取()
  2.     Dim Rng As Range, aRng As Range, bRng As Range
  3.     With Sheets("統計")
  4.         .Range("B2:C" & .Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
  5.         For Each Rng In .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
  6.             Set aRng = Sheets("甲").Columns(1).Find(Rng.Value, LookIn:=xlFormulas, LookAt:=xlWhole, SearchDirection:=2)
  7.             Set bRng = Sheets("乙").Columns(1).Find(Rng.Value, LookIn:=xlFormulas, LookAt:=xlWhole, SearchDirection:=2)
  8.             If Not aRng Is Nothing Then Rng.Offset(, 1) = aRng.Offset(, 11)
  9.             If Not aRng Is Nothing Then Rng.Offset(, 2) = bRng.Offset(, 11)
  10.         Next
  11.     End With
  12. End Sub
複製代碼

TOP

回復 4# yifan2599

請問大大 以下的程式碼 的意思方便幫我寫註解嗎??
再次感謝你的幫忙
謝謝
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   s1 = Worksheets("甲").Cells(1, 1).End(xlDown).Row
    s2 = Worksheets("乙").Cells(1, 1).End(xlDown).Row
    s3 = Worksheets("統計").Cells(1, 1).End(xlDown).Row
    s3_1 = Worksheets("統計").Cells(10000, 8).End(xlUp).Row
    s3_2 = Worksheets("統計").Cells(10000, 9).End(xlUp).Row
   
   
    w = MsgBox("請問要從統計第一天起開始更新", vbYesNoCancel, "!!")
   
    If w = vbYes Then
        xx = 2
    ElseIf w = vbNo Then
        xx = Application.Max(s3_1, s3_2)
    ElseIf w = vbCancel Then
        b = MsgBox("取消更新!", vbOKOnly, "!!")
        Exit Sub
    End If
   
   
    For x3 = xx To s3
        up = Worksheets("統計").Cells(x3, 1)
   
        For x1 = 2 To s1
            If up = Worksheets("甲").Cells(x1, 1) Then
                q1 = x1
            End If
        Next x1
   
        For x2 = 2 To s2
            If up = Worksheets("乙").Cells(x2, 1) Then
                q2 = x2
            End If
        Next x2
        
        Worksheets("統計").Cells(x3, 2) = Worksheets("甲").Cells(q1, 12)
        Worksheets("統計").Cells(x3, 3) = Worksheets("乙").Cells(q2, 12)
    Next x3
   
   
    b = MsgBox("資料擷取完成!", vbOKOnly, "!!")

End Sub
學習 學習 一直學習

TOP

回復 6# peter95


   我發現 樓上的 那個方法 比較妙,還不賴..
人生不一定球球是好球,但是有歷練的強打者,隨時都可以揮棒。

TOP

回復 5# lpk187


Lpk187大大感謝你的回覆

請問方便幫我寫你的程式碼註解嗎

小弟感謝你的幫忙
學習 學習 一直學習

TOP

本帖最後由 lpk187 於 2016-3-12 18:29 編輯

回復 8# peter95

以下代碼請Copy到模組中,並按F8逐步執行,會更容易理解
  1. Sub 擷取()
  2.     '分別宣告變數為Range(儲存格)物件,Rng為"統計"工作表的A欄每次循環中所讀取的儲存格,
  3.     'aRng為"甲"工作表查尋後找到的儲存格,bRng為"乙"工作表查尋後找到的儲存格
  4.     'Range到底是什麼?請查看說明
  5.     Dim Rng As Range, aRng As Range, bRng As Range
  6.     With Sheets("統計") 'with 為簡化代碼用,以下的代碼中若有以"."為開始的代碼,其前面都會加上"Sheets("統計")"這串
  7.     '例如".Cells",其完整字句應該是 "Sheets("統計").Cells(...."
  8.         .Range("B2:C" & .Cells(Rows.Count, 1).End(xlUp).Row).ClearContents '清除內容(值)
  9.         '以從A2開始到最後一個位置為範圍(這裡查到的是A11),做迴圈讀到的儲存格為Rng,例如第一個讀的位址為A2,其值(Value)為"2月25日"
  10.         '然後以其值"2月25日"去做搜尋(.Find)"甲"工作表和"乙"工作表,並找到其儲存格,搜尋日期在這裡不能用值去找,這裡必須要用公式去找"LookIn:=xlFormulas"
  11.         '這裡的參數如何使用,請參考Visual Basic 的說明"Range.Find"
  12.         For Each Rng In .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
  13.             Set aRng = Sheets("甲").Columns(1).Find(Rng.Value, LookIn:=xlFormulas, LookAt:=xlWhole, SearchDirection:=2) '搜尋(.Find)"甲"工作表,並設定為aRng物件
  14.             Set bRng = Sheets("乙").Columns(1).Find(Rng.Value, LookIn:=xlFormulas, LookAt:=xlWhole, SearchDirection:=2) '搜尋(.Find)"乙"工作表,並設定為bRng物件
  15.             '若沒有查獲到 Rng 物件,則aRng或bRng會為Nothing,所以下面語句的解釋為如果aRng不是Nothing的話,
  16.             '以第一次循環的值為例,會在Rng.Offset(, 1)放入aRng.Offset(, 11)的值,也就是會在統計的B2放進甲的K2值,bRng亦同,會在C2放進乙的K2值,呼~~~
  17.             If Not aRng Is Nothing Then Rng.Offset(, 1) = aRng.Offset(, 11) '
  18.             If Not bRng Is Nothing Then Rng.Offset(, 2) = bRng.Offset(, 11)
  19.         Next
  20.     End With
  21. End Sub
複製代碼

TOP

回復 9# lpk187

Lpk187大大非常感謝你的回覆
小弟剛剛接觸vba的東西

有你們這些高手幫忙
小弟感激萬分
謝謝你

我自己先消化一下,謝謝
學習 學習 一直學習

TOP

        靜思自在 : 難行能行,難捨能捨,難為能為,才能昇華自我的人格。
返回列表 上一主題