返回列表 上一主題 發帖

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

回復 7# ziv976688

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

TOP

回復 5# Scott090
感謝解答。
執行後,前三大的(中式排名)底色標示正確,但公式不見了^^"
所以無法再作複製格式到其它列之用。
請你修正為能將公式保留。謝謝你^^

TOP

回復 4# GBKEE
感謝解答。
請再修正最後一段(第10段)$AU : $AX2  ->只有4欄
除了 For i = 0 To 9 改成= 0 To 8
請問 : 第9段要怎麼補寫?

還有直執行後的公式的"列位"多了絕對符號 " $ " ->EX : $B2 : $F2變成 $B$2 : $F$2 ;$G2 : $K2變成 $G$2 : $K$2;.......
所以無法再複製格式到其它列。
請問 : 要如何修改?

以上請你修正。謝謝你^^

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

本帖最後由 GBKEE 於 2019-5-22 07:35 編輯

回復 3# ziv976688

依你檔案的程式碼所簡化的迴圈
試試看
  1. Option Explicit
  2. Sub 格式化條件()
  3.     Dim Rng As Range, AR(1 To 3) As String,i As Integer
  4.     Set Rng = Range("B2:F2")     '第一個範圍
  5.     For i = 0 To 9                           '10範圍要處裡
  6.         With Rng
  7.             '**Rng.Address                  範圍的絕對位置 : $B2:$F2
  8.             '**Rng(1).Address(0, 0)     範圍的第一個Cell 相對位置 B2
  9.             ' *公式一"=(B2=MAX($B2:$F2))*(B2>0)"
  10.             AR(1) = "=(" & Rng(1).Address(0, 0) & "=MAX(" & Rng.Address & "))*(" & Rng(1).Address(0, 0) & ">0)"
  11.             '* 公式二"=(SUMPRODUCT((B2<=$B2:$F2)/COUNTIF($B2:$F2,$B2:$F2))=2)*(B2>0)"
  12.             AR(2) = "=(SUMPRODUCT((" & Rng(1).Address(0, 0) & "<=" & Rng.Address & ")/COUNTIF(" & Rng.Address & "," & Rng.Address & "))=2)*(" & Rng(1).Address(0, 0) & ">0)"
  13.             '* 公式三"=(SUMPRODUCT((B2<=$B2:$F2)/COUNTIF($B2:$F2,$B2:$F2))=3)*(B2>0)"
  14.             AR(3) = "=(SUMPRODUCT((" & Rng(1).Address(0, 0) & "<=" & Rng.Address & ")/COUNTIF(" & Rng.Address & "," & Rng.Address & "))=3)*(" & Rng(1).Address(0, 0) & ">0)"
  15.             .Select
  16.             .FormatConditions.Delete
  17.             .FormatConditions.Add Type:=xlExpression, Formula1:=AR(1)
  18.             .FormatConditions(1).Interior.ColorIndex = 43
  19.             .FormatConditions.Add Type:=xlExpression, Formula1:=AR(2)
  20.             .FormatConditions(2).Interior.ColorIndex = 8
  21.             .FormatConditions.Add Type:=xlExpression, Formula1:=AR(3)
  22.             .FormatConditions(3).Interior.ColorIndex = 37
  23.         End With
  24.         Set Rng = Rng.Offset(, Rng.Columns.Count)  '**下一個範圍
  25.     Next
  26. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 2# Scott090
例如  Range("B2:F2") 中的
            條件   1. 最大數的底色是 ....43號底色
            條件   2. 次大 .... 底色是 ....8號底色
            條件   3. ........37號底色
            假如數字一樣大 ? ....同樣底色。EX :有二個或三個同是最大時,則都標示43號底色;有二個或三個同是次大時,則都標示8號底色;有二個或三個同是三大時,則都標示37號底色。

    以上供參 !謝謝你 !

TOP

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

回復 1# ziv976688

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

TOP

        靜思自在 : 每天無所事事,是人生的消費者,積極、有用才是人生的創造者。
返回列表 上一主題