返回列表 上一主題 發帖

[發問] 取出包材"+"or"-"號之後的數值

[發問] 取出包材"+"or"-"號之後的數值

大家好:

以下三個品名,我想將進貨數量的加項or減項,提取到包材驗算!驗算工作表的[F16:AJ18]
16吋收縮膜(卷)
工業用伸縮膜(卷)
封箱膠帶(條)

包材報表!包材工作表,進貨填寫方式是固定在原數字欄加入進貨數量,偶爾也會有減項的數量,
提取數量的準則為"+",則取正數,"-",則取負數,目前已將需提取的數字,手動填入工作表中,
但我想改寫為自動抓取,不知有什麼函數,可針對數值"+"or"-"號,取出正負數?
包材.rar (28.83 KB)

若是麼函數,無法達成,尚不知VBA能否做得到....對數值最最後一個"+"or"-"號&取出正負數?

TOP

回復 3# jcchiang

您好,
試做時,發生問題如下,請教....
1) 封箱膠帶(條)抓不到資料
將資料範圍Set Arr = .Range(.[b5], .[P7])
改為   Set Arr = .Range(.[b5], .[AI11]),但無法執行

.Range(.[b5], .[AI11])的範圍,為整個月份的資料
包材報表_取出最後一個正負號的值.rar (37.61 KB)

TOP

回復 5# jcchiang

謝謝
現在可正常抓取到資料了

TOP

回復 5# jcchiang

您好,
原程式測試沒問題
來源資料範圍不變,但想將截取載入進貨的資料擴大為
For Each a In Range([C16], [C25])
但執行後會卡在這裡無法繼續,請幫忙看看是否要修改?
d(Arr(X, 1) & Arr(X, Y).Offset(-3 - X)) = Split(Arr(X, Y).FormulaR1C1Local, "+")(1)  '資料寫入字典
包材報表_取出最後一個正負號的值.rar (47 KB)

TOP

回復 8# jcchiang

您好,
1) 改完後,執行沒有任何動作
2) 請問 這段要怎麼解讀呢?
            d(Arr(X, 1) & Arr(X, Y).Offset(-X)) = Split(Arr(X, Y).FormulaR1C1Local, "+")(1)   '資料寫入字典            
            ElseIf Arr(X, Y).FormulaR1C1Local Like "*-*" Then '判斷公式內為"-"
            d(Arr(X, 1) & Arr(X, Y).Offset(-X)) = "-" & Split(Arr(X, Y).FormulaR1C1Local, "-")(1)    '資料寫入字典
包材報表_取出最後一個正負號的值.rar (46.57 KB)

TOP

回復 8# jcchiang

不知道發生什麼事,原來程式也不能運作了....
   包材報表_取出最後一個正負號的值.rar (39.36 KB)

TOP

回復 10# PJChen

不過我並不要這個原程式操作,希望有人可以幫忙看看,卡了很多天了....
    包材報表_取出最後一個正負號的值.rar (47.94 KB)

TOP

回復 12# 軒云熊
謝謝熊大,
稍微修改後,截取資料正確,請問:
1) 我不想關閉來源檔Workbooks("包材報表.xlsx").Close False,但會無法執行,且每執行一次就增加二欄,原因是什麼?
2) 是否因為這個For I = 1 To 2: Columns(4).Insert , 2: Next I,為什需要增加2欄呢?
3) 我沒看過這種寫法,範圍為何是倒著寫呢?Arr = Range("AK11:C2").FormulaR1C1Local
4) 能否幫忙註解程式的意思?
感激不盡....

Range("E16:AJ25").ClearContents
    Workbooks.Open ThisWorkbook.Path & "\" & "包材報表.xlsx"
    For I = 1 To 2: Columns(4).Insert , 2: Next I
    Arr = Range("AK11:C2").FormulaR1C1Local
    Workbooks("包材報表.xlsx").Close False
    Brr = Range("B16:AJ25")
   
    For X = 1 To UBound(Arr, 1)
        For Y = 1 To UBound(Brr, 1)
            If Trim(Arr(X, 1)) = Trim(Brr(Y, 1)) Then
                 For E = 1 To UBound(Arr, 2)
                    If Arr(X, E) Like "*-*" Then
                        G = Split(Arr(X, E), "-")(1)
                        Brr(Y, E) = "=-" & G
                    ElseIf Arr(X, E) Like "*+*" Then
                        G = Split(Arr(X, E), "+")(1)
                        Brr(Y, E) = "=+" & G
                    End If
                Next E
            End If
        Next Y
    Next X

      Range("B16:AJ25") = Brr

TOP

回復 15# 軒云熊

現在可以正常截取資料了,感謝您....

TOP

        靜思自在 : 心中常存善解、包容、感思、知足、惜福。
返回列表 上一主題