標題:
[發問]
詢問兩筆以上資料如何取交集合併新增(以解決)
[打印本頁]
作者:
ivan731129
時間:
2011-3-1 17:18
標題:
詢問兩筆以上資料如何取交集合併新增(以解決)
本帖最後由 ivan731129 於 2011-3-2 10:27 編輯
請問各位前輩關於想要合併兩個以上的檔案 或是 同一檔案下不同頁面的交集 該如何去寫巨集呢?
檔案格式如下,想知道要以某項目為對應參造的寫法,因為翻了前面的問題沒找到比較合用來修改的。
想請前輩們幫忙。
>>縣市別-序號-學校編號-學校名-類別-電話-地址-教學用途-通過日期-申請到期日期-人數<<
[attach]4891[/attach]
PS.檔案重複的部份可能僅有名稱,用途的項目會不同,因此交集結果是學校在各檔案都有出現的才會挑出到新頁面新增
在測試中就是要三個頁面檔裡都有出現的苗栗的學校有交集輸出到新頁面
上一個檔案似乎用到較新的版本,另外付03版的
[attach]4892[/attach]
作者:
GBKEE
時間:
2011-3-1 17:39
回復
1#
ivan731129
請附範例檔案 上來
作者:
ivan731129
時間:
2011-3-2 09:37
本帖最後由 ivan731129 於 2011-3-2 09:42 編輯
感謝GBKEE 大快速的回答,不過測試時發現他執行為有交集就輸出
但是我必須要多個檔案內都有才輸出的話要如何修改。
就是當有三檔的話,苗栗地區要是有兩個學校 一個出現在兩檔中、一個出現在三檔中
那我只要輸出三個都有出現那所的話要如何修改呢?
作者:
GBKEE
時間:
2011-3-2 09:54
回復
3#
ivan731129
03版
Sub Ex()
Dim D(1 To 2) As Object, R, SH As Worksheet, T As String, I As Integer, AR(), A
Dim ShCount As Integer
Set D(1) = CreateObject("SCRIPTING.DICTIONARY")
Set D(2) = CreateObject("SCRIPTING.DICTIONARY")
With Sheets("集合檔")
.Cells.Clear
For Each SH In Sheets
If SH.Name = "集合檔" Then Exit For
ShCount = ShCount + 1
For Each R In SH.Range("A1").CurrentRegion.Rows
T = R.Cells(1) & "," & Join(Application.Transpose(Application.Transpose(R.Cells(1, 1).Resize(1, 8))), ",")
If D(1).Exists((T)) = False Then
D(1)(T) = Array(False, 1)
D(2)(T) = Array(Join(Application.Transpose(Application.Transpose(R)), ","))
Else
D(1)(T) = Array(True, D(1)(T)(1) + 1)
If R.Row <> 1 Then
AR = D(2)(T)
ReDim Preserve AR(UBound(AR) + 1)
AR(UBound(AR)) = Join(Application.Transpose(Application.Transpose(R)), ",")
D(2)(T) = AR
End If
End If
Next
Next
For Each R In D(1).KEYS
If D(1)(R)(0) = True And D(1)(R)(1) = ShCount Then 'D(1)(R)(1) = ShCount 每個資料庫都出現
For Each A In D(2)(R)
I = I + 1
.Cells(I, 1).Resize(1, UBound(Split(A, ",")) + 1) = Split(A, ",")
Next
End If
Next
End With
End Sub
複製代碼
作者:
Hsieh
時間:
2011-3-2 10:05
回復
3#
ivan731129
Sub Ex()
Dim Sh As Worksheet, A As Range, k%, r&, Mystr$
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
For Each Sh In Sheets
With Sh
If .Name <> "集合檔" Then
k = k + 1
For Each A In .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
Mystr = Join(Application.Transpose(Application.Transpose(A.Resize(, 11))), ",")
If IsEmpty(d(A.Value)) Then '沒有的項目就加入
d(A.Value) = d(A.Value) + 1 '計算次數
d1(A.Value) = Mystr '紀錄內容
ElseIf d1(A.Value) = Mystr Then '相同時計算次數
d(A.Value) = d(A.Value) + 1 '計算次數
ElseIf d1(A.Value) <> Mystr Or d(A.Value) <> k Then '有不同或是與工作表數量不同
d1.Remove A.Value '移除項目
End If
Next
End If
End With
Next
With Sheets("集合檔")
.Cells = ""
For Each ky In d1.keys
r = r + 1
.Cells(r, 1).Resize(, 11) = Split(d1(ky), ",") '寫入集合檔
Next
End With
End Sub
複製代碼
作者:
ivan731129
時間:
2011-3-2 10:14
本帖最後由 ivan731129 於 2011-3-2 10:22 編輯
測試ok了,不過Hsieh大的巨集不知是對應哪項目會變成單筆資料 。
但是太感謝兩位板主的熱心指導,
我要好好研究一下寫法了。
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)