返回列表 上一主題 發帖

[發問] 公式轉化為程式語法。

[發問] 公式轉化為程式語法。

本帖最後由 papaya 於 2017-11-19 19:34 編輯
  1. Private Sub CommandButton1_Click()
  2. '[A2] = "=Max(D:D)"
  3. '[A2] = [A2].Value
  4. [A2] = Application.Max(Range("D:D"))
  5.   [B1] = [I2]
  6.   [B2] = [D2]
  7.   [C2] = "=INDEX(D:D,MATCH(A2,I:I,))"
  8.   [C2] = [C2].Value
  9.   [C1] = "=SUMIF(OFFSET($I$1,C2-B2+1,1,,4),A1,OFFSET($D$1,C2-B2+1,1,,4))"
  10.   [C1] = [C1].Value

  11. End Sub
複製代碼
A1=人工填入

EX︰
'[A2] = "=Max(D:D)"
'[A2] = [A2].Value
可轉化為
[A2] = Application.Max(Range("D:D"))

請問︰
[C2]和[C1]要如何轉化?

PS:Sheet2和Sheet3只作輔助說明用;完成後就移除。

先感謝各位大大的熱心協助。
12生肖-VBA-Q.rar (10.03 KB)

回復 18# GBKEE

多試試看指定物件變數,可減少vba編寫的錯誤


GBKEE 超級版主:您好!
您的標準範例,小弟會仔細研讀~感恩

謝謝您一再的溫馨叮嚀
剛剛已有上網訂了1本~跟我學Excel VBA
希望有所幫助

TOP

本帖最後由 GBKEE 於 2017-11-24 08:44 編輯

回復 16# papaya

多試試看指定物件變數,可減少vba編寫的錯誤
  1. Option Explicit
  2. Private Sub CommandButton1_Click()
  3.     Dim Rng As Range, M As Variant
  4.     Dim Sh As Worksheet
  5.     Set Sh = Sheets("sheet1")
  6.     Set Rng = Sh.Range("DK7:DM" & Sh.[DM65536].End(xlUp).Row)
  7.         With Rng
  8.             .Interior.ColorIndex = -4142
  9.             M = Application.Match(Sh.Range("DK4"), .Columns(1), 0)
  10.             If IsNumeric(M) Then    '有找到
  11.                 .Cells(M, 1).Resize(1, 3).Interior.ColorIndex = 8
  12.             End If
  13.         End With
  14.     'Range("DK7:DM" & [DM65536].End(xlUp).Row).Interior.ColorIndex = -4142
  15.     'Range("DK" & Application.Match(Range("DK4"), Range("DK7:DK" & Sheets("Sheet1").[DK65536].End(xlUp).Row), 0) + 6).Resize(1, 3).Interior.ColorIndex = 8

  16. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 papaya 於 2017-11-24 07:56 編輯

回復 14# joblyc017

J大:
除了一個字一個字重新敲鍵(真的不能接受必須這樣做),實在不知如何複製貴解答程式碼~
所以未能測試貴解答檔的結果~尚請見諒!
再次感謝您的不吝指導^^

TOP

本帖最後由 papaya 於 2017-11-24 07:41 編輯

回復 12# GBKEE
TEST-2A.png
2017-11-24 07:37


"不懂的VBA程式碼,可將不懂的函數,方法,在VBA說明上查看如 Application,或 Rows"

GBKEE 超級版主:您好!
感謝您的提醒~重新再查閱一次;雖然沒有馬上領會,但經過一再套例子測試,終於懂得如何運用^^
程式碼非常短即可
  1. Private Sub CommandButton1_Click()
  2. Range("DK7:DM" & [DM65536].End(xlUp).Row).Interior.ColorIndex = -4142
  3. Range("DK" & Application.Match(Range("DK4"), Range("DK7:DK" & Sheets("Sheet1").[DK65536].End(xlUp).Row), 0) + 6).Resize(1, 3).Interior.ColorIndex = 8

  4. End Sub
複製代碼
TEST-2A.rar (13.51 KB)

TOP

回復 14# joblyc017
J大:您好!
感謝您撥冗再次指導。

