返回列表 上一主題 發帖

[發問] 請簡化錄製的程式碼。

本帖最後由 Scott090 於 2019-5-21 11:53 編輯

回復 1# ziv976688

   請把條件用白話文謝看看
    例如  Range("B2:F2") 中的
            條件   1. 最大數的底色是 ....
            條件   2. 次大 .... 底色是 ....
            條件   3. ........
            假如數字一樣大 ? ....
    上面舉的   不一定是這個問題的需求,只是試著用文字描述條件與結果需求
     有時用錄製的來改寫反而有些麻煩,當然有時錄製會有很大的助益。

TOP

回復 3# ziv976688

   是這樣嗎?
     Option Explicit
Option Base 1

Sub Main_test()
      Dim sh As Worksheet
      Dim i%, j%, k%, colNo%, RowNo%
      Dim arWk%(5, 2), arColor()
      
      Set sh = Sheets("sheet1")
      '先還原底色
      sh.Range([B2], Cells(2, 50)).Interior.ColorIndex = 0
      
      arColor = Array(43, 8, 37)
      colNo = [B2].End(xlToRight).Column
      For i = 2 To colNo Step 5
            For j = 1 To 5
                  arWk(j, 1) = Cells(2, j + i - 1): arWk(j, 2) = i + j - 1
            Next
                              
            BubbleSortDesc arWk
            k = 1
            For j = 1 To 5
ColoringAgain:
                  If Val(arWk(j, 1)) <> 0 Then
                        Cells(2, arWk(j, 2)).Interior.ColorIndex = arColor(k)
                        If j + 1 > 5 Then Exit For
                        If arWk(j + 1, 1) = arWk(j, 1) Then j = j + 1: GoTo ColoringAgain
                        k = k + 1
                  End If
                  If k > 3 Then Exit For
            Next
            ReDim aewk(5, 2)
    Next
      
End Sub


'      陣列排序由大而小
'======================
Sub BubbleSortDesc(arr)
    Dim arTemp%(2)
    Dim i%, j%, UB%
   
    UB = UBound(arr)
    For i = 1 To UB
        For j = i + 1 To UB
            If arr(i, 1) < arr(j, 1) Then
                arTemp(1) = arr(i, 1): arTemp(2) = arr(i, 2)
                arr(i, 1) = arr(j, 1): arr(i, 2) = arr(j, 2)
                arr(j, 1) = arTemp(1): arr(j, 2) = arTemp(2)
            End If
        Next j
    Next i

End Sub

Sub 格式化條件()
      Main_test
End Sub

TOP

回復 7# ziv976688

         抱歉,不知你是要保留用儲存格函數去執行的。
         請用 4# GBKEE 大大 提供的模式

TOP

        靜思自在 : 人的眼睛長在前面,只看到別人的缺點,絲毫看不到自己的缺點。
返回列表 上一主題