程式碼如下:
Option Explicit
Sub 反向帶值_上色_TEST()
Dim Arr, R&, C%, Sh, Shu, reg, Find_Num, i&
Dim x%, y%, x1%, j%, T
T = Timer
Set Sh = Sheets("操作表")
Set Shu = Sheets("反操作表")
R = Shu.UsedRange.EntireRow.Rows.Count
C = Shu.UsedRange.EntireColumn.Columns.Count
Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "\d+"
reg.Global = True
For x = 2 To C Step 2
For y = 3 To R
Set Find_Num = reg.Execute(Shu.Cells(y, x))
If Find_Num.Count > 0 Then
Sh.Cells(Find_Num(0), Find_Num(1)).Interior.ColorIndex = _
Shu.Cells(1, x + 1).Interior.ColorIndex
Sh.Cells(Find_Num(0), Find_Num(1)) = Shu.Cells(y, x + 1)
End If
Next
Next
Sh.Activate
MsgBox Timer - T & " 秒"
End Sub作者: Andy2483 時間: 2022-11-24 09:49
[attach]35519[/attach]
以下心得註解請各位前輩指正並指導!謝謝
Option Explicit
Sub 反向帶值_上色_Detail()
Dim Arr, R&, C%, Sh, Shu, reg, Find_Num, i&
Dim x%, y%, Z&, T
'↑宣告變數
T = Timer
Z = 200
'↑設定想要查看資料的細部條件
Set Sh = Sheets("操作表")
'↑令Sh 是工作表
Set Shu = Sheets("反操作表")
'↑令Shu 是工作表
Sh.UsedRange.EntireRow.Delete
'↑操作表 有使用的列全部刪除
R = Shu.UsedRange.EntireRow.Rows.Count
'↑令R是 反操作表有使用的列數
C = Shu.UsedRange.EntireColumn.Columns.Count
'↑令C是 反操作表有使用的欄數
Set reg = CreateObject("VBScript.RegExp")
'↑令reg 是正則
reg.Pattern = "\d+"
'↑正則的規則是被非數字間隔的數字串
reg.Global = True
'↑正則後的資料全部都要!
For x = 2 To C Step 2
'↑設外順迴圈! 從2 到 反操作表有使用的欄數,每次繞回來x+2
For y = 3 To R
'↑設內順迴圈! 從2 到 反操作表有使用的列數
Set Find_Num = reg.Execute(Shu.Cells(y, x))
'↑令Find_Num 是迴圈儲存格執行正則之後的陣列
If Find_Num.Count > 0 Then
'↑如果 Find_Num陣列裡有資料??
If Find_Num(0) Mod Z = 0 Then
'↑如果 Find_Num陣列裡的第個數字 除以200的餘數是0(整除的意思)
Sh.Cells(Find_Num(0) / Z, Find_Num(1)).Interior.ColorIndex = _
Shu.Cells(1, x + 1).Interior.ColorIndex
'↑操作表相對應的儲存格位置上底色
Sh.Cells(Find_Num(0) / Z, Find_Num(1)) = Shu.Cells(y, x + 1)
'↑操作表相對應的儲存格位置輸入值
End If
End If
Next
Next
Sh.Activate
MsgBox Timer - T & " 秒"
End Sub