Board logo

標題: [發問] VBA 程式碼簡化。 [打印本頁]

作者: Airman    時間: 2015-11-9 10:34     標題: VBA 程式碼簡化。

參考附件︰
http://www.FunP.Net/300415

Private Sub CommandButton1_Click()
Dim j%, k%
   
      Sheets("DATA").Range("I6", "P" & [R6] + 6).Copy [I6] '複製I:P資料
      Range("I" & [Q5] + 7, "P" & [R6] + 6).Copy [A7]
      Range("I7", "P" & [Q5] + 6).Copy Range("A" & [Q6] + 7) '複製A:H資料
      Cells([T5] + 6, 9).Interior.ColorIndex = 4 'I欄的T5期數標示底色
    If ([T5] + [Q6]) Mod [R6] > 0 Then
      Cells(([T5] + [Q6]) Mod [R6] + 6, 1).Interior.ColorIndex = 8 'A欄的T5期數標示底色
    Else
      Cells([R6] + 6, 1).Interior.ColorIndex = 8
    End If
   
   For j = 10 To 16
        If Cells([T5] + 6, j) = [R5] Then  '以I欄T5期數有顯示R5值為基準條件
             If ([T5] + [Q6]) Mod [R6] = 0 Then
              Cells([R6] + 6, j - 8).Interior.ColorIndex = 8
              Cells([R6] + 6, j).Interior.ColorIndex = 37
        With Cells([Q6] + 6, j - 8)
             .Interior.ColorIndex = 8
             .Font.ColorIndex = 7
             .Font.FontStyle = "粗體"
        End With
        With Cells([Q6] + 6, j)
             .Interior.ColorIndex = 37
             .Font.ColorIndex = 7
             .Font.FontStyle = "粗體"
        End With
        
        Else
             For k = 0 To Int(([R6] - ([T5] + [Q6]) Mod [R6]) / [Q6])
              Cells(([T5] + [Q6]) Mod [R6] + 6 + [Q6] * k, j - 8).Interior.ColorIndex = 8  'A欄T5期依各間距數往下標示底色
              Cells(([T5] + [Q6]) Mod [R6] + 6 + [Q6] * k, j).Interior.ColorIndex = 37
             Next k
        With Cells(([R6] - ([R6] - ([T5] + [Q6]) Mod [R6]) Mod [Q6] + [Q6]) Mod [R6] + 6, j - 8)  'A欄=k的最後間距期數再加一個間距標示底色
             .Interior.ColorIndex = 8
             .Font.ColorIndex = 7
             .Font.FontStyle = "粗體"
        End With
        With Cells(([R6] - ([R6] - ([T5] + [Q6]) Mod [R6]) Mod [Q6] + [Q6]) Mod [R6] + 6, j)
             .Interior.ColorIndex = 37
             .Font.ColorIndex = 7
             .Font.FontStyle = "粗體"
        End With
        End If
        End If
   
   Next j

[R6].Select
End Sub

需求
請問︰
程式碼能如何再簡化?
以上  懇請各位前輩、先進不吝賜教! 謝謝!
作者: Airman    時間: 2015-11-9 10:49

補充說明:
重點是在列31~列34
因為([T5] + [Q6]) Mod [R6] = 0時,會產生bug,只好分成上下二段寫~
所以覺得程式碼有些冗長,不知是否能再稍作整理簡化之?
謝謝!
作者: 准提部林    時間: 2015-11-9 14:32

本帖最後由 准提部林 於 2015-11-9 14:49 編輯

If ([T5] + [Q6]) Mod [R6] > 0 Then
  Cells(([T5] + [Q6]) Mod [R6] + 6, 1).Interior.ColorIndex = 8 'A欄的T5期數標示底色
Else
  Cells([R6] + 6, 1).Interior.ColorIndex = 8
End If

改成:
N = ([T5] + [Q6]) Mod [R6]
If N = 0 Then N = [R6]
Cells(N + 6, 1).Interior.ColorIndex = 8
N = ([T5] + [Q6]) Mod [R6] '再重置N,讓下方引用
作者: 准提部林    時間: 2015-11-9 14:35

If ([T5] + [Q6]) Mod [R6] = 0 Then
∼∼
∼∼
End If

改成:
If N = 0 Then '這是延續上方的值(以下同) 
  Cells([R6] + 6, j - 8).Interior.ColorIndex = 8
  Cells([R6] + 6, j).Interior.ColorIndex = 37
  X = [Q6]
Else
  For k = 0 To Int(([R6] - N) / [Q6])
    Cells(N + 6 + [Q6] * k, j - 8).Interior.ColorIndex = 8
    Cells(N + 6 + [Q6] * k, j).Interior.ColorIndex = 37
  Next k
  X = ([R6] - ([R6] - N) Mod [Q6] + [Q6]) Mod [R6]
End If
 
With Cells(X + 6, j - 8)
   .Interior.ColorIndex = 8: .Font.ColorIndex = 7: .Font.FontStyle = "粗體"
End With
With Cells(X + 6, j)
   .Interior.ColorIndex = 37: .Font.ColorIndex = 7: .Font.FontStyle = "粗體"
End With
作者: Airman    時間: 2015-11-9 15:12

回復 4# 准提部林
准大:
謝謝您的詳細分解。
小弟受益良多~感恩^^




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