返回列表 上一主題 發帖

[發問] 公式程式碼化

回復 44# ziv976688

SP = (xV.Offset(, -9) - SP) Mod 49: If SP = 0 Then SP = 49  'M2-V2 mod 49

A式 : 當 -SP之後的差值=負數時,則SP自動轉為正數(即如=絕對值)
SP = ABS(xV.Offset(, -9) - SP) Mod 49: If SP = 0 Then SP = 49  'M2-V2 mod 49


B式 : 當-SP之後的差值=負數時,則SP自動再+49轉為正數(即如=一般的函數計算)
SP = (xV.Offset(, -9) - SP + 49) Mod 49: If SP = 0 Then SP = 49  'M2-V2 mod 49
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 48# ziv976688


B式 : 當-SP之後的差值=負數時,則SP自動再+49轉為正數(即如=一般的函數計算)
SP = (xV.Offset(, -9) - SP + 49) Mod 49: If SP = 0 Then SP = 49  'M2-V2 mod 49

若是
11-90 = -79,再+49變成 -30 ,還是負數怎麼辦?
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 50# ziv976688

了解,數字若是0~48就沒有問題
因為之前寫公式有問過你,數字是否控制在99以下,所以有點誤會。
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

本帖最後由 ML089 於 2021-7-29 13:54 編輯

回復 55# ziv976688

真不好意思,小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
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

        靜思自在 : 【停滯不前,終無所得】人都迷於尋找奇蹟,因而停滯不前;縱使時間再多、路再長,也了無用處,終無所得。
返回列表 上一主題