返回列表 上一主題 發帖

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

回復 50# PJChen
試試看!!
Sub ex()
Dim x%, i%
Dim xR As Object
For Each xR In Range([b5], [b65535].End(3))
   If xR = "訂單" Or xR = "廠缺" Or xR = "實出數" Then
      For i = 1 To 8
         If xR.Offset(, i) <> 0 Then
            x = Application.WorksheetFunction.Quotient(xR.Offset(, i), [C3])  '計算箱數
            xR.Offset(, i) = xR.Offset(, i) & "=" & vbCrLf & x & "箱+" & xR.Offset(, i) Mod [C3]
         End If
      Next
   End If
Next
End Sub

TOP

回復 51# jcchiang

您好,
請問 這個用法,為何是3列? End(3)
For Each xR In Range([b5], [b65535].End(3))

TOP

回復 52# PJChen

For Each xR In Range([b5], [b65535].End(3))
這是讓xR在Range([b5], [b65535].End(3))這個範圍內執行

If xR = "訂單" Or xR = "廠缺" Or xR = "實出數" Then
才是判斷要計算的列

TOP

回復 53# jcchiang

但我不明白End(3)的用法,3有特別意思嗎?

TOP

回復 53# jcchiang

真謝謝你,我知道用法了

TOP

回復 53# jcchiang

大大好,
理貨單II.xlsx為來源檔,BF理貨.sheet以B欄的客戶為列數
B欄的客戶對應"客戶.sheet"歸類
歸類名稱相同的,其客戶的表格全都相同
EX:
B252:B274為林口...對應歸類為"中台"
G:P的資料,B252:B274有23列
複製G252:P274的資料
打開 "公用理貨-中台.xlsx" (歸類的檔名有含"中台")
只貼值到"2.sheet" C3 (覆蓋"公用理貨-中台.xlsx"的資料)
以上是需要執行的動作

之前我都是用類似這樣的語法
            xRow = Cells(Cells.Rows.Count, "G").End(xlUp).Row
                Range("C3:L" & xRow) = "=公式"
                Range("C3:L" & xRow).Value = Range("C3:L" & xRow).Value
1) 現在要以7個歸類名稱去找複製的活動範圍
統昶A
統昶B
中台
OK

永康
得至

2) 理貨單II.xlsx B欄的客戶,計算個數作為 複製的列數依據
請教語法要怎麼寫?
資料.rar (313.11 KB)

TOP

回復 53# jcchiang
您好,
或者先從比較簡單的開始
EX:
B252:B274為林口

要如何指定複製列數,也就是自動計算 B:B="林口"的列數=23列
然後可以指定區間G252:P274成為複製的來源?

TOP

回復 57# PJChen
最近比較忙,沒時間研究

Sub ex()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
For Each a In Range("B:B")
    If a = "林口" Then d(a.Address) = d(a.Address)  '抓林口的位置,廠商自行更換
Next
Range(d.Keys()(0)).Offset(, 5).Resize(d.Count, 10).Select '選擇範圍,請自行加入複製到哪的程式
End Sub

TOP

回復 47# 准提部林

准大好,
理貨表格目前需要一個排序功能,目前以之前程式修改,可以排序,但無法依照我想要的功能排,
可否幫忙看下如何依以下需求作排序?   理貨單.rar (427.55 KB)

讓每個客戶表格,只要F欄有數字的,就依key1-F欄,key-2-L欄排序
數字由小到大,表格F欄空白者,就略過不排序(因有些客戶不需要此功能)

排序後,還會用到歸位的功能,另一程式就以S欄的數字做歸位動作,數字由小到大
  1. Sub 理貨排序()
  2. Dim R&, xR As Range, xH As Range, C%
  3. R = Cells(Rows.Count, "K").End(xlUp).Row
  4. If R <= 2 Then Exit Sub
  5. For Each xR In Range("K2:K" & R)
  6.     If xR = "品名" Then Set xH = xR(2): C = 1: GoTo 101
  7.     If xR = "合計" Then
  8.        If C = 0 Then GoTo 101
  9.        Set S = Range(xH(1, -4), xR(0, -4))
  10.        C = 0
  11.         .Cells.Sort Key1:=S, Key2:=.Columns("L"), Header:=xlNo    'Sorting無表頭
  12.     End If
  13. 101: Next
  14. End With
  15. End Sub
複製代碼

TOP

回復 59# PJChen

Sub 理貨排序()
Dim R&, xR As Range, xH As Range, C%, V&
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: V = 0: GoTo 101
    V = V + Val(xR(1, -4))
    If xR = "合計" Then
       If C = 0 Or V = 0 Then GoTo 101
       With Range(xH(1, -4), xR(0, 7))
           .Sort Key1:=.Cells(1, 1), Order1:=xlAscending, _
                 Key2:=.Cells(1, 7), Order2:=xlAscending, Header:=xlNo
       End With
       C = 0: V = 0
    End If
101: Next
End Sub
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

        靜思自在 : 我們最大的敵人不是別人.可能是自己。
返回列表 上一主題