頁: [1]
|
 |
|
作者
|
主題: 如何比較資料?? (閱讀 489 次)
|
qazx
中學生
離線
文章: 14
|
各位先進們:
小弟有一問題想要請教大大們,即 使用下例當說明
當中心值相同則比較數列其offset1與offset2是否相同,如果不同則以哪個日期較大者當作當作標準 ,則秀出與標準有相同的中心值但其offset1 or offset2不同的 n1
例如下例: n1 :312,322,502 其中心值相同皆為0.647, 該三各n1中以322的日期最大,
故312/502的 offset1/offset2皆必須與322的offset1/offset2一樣,如果不同時則秀出
502
n1 offset1 offset2 日期 中心值
92 0.0004 0.0043 20080320 0.65 192 0.0004 0.0043 20080320 0.638 312 0.0000 0.0076 20080313 0.647 322 0.0000 0.0076 20080403 0.647 502 0.0000 0.0053 20080303 0.647
|
|
|
|
|
已記錄
|
|
|
|
oobird
凸槌的木工
論壇維護群
在線
文章: 4228
|
重新整理一下吧,有點不知所云。 最好把文件上傳,看得明白些!
|
|
|
|
|
已記錄
|
結廬待慧君;為使大家少猜題,請在附件中詳細說明 要求 和 效果,解決問題效率高。
|
|
|
|
hsieh
|
假設表格位於A:E Sub nn() Dim ds As Object, d As Object, A As Range Set ds = CreateObject("Scripting.Dictionary") Set d = CreateObject("Scripting.Dictionary") For Each A In Range([E2], [E65536].End(xlUp)) If ds(A.Value) = "" Then ds(A.Value) = Join(Array(A.Offset(, -4), A.Offset(, -3), A.Offset(, -2)), ",") Else If Val(Split(ds(A.Value), ",", -1)(1)) <> A.Offset(, -3) Or Val(Split(ds(A.Value), ",", -1)(2)) <> A.Offset(, -2) Then d(A.Offset(, -4)) = "" End If Next MsgBox Join(d.keys, Chr(10)) End Sub
|
|
|
|
|
已記錄
|
回答滿意嗎? 記得告訴我哦!!
|
|
|
qazx
中學生
離線
文章: 14
|
很感謝 大大們的回答,小弟的發問可能寫的不清楚,很抱歉小弟再寫一次我的問題,希望大大們可以幫忙 謝謝大大們
ID N1 offset1 offset2 date target 31.5 92 0.0004 0.0043 20080320 0.65 31.5 93 0.0038 0.0063 20080303 0.587 31.5 94 -0.0064 -0.0135 20080305 0.101 46 102 0.0004 0.0043 20080320 0.647 46 103 0.0013 0.008 20080320 0.584 47 112 0.0004 0.0043 20080303 0.647 47 113 0.0013 0.008 20080303 0.584 40 122 0.0004 0.0043 20080320 0.647 31.5 312 0.0014 0.0076 20080303 0.647 31.5 322 0.0015 0.0076 20080403 0.647 31.5 502 0.0012 0.0053 20080303 0.647
問題為 我要尋找當 target與ID相同的列,則比較兩者 offset1/offset2 是否相同,如果相同則報ok,當兩者offset部同時 ,則以date最大的offset值當標準,秀出與標準不同的N1
***例如 (須滿足 ID與target相同)條件下可得下列
ID N1 offset1 offset2 date target 31.5 312 0.0014 0.0076 20080303 0.647 31.5 322 0.0015 0.0176 20080403 0.647 31.5 502 0.0012 0.0053 20080303 0.647
後續又比較三者間日期大小,又以 ID為322的date最大,故以其為標準,當312 /502 的
offset1/offset2 與322的 offset1/offset2 不同時,則必須秀 "312/502 ;標準為 322 ",如三者其
offset1/offset2皆相同者則不報任何訊息
麻煩各位先進幫忙,小弟感激不盡
|
|
|
|
|
已記錄
|
|
|
|
oobird
凸槌的木工
論壇維護群
在線
文章: 4228
|
無法明白,你的範例只是取出target與ID相同的列, 沒作任何變動。
|
|
|
|
|
已記錄
|
結廬待慧君;為使大家少猜題,請在附件中詳細說明 要求 和 效果,解決問題效率高。
|
|
|
|
hsieh
|
Private Sub CommandButton1_Click() Dim c, ans, Arr(), ds As Object, ds1 As Object, ds2 As Object, i& Set ds = CreateObject("Scripting.Dictionary") Set ds1 = CreateObject("Scripting.Dictionary") Set ds2 = CreateObject("Scripting.Dictionary") Arr = Range("A1").CurrentRegion For i = 1 To UBound(Arr) If ds(Arr(i, 1) & "," & Arr(i, 6)) = "" Then ds(Arr(i, 1) & "," & Arr(i, 6)) = Arr(i, 5): ds1(Arr(i, 1) & "," & Arr(i, 6)) = Arr(i, 2) & "," & Arr(i, 3) & "," & Arr(i, 4) ElseIf ds(Arr(i, 1) & "," & Arr(i, 6)) < Arr(i, 5) Then ds(Arr(i, 1) & "," & Arr(i, 6)) = Arr(i, 5): ds1(Arr(i, 1) & "," & Arr(i, 6)) = Arr(i, 2) & "," & Arr(i, 3) & "," & Arr(i, 4) End If Next For i = 1 To UBound(Arr) If Arr(i, 5) <> ds(Arr(i, 1) & "," & Arr(i, 6)) Then ans = Split(ds1(Arr(i, 1) & "," & Arr(i, 6)), ",", -1) If ans(1) <> Arr(i, 3) Or ans(2) <> Arr(i, 4) Then If ds2(ans(0)) = "" Then ds2(ans(0)) = Arr(i, 2) Else ds2(ans(0)) = ds2(ans(0)) & "/" & Arr(i, 2) End If End If End If Next For Each c In ds2.keys MsgBox ds2(c) & ";標準為" & c Next End Sub
不知是否這樣
|
|
|
|
已記錄
|
回答滿意嗎? 記得告訴我哦!!
|
|
|
|
頁: [1]
|
|
|
|