返回列表 上一主題 發帖

[發問] 公式程式碼化

回復 11# ziv976688

用Match 做法寫給你

Sub 標示底色_Ex()
Dim Arr, Shs$, Num, Sh As Worksheet, Rg As Range
Shs = "準2進3 準3進4 準4進5 準5進6 準6進7 準7進8"
For Each Sh In Sheets(Split(Shs)): With Sh
  Arr = .[M2].End(4).Resize(, 7)
  Arr = Application.Transpose(Application.Transpose(Arr))  '轉一維
  For Each Rg In Union(.Range("A4:A52"), .Range("D2:J" & .[B65536].End(xlUp).Row - 1))
    Rg.Interior.ColorIndex = 0                           '清底色
    For Each Num In Split(Rg, ",")
      K = Application.Match(--Num, Arr, 0)                     '-- 轉數字比對
      If Not IsError(K) Then Rg.Interior.ColorIndex = 8  '標示藍底色
    Next Num
  Next Rg
End With: Next Sh
End Sub
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 n7822123 於 2021-7-25 18:00 編輯

回復 1# ziv976688

針對1樓需求~~版主已完成,再錦上添花一下~~

看你的序號從 1853~1878,若數列多

用陣列運算,速度應該會快一些

純數值才可以這樣做,改變儲存格顏色啥的,用儲存格就好~


Sub 餘數()
Dim Arr(1 To 2), Brr, Sh As Worksheet, Shs$
Shs = "準2進3 準3進4 準4進5 準5進6 準6進7 準7進8"
For Each Sh In Sheets(Split(Shs)): With Sh
  Rn& = .[B2].End(4).Row - 1: ReDim Brr(1 To Rn, 1 To 7)
  Arr(1) = .[M2].Resize(Rn, 7): Arr(2) = .[V2].Resize(Rn, 7)
  For R = 1 To Rn: For C = 1 To 7
    For Each Num In Split(Arr(2)(R, C), ",")
      餘數 = (Arr(1)(R, C) + Num - 1) Mod 49 + 1
      Brr(R, C) = Brr(R, C) & "," & Format(餘數, "00")
    Next Num
    Brr(R, C) = Mid(Brr(R, C), 2)
  Next C: Next R
  .[D30].Resize(Rn, 7) = Brr   '測試用
  '.[D2].Resize(Rn, 7) = Brr     '正確位置
End With: Next Sh
End Sub
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 16# ziv976688


   是儲存格裡面的數字喔~~Num只是個變數名稱而已
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 28# ziv976688

標示底色、餘數登入 都已經是跑各個工作表了

你好像又把這兩個寫在主程式的For 迴圈裡面,執行了N次一樣的操作~
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

        靜思自在 : 自己害自己,莫過於亂發脾氣。
返回列表 上一主題