返回列表 上一主題 發帖

[發問] 讓公式的值,直接帶入儲存格

回復 32# 准提部林
准大,
測試回報~~我是用同一個檔測試的,再麻煩您幫忙修改一下~~感謝
1) 公式漏掉V欄的允收±X....這個會在特殊時間用到,使用到時,會Key入數值,表頭只打在V2欄,但每個H欄的公式都要加入H3=$B$1+T3-(V3+U3)-1
2) 我想把允收的H,J欄位,key入資料後也變成值(無公式),這樣可以使檔案run快些
3) Sub 允收日_公式()....測試檔的最末2個表(表頭寫"北")無法填入允收日_公式,而且原來H,J欄位中間的~,還會被清除
請用我附上的這個檔,原先的檔,忘了在最末2個表打上日期
理貨單II.rar (146.03 KB)

TOP

回復 31# PJChen


Sub 訂購數_清除()
Dim R&, xR As Range, xH As Range, C%
R = Cells(Rows.Count, "K").End(xlUp).Row
If R <= 2 Then Exit Sub
For Each xR In Range("K2:K" & R)
    If xR = "品名" Then Set xH = xR(2): C = 1: GoTo 101
    If xR = "合計" Then
       If C = 0 Then GoTo 101
       Range(xH(1, 7), xR(0, 7)).ClearContents
       C = 0
    End If
101: Next
End Sub

