Board logo

標題: DDE分時記錄如何用vba找出對應的號碼 [打印本頁]

作者: corcovado886    時間: 2015-11-7 11:54     標題: DDE分時記錄如何用vba找出對應的號碼

之前在Excel 一般區發問,已經可以在分時記錄的儲存格,找出最大小值的對應號碼
Z11=HLOOKUP(Y11,CHOOSE({1;2},OFFSET(A$10,ROW(A1),,,22),A$10:V$10),2,)

但在vba裡,只能找出1~22的排序
    Mx = Application.Max(Sht1.Range("a" & xRow & ":v" & xRow))
   Ans1 = Sht1.Range("a" & xRow & ":v" & xRow).Find(Mx, , , xlWhole).Address
   Sht1.Range("Y" & xRow).Value = Range(Ans1).Column
   Mi = Application.Min(Sht1.Range("a" & xRow & ":v" & xRow))
   Ans2 = Sht1.Range("a" & xRow & ":v" & xRow).Find(Mi, , , xlWhole).Address
   Sht1.Range("Z" & xRow).Value = Range(Ans2).Column

有沒有辦法用vba寫出對應的號碼呢?最好是顯示在固定的欄位裡,
請各位高手幫忙一下,感謝大家![attach]22369[/attach]
作者: 准提部林    時間: 2015-11-8 10:30

本帖最後由 准提部林 於 2015-11-8 10:38 編輯

Y11:
=IF(COUNT(A11:V11),INDEX(A$10:V$10,MATCH(MAX(A11:V11),A11:V11,)),"")

Z11:
=IF(COUNT(A11:V11),INDEX(A$10:V$10,MATCH(MIN(A11:V11),A11:V11,)),"")

VBA:錄製公式
With Sht1.Range("Y" & xRow)
  .FormulaR1C1 = "=IF(COUNT(RC[-24]:RC[-3]),INDEX(R10C[-24]:R10C[-3],MATCH(MAX(RC[-24]:RC[-3]),RC[-24]:RC[-3],)),"""")"
  .Value = .Value
End With
With Sht1.Range("Z" & xRow)
  .FormulaR1C1 = "=IF(COUNT(RC[-25]:RC[-4]),INDEX(R10C[-25]:R10C[-4],MATCH(MIN(RC[-25]:RC[-4]),RC[-25]:RC[-4],)),"""")"
  .Value = .Value
End With

或者:
With Sht1.Range("Y" & xRow)
  .Formula = Replace("=IF(COUNT(A11:V11),INDEX(A10:V10,MATCH(MAX(A11:V11),A11:V11,)),"""")", 11, xRow)
  .Value = .Value
End With
With Sht1.Range("Z" & xRow)
  .Formula = Replace("=IF(COUNT(A11:V11),INDEX(A10:V10,MATCH(MIN(A11:V11),A11:V11,)),"""")", 11, xRow)
  .Value = .Value
End With
作者: corcovado886    時間: 2015-11-8 12:07

回復 2# 准提部林

感謝大師的回答,後來我自己也找到方法了。
   Mx = Application.Max(Sht1.Range("a" & xRow & ":v" & xRow)) '每一列找出最大值
   Ans1 = Sht1.Range("a" & xRow & ":v" & xRow).Find(Mx, , , xlWhole).Column '每一列找出最大值的儲存格是在第幾欄
   Sht1.Range("Y" & xRow).Value = Range("A10:V10").Cells(Ans1) 'Y欄位往下記錄最大值所對應的號碼
   
   Mi = Application.Min(Sht1.Range("a" & xRow & ":v" & xRow))
   Ans2 = Sht1.Range("a" & xRow & ":v" & xRow).Find(Mi, , , xlWhole).Column
   Sht1.Range("Z" & xRow).Value = Range("A10:V10").Cells(Ans2)

如果分時記錄資料,先計算前五列的價差,再找出最大、最小值,不知道要怎麼修改?
需要用到陣列運算嗎? 真不好意思,問題有點多,這應該是最後一個問題了,再次感謝!
[attach]22373[/attach][attach]22373[/attach]
作者: 准提部林    時間: 2015-11-8 12:44

AA11:
=IF(AND(COUNT(A11:V11),ROW(A1)>5),LOOKUP(1,0/((A11:V11-A6:V6)=MAX(A11:V11-A6:V6)),A$10:V$10),"")

AB11:
=IF(AND(COUNT(A11:V11),ROW(A1)>5),LOOKUP(1,0/((A11:V11-A6:V6)=MIN(A11:V11-A6:V6)),A$10:V$10),"")
作者: corcovado886    時間: 2015-11-11 21:50

回復 4# 准提部林
感謝淮大這麼快就回覆,這幾天極力想自行處理一些問題,但真的有點無助。
其實也不是新問題,因為DDE資料常常沒有成交量,使得儲存格產生 #N/A的情況。

查了網路資料,應該可以用 IFNA(...或 IF(ISNA...來解決,
不過 LOOKUP(1,0/((A11:V11-A6:V6)=MAX(A11:V11-A6:V6)) 這個公式實在太深奧了,
嘗試了很多位置,插入IFNA 都無法成功,不知道有沒有解決的辦法?
作者: 准提部林    時間: 2015-11-12 16:51

回復 5# corcovado886


If Second(Time) Mod 3 = 0 Then
  If Application.Count(Sht1.[A2:V2]) = 22 Then
     '~自動記錄程式~
  End If
End If

DDE公式有錯誤, 就不能進行記錄~~




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