可否麻煩您將程式罵另外貼上。
圖檔無法複製。
謝謝您^^

TOP

本帖最後由 joblyc017 於 2017-11-23 10:05 編輯

回復 11# papaya

test2.gif
2017-11-23 10:05
*YC的筆記鋪 - Excel、Word教學
http://lyc017.pixnet.net/blog

TOP

本帖最後由 papaya 於 2017-11-23 09:59 編輯

回復 12# GBKEE

超級版主:您好!
感謝您撥冗解答。
貴解答,小弟會細心仔細的研究~感恩^^

小弟才剛學VBA,連宣告變數定義都還沒有搞懂,但又必須要馬上用;
雖然早就有看微軟的相關函數使用在VBA的說明,但總覺得艱澀難懂;
又想到一直上論壇麻煩人,也不是辦法,所以儘量先上網找相近的程式語法套用。
日前看到可以利用Application將公式轉為語法,也不用再選擇貼上值,因此就一直測試各函數中,
有哪些函數能利用Application轉化? 並上網求教正確的寫法。

很巧~剛剛瀏覽到一篇連陣列公式都可以不用選擇貼上值的文章︰
http://forum.twbts.com/viewthread.php?tid=2122&extra=&page=1
5#
因為該題的提問者和回答者都已許久未登錄論壇,所以正好藉此請教您︰敬請撥冗惠予賜教~
不知是否能以~
X = ["DK"&MATCH($DK$4,INDIRECT("DK7:DK"&COUNT(DK:DK)+3),)+6]
Range(X).Resize(1, 3).Interior.ColorIndex = 8
(以上只是舉例)
之類似程式碼來完成需求?
如果可以,請指導正確的寫法;
如果不型~亦敬請告知。
謝謝您^^

TOP

回復 11# papaya
參考看看,
不懂的VBA程式碼,可將不懂的函數,方法,在VBA說明上查看如 Application,或 Rows
  1. Option Explicit
  2. Private Sub CommandButton1_Click()
  3.     Dim Rng As Range, M As Integer
  4.     Set Rng = Range("DK7", [DK7].End(xlDown))
  5.     M = Application.Max(Rng)
  6.     M = Application.Match(M, Rng, 0)
  7.     [DT1] = Rng.Cells(M).Address(0, 0)
  8.     With Rng.Resize(, 3)
  9.         .Interior.ColorIndex = xlNone
  10.         .Rows(M).Interior.ColorIndex = 8
  11.         [dk4].Resize(, 3) = .Rows(M).Value
  12.     End With
  13. End Sub
  14. Private Sub CommandButton2_Click()
  15.     Dim Rng As Range, M As Integer
  16.     Set Rng = Range("DK7", [DK7].End(xlDown)).Resize(, 3)
  17.     For i = 1 To Rng.Columns.Count
  18.         '*** 搜尋範圍內的每個欄位的最大值 ****
  19.         With Rng.Columns(i)
  20.             'M = Application.Max(.Cells)
  21.             M = Application.Match(Application.Max(.Cells), .Cells, 0)
  22.             [DT1].Offset(i - 1) = .Cells(M).Address(0, 0)
  23.         End With
  24.         With Rng
  25.             If i = 1 Then .Interior.ColorIndex = xlNone
  26.             .Rows(M).Interior.ColorIndex = Array(, 8, 15, 22)(i)
  27.             [dk4].Offset(i - 1).Resize(, 3) = .Rows(M).Value
  28.         End With
  29.     Next
  30. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 9# joblyc017
TEST-2.png
2017-11-23 02:47

J大:
不好意思,貴解答可否改為以函數公式轉化為程式語法作解,以符合5#的原題意。
謝謝您^^

參考公式︰放在DT1
="DK"&MATCH($DK$4,INDIRECT("DK7:DK"&COUNT(DK:DK)+3),)+6

我自己有試寫多次,但都沒有成功^^///
煩請不吝指正。感恩!

TEST-2.rar (12.91 KB)

TOP

        靜思自在 : 自己害自己,莫過於亂發脾氣。
返回列表 上一主題