Sub 允收日_公式()
Dim R&, xR As Range, xH As Range, C%, Fx$(1 To 3), j%
R = Cells(Rows.Count, "K").End(xlUp).Row
If R <= 2 Then Exit Sub
Fx(1) = "=IF(J3="""","""",J3-U3)"
Fx(2) = "=IF(J3="""","""",""~"")"
Fx(3) = "=IF(N(B$_X)*LEN(K3)*N(T3)*N(U3)=0,"""",B$_X+T3-1)"
For Each xR In Range("K2:K" & R)
    If xR = "品名" Then Set xH = xR(2, -2): C = 1: GoTo 101
    If xR = "合計" Then
       If C = 0 Then GoTo 101
       For j = 1 To 3
           Range(xH(1, j), xR(0, -3 + j)) = Replace(Replace(Fx(j), 3, xH.Row), "_X", xH.Row - 2)
       Next j
       C = 0
    End If
101: Next
End Sub

Sub 允收日_清除()
Dim R&, xR As Range, xH As Range, C%
R = Cells(Rows.Count, "K").End(xlUp).Row
If R <= 2 Then Exit Sub
For Each xR In Range("K2:K" & R)
    If xR = "品名" Then Set xH = xR(2, -2): C = 1: GoTo 101
    If xR = "合計" Then
       If C = 0 Then GoTo 101
       Range(xH, xR(0, 0)).ClearContents
       C = 0
    End If
101: Next
End Sub


'==================================

TOP

回復 30# 准提部林
謝謝准大,
這個程式也可以很準確的執行了^^

一樣以上支程式為模版,以下3支程式的使用時機不同,需要單獨程式使用
1        以K欄品名列數為準,ClearContents(只清除資料,不清除格式) 訂購數的數值
        要能套用到這個BF理貨工作表的每個訂購數欄位
        其他儲存格不要清除
       
2        以K欄品名列數為準
        日期以品名表頭的上一列B欄為準
        要能套用到這個BF理貨工作表的每個H,J欄位
        H欄 H3=$B1+T3-(V3+U3)-1
        J欄 J3=$B1+T3-1
       
3        以K欄品名列數為準,ClearContents H,J欄位(只清除資料,不清除格式)
        要能套用到這個BF理貨工作表的每個H,J欄位
        其他儲存格不要清除  
理貨單.rar (145.21 KB)

TOP

回復 28# PJChen


Sub TEST_2()
Dim R&, xR As Range, xH As Range, C%
R = Cells(Rows.Count, "K").End(xlUp).Row
If R <= 2 Then Exit Sub
For Each xR In Range("K2:K" & R)
    If xR = "品名" Then Set xH = xR(2, 3): C = 1: GoTo 101
    If xR = "合計" Then
       If C = 0 Then GoTo 101
       With Range(xH, xR(0, 4))
            .Columns(1).FormulaR1C1 = "=IF(OR(RC[-1]="""",N(RC[3])=0),"""",INT(RC[4]/RC[3]))"
            .Columns(2).FormulaR1C1 = "=IF(OR(RC[-2]="""",N(RC[2])=0),"""",MOD(RC[3],RC[2]))"
            .Value = .Value
       End With
       xR(1, 3) = "=SUM(" & Range(xH(1, 1), xR(0, 3)).Address & ")" '箱數合計公式
       xR(1, 4) = "=SUM(" & Range(xH(1, 2), xR(0, 4)).Address & ")" '瓶數合計公式
       xR(1, 7) = "=SUM(" & Range(xH(1, 5), xR(0, 7)).Address & ")" '訂購數 合計公式
       C = 0
    End If
101: Next
End Sub


'=================================

TOP

回復 28# PJChen

Sub TEST_1()
Dim R&, Arr, Brr, i&, S&(1 To 2), V1, V2, C%
R = Cells(Rows.Count, "K").End(xlUp).Row
If R <= 2 Then Exit Sub
Arr = Range("K2:Q" & R)
Brr = Range("M2:N" & R)
For i = 1 To UBound(Arr)
    If Arr(i, 1) = "品名" Then Erase S: C = 1: GoTo 101
    If Arr(i, 1) = "合計" Then
       Brr(i, 1) = S(1) '箱數合計
       Brr(i, 2) = S(2) '瓶數合計
       Erase S: C = 0: GoTo 101
    End If
    If C = 1 Then
       Brr(i, 1) = "":    Brr(i, 2) = ""
       V1 = Val(Arr(i, 6)) '包裝數
       V2 = Val(Arr(i, 7)) '訂購數
       If Arr(i, 2) = "" Or V1 = 0 Then GoTo 101
       Brr(i, 1) = Int(V2 / V1) '箱數
       S(1) = S(1) + Brr(i, 1)  '箱數累計
       Brr(i, 2) = V2 Mod V1  '瓶數
       S(2) = S(2) + Brr(i, 2) '瓶數累計
    End If
101: Next i
Range("M2:N" & R) = Brr
End Sub

'================================

TOP

本帖最後由 PJChen 於 2020-2-18 00:02 編輯

回復 25# 准提部林
准大,

今天在作業中發現,自動計算箱瓶後,它會把表格外的某些文字清除掉,
我希望表格外的任何儲存格,都可以維持原來的樣子,這個部份能否克服?


理貨單.rar (86.32 KB)

TOP

本帖最後由 PJChen 於 2020-2-17 00:18 編輯

回復 25# 准提部林
Dear 准大,
測試了整晚,發現問題點並且解決了,可以忽略我的上個回覆~~
我的表單會因為客戶因素而有變化,第一個程式可以比較活用,我比較喜歡
您的功力真是無敵!!
TEST_2雖然很精簡,但在測試時發現,表單有變,貼上的資料會出錯

TOP

回復 25# 准提部林
請問准大,

我有另一格式的表格,同樣做法,本想套用同一程式,小小修改欄位即可,但卻無法使用,
請幫忙看下,是否還有需修改的地方?
  1. Sub EX()
  2. Dim R&, Arr, Brr, i&, S&(1 To 2), V1, V2
  3. R = Cells(Rows.Count, "J").End(xlUp).Row
  4. If R <= 2 Then Exit Sub
  5. Arr = Range("J2:P" & R)
  6. Brr = Range("L2:M" & R)
  7. For i = 1 To UBound(Arr)
  8.     If Arr(i, 1) = "品名" Then Erase S: GoTo 101
  9.     If Arr(i, 1) = "合計" Then
  10.        Brr(i, 1) = S(1) '箱數合計
  11.        Brr(i, 2) = S(2) '瓶數合計
  12.        Erase S: GoTo 101
  13.     End If
  14.     Brr(i, 1) = "":    Brr(i, 2) = ""
  15.     V1 = Val(Arr(i, 6)) '包裝數
  16.     V2 = Val(Arr(i, 7)) '訂購數
  17.     If Arr(i, 2) = "" Or V1 = 0 Then GoTo 101
  18.     Brr(i, 1) = Int(V2 / V1) '箱數
  19.     S(1) = S(1) + Brr(i, 1)  '箱數累計
  20.     Brr(i, 2) = V2 Mod V1  '瓶數
  21.     S(2) = S(2) + Brr(i, 2) '瓶數累計
  22. 101: Next i
  23. Range("L2:M" & R) = Brr
  24. End Sub
複製代碼
理貨單_另一格式.rar (91.42 KB)

TOP

兩種方案, 自行選用:
Sub TEST_1()
Dim R&, Arr, Brr, i&, S&(1 To 2), V1, V2
R = Cells(Rows.Count, "K").End(xlUp).Row
If R <= 2 Then Exit Sub
Arr = Range("K2:Q" & R)
Brr = Range("M2:N" & R)
For i = 1 To UBound(Arr)
    If Arr(i, 1) = "品名" Then Erase S: GoTo 101
    If Arr(i, 1) = "合計" Then
       Brr(i, 1) = S(1) '箱數合計
       Brr(i, 2) = S(2) '瓶數合計
       Erase S: GoTo 101
    End If
    Brr(i, 1) = "":    Brr(i, 2) = ""
    V1 = Val(Arr(i, 6)) '包裝數
    V2 = Val(Arr(i, 7)) '訂購數
    If Arr(i, 2) = "" Or V1 = 0 Then GoTo 101
    Brr(i, 1) = Int(V2 / V1) '箱數
    S(1) = S(1) + Brr(i, 1)  '箱數累計
    Brr(i, 2) = V2 Mod V1  '瓶數
    S(2) = S(2) + Brr(i, 2) '瓶數累計
101: Next i
Range("M2:N" & R) = Brr
End Sub

'============================================
Sub TEST_2()
Dim R&
R = Cells(Rows.Count, "K").End(xlUp).Row
If R <= 2 Then Exit Sub
With Range("M3:N" & R)
     .Formula = "=IF($K3=$K$2,M$2,IF($K3=""合計"",SUM(M$1:M2)-SUMIF($K$1:$K2,""合計"",M$1:M2)*2," & _
            "IF(($L3="""")+($P3=0),"""",IF(M$2=""箱數"",INT($Q3/$P3),MOD($Q3,$P3)))))"
     .Value = .Value
End With


'=============================================
End Sub

TOP

回復 23# 准提部林
表單是實際的使用格式
~~~感謝准大~~~

理貨單.rar (109.92 KB)

TOP

        靜思自在 : 【時間如鑽石】時間對一個有智慧的人而言,就如鑽石般珍貴;但對愚人來說,卻像是一把泥土,一點價值也沒有。
返回列表 上一主題