If ar(i, j) <> "" Then ar(i, j) = ar(i, j) & "," & x0
If ar(i, j) = "" Then ar(i, j) = x0
Next
End If
Next
Next
s.[d2].Resize(n, 7) = ar
End Sub
複製代碼
作者: ML089 時間: 2021-7-25 05:22
回復 1#ziv976688
Sub 餘數登錄()
Dim xS As Worksheet, xV As Range, xD, SP
Tm = Timer
For Each xS In Sheets(Array("準2進3", "準3進4", "準4進5", "準5進6", "準6進7", "準7進8")) '取表格
For Each xV In xS.Range("V2:AB" & xS.[B65536].End(xlUp).Row) '取儲存格
xD = ""
For Each SP In Split(xV, ",") '分離字串
SP = (SP + xV.Offset(, -9)) Mod 49: If SP = 0 Then SP = 49 'V2+M2 mod 49
xD = xD & "," & Format(SP, "00")
Next
xV.Offset(30, -18) = Mid(xD, 2, 99) '測試用 位置下移30格
'xV.Offset(, -18) = Mid(xD, 2, 99) '正確位置
Next
Next
End Sub作者: ziv976688 時間: 2021-7-25 09:04
Sub 標示底色()
Dim xS As Worksheet, xR As Range, SP, r
For Each xS In Sheets(Array("準2進3", "準3進4", "準4進5", "準5進6", "準6進7", "準7進8")) '取表格
r = xS.[B65536].End(xlUp).Row
For Each xR In xS.Range("A4:A" & xS.[A65536].End(xlUp).Row) '取儲存格
'xR.Interior.ColorIndex = 0 '清底色
If Not xS.Range("M2:S" & r).Find(xR) Is Nothing Then xR.Interior.ColorIndex = 8 '標示藍底色
Next
For Each xR In xS.Range("D2:J" & r - 1) '取儲存格
'xR.Interior.ColorIndex = 0 '清底色
For Each SP In Split(xR, ",") '分開數字
If Not xS.Range("M2:S" & r).Find(Val(SP)) Is Nothing Then xR.Interior.ColorIndex = 8: Exit For '標示藍底色
Next
Next
Next
End Sub作者: ziv976688 時間: 2021-7-25 17:41
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作者: n7822123 時間: 2021-7-25 17:58
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作者: ML089 時間: 2021-7-25 18:46
回復 11#ziv976688
是最後一列資料,我看錯了,修正如下
Sub 標示底色_ML089()
Dim xD As Object, xS As Worksheet, xR As Range, SP, r
Set xD = CreateObject("Scripting.Dictionary")
For Each xS In Sheets(Array("準2進3", "準3進4", "準4進5", "準5進6", "準6進7", "準7進8")) '取表格
r = xS.[B65536].End(xlUp).Row
For Each xR In xS.Range("A4:A" & xS.[A65536].End(xlUp).Row) '取儲存格
xR.Interior.ColorIndex = 0 '清底色
'If xR > 0 And xR = xS.Range("M" & xS.[B65536].End(xlUp).Row, "S" & xS.[B65536].End(xlUp).Row) Then xR.Interior.ColorIndex = 8 '標示藍底色
If Not xS.Range("M" & r, "S" & r).Find(xR, LookAt:=xlWhole) Is Nothing Then xR.Interior.ColorIndex = 8 '標示藍底色
Next
For Each xR In xS.Range("D2:J" & r - 1) '取儲存格
xR.Interior.ColorIndex = 0 '清底色
For Each SP In Split(xR, ",") '分開數字
'If Val(SP) > 0 And Val(SP) = xS.Range("M" & xS.[B65536].End(xlUp).Row, "S" & xS.[B65536].End(xlUp).Row) Then xD(Val(SP)).Interior.ColorIndex = 8 '標示藍底色
If Not xS.Range("M" & r, "S" & r).Find(Val(SP), LookAt:=xlWhole) Is Nothing Then xR.Interior.ColorIndex = 8: Exit For '標示藍底色
Next
Next
Next
End Sub作者: ziv976688 時間: 2021-7-25 19:37
不好意思,請教一下 : 列8
For Each Num In Split(Arr(2)(R, C), ",")
餘數 = (Arr(1)(R, C) + Num - 1) Mod 49 + 1
請問 : Num是指填入控制箱的期距數 Num = "25" 嗎?
還是只是變數 ?
謝謝您作者: ziv976688 時間: 2021-7-25 20:04
4_執行模組程式碼應放置在DATA!VB~
For s = 1 To 6 '6個工作表
:
NEXT
Call 參數登錄
Call 餘數登錄
Call 餘數各取1
Call 標示底色
我還想不出怎麼解決版面設定失效的問題
以上 懇請您賜教是幸! 謝謝您作者: 准提部林 時間: 2021-7-26 14:47
Sub 餘數登錄()
Dim xS As Worksheet, R&, Arr, Brr, A
For Each xS In Sheets(Array("準2進3", "準3進4", "準4進5", "準5進6", "準6進7", "準7進8"))
R = xS.[b65536].End(xlUp).Row - 1
Arr = xS.[m2:ab2].Resize(R)
ReDim Brr(1 To R, 1 To 7)
For i = 1 To R
For j = 1 To 7
For Each A In Split(Arr(i, j + 9), ",")
Brr(i, j) = Brr(i, j) & "," & Format((Arr(i, j) + Val(A)) Mod 49, "00;;49")
Next A
Brr(i, j) = Mid(Brr(i, j), 2)
Next j
Next i
xS.[d2].Resize(R, 7) = Brr
Next xS
End Sub作者: 准提部林 時間: 2021-7-26 14:47
Sub 標示底色()
Dim xS As Worksheet, R&, Arr, A, xD, xU As Range, N&
Set xD = CreateObject("Scripting.Dictionary")
For Each xS In Sheets(Array("準2進3", "準3進4", "準4進5", "準5進6", "準6進7", "準7進8"))
R = xS.[b65536].End(xlUp).Row
xS.[d2].Resize(R, 7).Interior.ColorIndex = xlNone
Set xU = xS.[c2]
For j = 1 To 7: xD(Val(xS.Cells(R, j + 12))) = 1: Next j
Arr = xS.[d1].Resize(R, 7)
For i = 2 To R: For j = 1 To 7
For Each A In Split(Arr(i, j), ",")
If xD(Val(A)) > 0 Then Set xU = Union(xS.Cells(i, j + 3), xU): Exit For
Next A
Next j: Next i
'-------------------------------
R = xS.[a65536].End(xlUp).Row
xS.[a4].Resize(R).Interior.ColorIndex = xlNone
Arr = xS.[a1].Resize(R)
For i = 4 To R
If xD(Val(Arr(i, 1))) > 0 Then Set xU = Union(xS.Cells(i, 1), xU)
Next i
xU.Interior.ColorIndex = 8
xS.[c2].Interior.ColorIndex = xlNone
xD.RemoveAll: N = 0
Next xS
End Sub作者: ziv976688 時間: 2021-7-26 15:17
Sub 餘數各取1()
Dim xD As Object, xS As Worksheet, xR As Range, SP
Set xD = CreateObject("Scripting.Dictionary")
For Each xS In Sheets(Split("準2進3 準3進4 準4進5 準5進6 準6進7 準7進8")) '取表格
For Each xR In xS.Range("D2:J" & xS.[B65536].End(xlUp).Row) '取儲存格
For Each SP In Split(xR, ",") '分開數字
If Val(SP) > 0 Then xD(Val(SP)) = "" '字典組合
Next
Next
xS.[A2:A110].ClearContents '清除儲存格內容
xS.[a2] = xD.Count & "個": xS.[A3] = "號碼"
N = xD.Count: If N = 0 Then Exit For
With xS.[A4].Resize(N)
.Value = Application.Transpose(xD.keys)
'排序錯誤修正,xD.Count = 1時,排序範圍變成整個表格造成錯誤
If N > 1 Then .Sort key1:=.Item(1), Order1:=xlAscending, Header:=xlNo
xD.RemoveAll
End With
Next
End Sub作者: ziv976688 時間: 2021-7-26 23:09
餘數各取1 有點BUG,xD.count=0時不應該EXIT FOR,導致後面表格沒有處理
Sub 餘數各取1()
Dim xD As Object, xS As Worksheet, xR As Range, SP, N
Tm = Timer
Set xD = CreateObject("Scripting.Dictionary")
For Each xS In Sheets(Split("準2進3 準3進4 準4進5 準5進6 準6進7 準7進8")) '取表格
For Each xR In xS.Range("D2:J" & xS.[B65536].End(xlUp).Row) '取儲存格
For Each SP In Split(xR, ",") '分開數字
If Val(SP) > 0 Then xD(Val(SP)) = "" '字典組合
Next
Next
N = xD.Count
xS.[A2:A110].ClearContents '清除儲存格內容
xS.[A2] = IIf(N = 0, "", N & "個")
xS.[A3] = "號碼"
If N > 1 Then 'xD.Count > 1時,才需要排序,不然會錯
With xS.[A4].Resize(N)
.Value = Application.Transpose(xD.keys)
.Sort key1:=.Item(1), Order1:=xlAscending, Header:=xlNo
End With
End If
xD.RemoveAll
Next
Debug.Print Format(Timer - Tm, "0.00秒") & " 餘數各取1"
End Sub
For Each SP In Split(xV, ",")
:
:
Next xV不是已限制在0 To 48了嗎?
還是我又錯了
如果我又誤解程式碼的意涵~懇請賜正。
謝謝您
准大的參數登錄(Module 2)
Sub 參數登錄()
Dim xS As Worksheet, xD, Arr(6), Brr, R&, i&, j%, k%, x%, N%, T$
Set xD = CreateObject("Scripting.Dictionary")
For Each xS In Sheets(Array("準2進3", "準3進4", "準4進5", "準5進6", "準6進7", "準7進8"))
xD.RemoveAll
R = xS.[ac65536].End(xlUp).Row - 1
N = N + 1: If R < 1 Then GoTo s01
ReDim Brr(1 To R - 1, 1 To 7)
For k = 0 To N
Arr(k) = xS.[ae2].Cells(1, k * 9 + 1).Resize(R, 7)
For j = 1 To 7
xD(Arr(k)(R, j) & "|" & k) = 1
Next j
Next k
'--------------------------------------
For i = 1 To R - 1
For j = 1 To 7 For x = 0 To 48
For k = 0 To N ' T = (Arr(k)(i, j) + x) Mod 49 & "|" & k
V = (Arr(k)(i, j) - x) Mod 49
If V < 0 Then V = V + 49
T = V & "|" & k
If xD(T) = 0 Then GoTo x001
Next k
Brr(i, j) = Brr(i, j) & IIf(Brr(i, j) = "", "", ",") & x
x001: Next x
Next j
Next i
'-------------------------------------
With xS.[v2].Resize(R - 1, 7) '登錄位置
.NumberFormatLocal = "@"
.Value = Brr
End With
s01: Next
End Sub作者: ziv976688 時間: 2021-7-28 14:32
真不好意思,小BUG不斷。
Sub 餘數各取1()
Dim xD As Object, xS As Worksheet, xR As Range, SP, N
Set xD = CreateObject("Scripting.Dictionary")
For Each xS In Sheets(Split("準2進3 準3進4 準4進5 準5進6 準6進7 準7進8")) '取表格
For Each xR In xS.Range("D2:J" & xS.[B65536].End(xlUp).Row) '取儲存格
For Each SP In Split(xR, ",") '分開數字
If Val(SP) > 0 Then xD(Val(SP)) = "" '字典組合
Next
Next
N = xD.Count
xS.[A2:A110].ClearContents '清除儲存格內容
xS.[A2] = IIf(N = 0, "", N & "個")
xS.[A3] = "號碼"
If N > 0 Then
With xS.[A4].Resize(N)
.Value = Application.Transpose(xD.keys)
'N > 1時才需要排序,不然會錯
If N > 1 Then .Sort key1:=.Item(1), Order1:=xlAscending, Header:=xlNo
End With
End If
xD.RemoveAll
Next
End Sub作者: ziv976688 時間: 2021-7-29 14:47