標題:
[發問]
公式轉化為程式語法。
[打印本頁]
作者:
papaya
時間:
2017-11-19 19:30
標題:
公式轉化為程式語法。
本帖最後由 papaya 於 2017-11-19 19:34 編輯
Private Sub CommandButton1_Click()
'[A2] = "=Max(D:D)"
'[A2] = [A2].Value
[A2] = Application.Max(Range("D:D"))
[B1] = [I2]
[B2] = [D2]
[C2] = "=INDEX(D:D,MATCH(A2,I:I,))"
[C2] = [C2].Value
[C1] = "=SUMIF(OFFSET($I$1,C2-B2+1,1,,4),A1,OFFSET($D$1,C2-B2+1,1,,4))"
[C1] = [C1].Value
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
[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
Option Explicit
Private Sub CommandButton1_Click()
Dim Rng As Range, M As Integer
Set Rng = Range("DK7", [DK7].End(xlDown))
M = Application.Max(Rng)
M = Application.Match(M, Rng, 0)
[DT1] = Rng.Cells(M).Address(0, 0)
With Rng.Resize(, 3)
.Interior.ColorIndex = xlNone
.Rows(M).Interior.ColorIndex = 8
[dk4].Resize(, 3) = .Rows(M).Value
End With
End Sub
Private Sub CommandButton2_Click()
Dim Rng As Range, M As Integer
Set Rng = Range("DK7", [DK7].End(xlDown)).Resize(, 3)
For i = 1 To Rng.Columns.Count
'*** 搜尋範圍內的每個欄位的最大值 ****
With Rng.Columns(i)
'M = Application.Max(.Cells)
M = Application.Match(Application.Max(.Cells), .Cells, 0)
[DT1].Offset(i - 1) = .Cells(M).Address(0, 0)
End With
With Rng
If i = 1 Then .Interior.ColorIndex = xlNone
.Rows(M).Interior.ColorIndex = Array(, 8, 15, 22)(i)
[dk4].Offset(i - 1).Resize(, 3) = .Rows(M).Value
End With
Next
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 超級版主:您好!
感謝您的
提醒
~重新再查閱一次;雖然沒有馬上領會,但經過一再套例子測試,終於懂得如何運用^^
程式碼非常短即可
Private Sub CommandButton1_Click()
Range("DK7:DM" & [DM65536].End(xlUp).Row).Interior.ColorIndex = -4142
Range("DK" & Application.Match(Range("DK4"), Range("DK7:DK" & Sheets("Sheet1").[DK65536].End(xlUp).Row), 0) + 6).Resize(1, 3).Interior.ColorIndex = 8
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編寫的錯誤
Option Explicit
Private Sub CommandButton1_Click()
Dim Rng As Range, M As Variant
Dim Sh As Worksheet
Set Sh = Sheets("sheet1")
Set Rng = Sh.Range("DK7:DM" & Sh.[DM65536].End(xlUp).Row)
With Rng
.Interior.ColorIndex = -4142
M = Application.Match(Sh.Range("DK4"), .Columns(1), 0)
If IsNumeric(M) Then '有找到
.Cells(M, 1).Resize(1, 3).Interior.ColorIndex = 8
End If
End With
'Range("DK7:DM" & [DM65536].End(xlUp).Row).Interior.ColorIndex = -4142
'Range("DK" & Application.Match(Range("DK4"), Range("DK7:DK" & Sheets("Sheet1").[DK65536].End(xlUp).Row), 0) + 6).Resize(1, 3).Interior.ColorIndex = 8
End Sub
複製代碼
作者:
papaya
時間:
2017-11-24 14:26
回復
18#
GBKEE
多試試看指定物件變數,可減少vba編寫的錯誤
GBKEE 超級版主:您好!
您的標準範例,小弟會仔細研讀~感恩
謝謝您一再的
溫馨叮嚀
。
剛剛已有上網訂了1本~
跟我學Excel VBA
希望有所幫助
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)