Board logo

標題: 請問資料合併計算總和要如何寫? [打印本頁]

作者: zaq370    時間: 2011-9-1 15:29     標題: 請問資料合併計算總和要如何寫?

檔案如附檔

說明:
比如c檔案的總和欄位要去計算a和b檔案的資料中儲存格總數,但a檔案中的"d"和"e"資料直接與b檔案中的"f"資料一起計算成"f"資料的總和,這個巨集要如何寫?

[attach]7658[/attach]
作者: dechiuan999    時間: 2011-9-1 18:41

你好
請試試如下
Sub aa()

    '請先由工具設定Microsoft Scripting Rungtime
   
    Dim mSht As Worksheet
    Dim mDic As Scripting.Dictionary
    Dim mKey, mItem
    Dim mArr
    Dim mRng As Range, E As Range
    Dim s%, s1%
   
   
    Set mDic = CreateObject("scripting.dictionary")
    mArr = Array("a", "b")
   
    For i = 0 To 1
        With Workbooks.Open(ThisWorkbook.Path & "\" & mArr(i) & ".xlsx")
            With .Sheets(1)
                Set mRng = .Range("i2:i" & .[i65536].End(xlUp).Row)
            End With
               
                For Each E In mRng
                    If mDic.Exists(E.Value) = False Then
                        mDic(E.Value) = 1
                    Else
                        mDic(E.Value) = mDic(E.Value) + 1
                    End If
                    
                Next
               
                mKey = mDic.Keys
                mItem = mDic.Items
               
            .Close
        End With
    Next
   
    For i = 0 To mDic.Count - 1
        If mKey(i) = "d" Then
            s = mItem(i)
        End If
        
        If mKey(i) = "e" Then
            s1 = mItem(i)
        End If
        
    Next
      
    For i = 0 To mDic.Count - 1
        
        If mKey(i) = "f" Then
            mItem(i) = mItem(i) + s + s1
        End If
    Next
   
    'Set mRng = Range("b3:b" & [b65536].End(xlUp).Row)     '
    '
    'For Each E In mRng                     '版主大大是否可幫小弟解惑為何此語法無法正確取出dictionary的items值呢?
    '    E.Offset(, 1) = mDic(E.Value)      '此部份有問題
    'Next
   
    For i = 0 To mDic.Count - 1
        Set mRng = Columns("b").Find(mKey(i), lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlNext)
        If Not mRng Is Nothing Then
            mRng.Offset(, 1) = mItem(i)
        End If
        
    Next
        
End Sub
作者: GBKEE    時間: 2011-9-1 20:33

回復 1# zaq370
  1. Sub Ex() 'A,B兩檔已開啟
  2.     Dim A_Rng As Range, B_Rng As Range, C_Rng As Range, i As Integer
  3.     With Workbooks("A.XLSX").Sheets(1)
  4.         Set A_Rng = .Range("i2", .[i2].End(xlDown))
  5.     End With
  6.     With Workbooks("B.XLSX").Sheets(1)
  7.         Set B_Rng = .Range("i2", .[i2].End(xlDown))
  8.     End With
  9.     With Workbooks("C.XLSX").Sheets(1)
  10.         Set C_Rng = .Range("B3", .[B3].End(xlDown))
  11.     End With
  12.     C_Rng.Offset(, 1) = ""
  13.     For i = 1 To C_Rng.Count
  14.         If i < C_Rng.Count Then
  15.             C_Rng(i, 2) = Application.CountIf(A_Rng, C_Rng(i)) + Application.CountIf(B_Rng, C_Rng(i))
  16.         Else
  17.             C_Rng(i, 2) = A_Rng.Count + B_Rng.Count - Application.Sum(C_Rng.Offset(, 1))
  18.         End If
  19.     Next
  20.     Set A_Rng = Nothing
  21.     Set B_Rng = Nothing
  22.     Set C_Rng = Nothing
  23. End Sub
複製代碼

作者: zaq370    時間: 2011-9-2 11:52

回復 3# GBKEE


    感謝大大的幫忙,問題已解決了!!




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