Board logo

標題: [發問] 公式轉化為程式語法。 [打印本頁]

作者: papaya    時間: 2017-11-19 19:30     標題: 公式轉化為程式語法。

本帖最後由 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只作輔助說明用;完成後就移除。

先感謝各位大大的熱心協助。
[attach]27994[/attach]
作者: papaya    時間: 2017-11-21 11:36

本帖最後由 papaya 於 2017-11-21 11:38 編輯

爬文許久~解決了~C2
[C2] = Application.Index(Range("D:D"), Application.Match(Range("A2"), Range("I:I"), 0))

C1還是無法解決QQ
https://support.microsoft.com/zh-tw/help/291308/how-to-select-cells-ranges-by-using-visual-basic-procedures-in-excel
因為實在無法由上述網站的說明及範例中完全理解和套用在C1公式

懇請各位高手不吝賜教和指導!謝謝先!
作者: joblyc017    時間: 2017-11-21 12:17

回復 2# papaya
  1. [C1] = Application.SumIf(Range("I1").Offset(Range("C2") - Range("B2") + 1, 1).Resize(, 4), Range("A1"), Range("D1").Offset(Range("C2") - Range("B2") + 1, 1).Resize(, 4))
複製代碼

作者: papaya    時間: 2017-11-21 13:12

回復 3# joblyc017
瞭解了~
,,4  原來4欄的範圍必須以 .Resize(, 4)來表達。
謝謝您^^
作者: papaya    時間: 2017-11-22 05:16

本帖最後由 papaya 於 2017-11-22 05:25 編輯

回復 3# joblyc017
j大:
不好意思,能否再請您指導~
當"DK7:DK"&COUNT(DK:DK)+3之範圍內=$DK$4的列,其該列當欄和右邊的二欄標示8號底色。
請問:公式轉化為程式語法要如何編寫?

另~
將"DK7:DK"&COUNT(DK:DK)+3之範圍內=最大數的列,其該列當欄和右邊的二欄標示8號底色。
請問:公式轉化為程式語法要如何編寫?
謝謝您^^

PS: "DK7:DK"&COUNT(DK:DK)+3的值,不會重複,中間也不會有空白格

[attach]28005[/attach]

[attach]28006[/attach]

只要SHEET1即可,SHEET2只作輔助說明用。
作者: papaya    時間: 2017-11-22 05:40

回復 5# papaya
SHEE2的標的 欄忘了標示~補上
[attach]28007[/attach]
作者: joblyc017    時間: 2017-11-22 09:32

回復 6# papaya


    請提供範例檔,謝謝
作者: papaya    時間: 2017-11-22 12:00

回復 7# joblyc017

範例檔
[attach]28008[/attach]
請參考!謝謝您^^
作者: joblyc017    時間: 2017-11-22 12:25

回復 8# papaya


    [attach]28009[/attach]
作者: papaya    時間: 2017-11-22 13:39

回復 9# joblyc017

J大:
謝謝您的不吝指導^^
作者: papaya    時間: 2017-11-23 02:48

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

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

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

[attach]28014[/attach]
作者: GBKEE    時間: 2017-11-23 08:21

回復 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
複製代碼

作者: papaya    時間: 2017-11-23 09:54

本帖最後由 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
(以上只是舉例)
之類似程式碼來完成需求?
如果可以,請指導正確的寫法;
如果不型~亦敬請告知。
謝謝您^^
作者: joblyc017    時間: 2017-11-23 09:59

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

回復 11# papaya

[attach]28019[/attach]
作者: papaya    時間: 2017-11-23 10:07

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

可否麻煩您將程式罵另外貼上。
圖檔無法複製。
謝謝您^^
作者: papaya    時間: 2017-11-24 07:39

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

回復 12# GBKEE
[attach]28021[/attach]

"不懂的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
複製代碼
[attach]28022[/attach]
作者: papaya    時間: 2017-11-24 07:55

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

回復 14# joblyc017

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

本帖最後由 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
複製代碼

作者: papaya    時間: 2017-11-24 14:26

回復 18# GBKEE

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


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

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




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