- 帖子
- 522
- 主題
- 36
- 精華
- 1
- 積分
- 603
- 點名
- 0
- 作業系統
- win xp sp3
- 軟體版本
- Office 2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2012-12-13
- 最後登錄
- 2021-7-11
|
4#
發表於 2014-3-4 10:20
| 只看該作者
回復 3# home1913
試試看:
 - Option Base 1
- Option Explicit
- Private Sub CommandButton1_Click()
- Dim i, j, 列數, Barcode數, 原庫存量 As Integer
- Dim code1, code2, 欄名 As String
- Dim findCell, findRng As Range
-
- Barcode數 = [B1].End(xlDown).Row - 1
- '1. 插入輔助欄 欄A(手動)
-
- '2. 將 欄C 貨號合併, 且 欄A 填入遞增數列
- [C2].Resize(Barcode數, 1) = ""
- [E2].Resize(Barcode數, 1) = ""
- For i = 2 To Barcode數 + 1
- Cells(i, 1) = i
- If Left(Cells(i, 2), 1) = "w" Then
- code1 = Left(Cells(i, 2), 7)
- Else
- code2 = Left(Cells(i, 2), 6)
- Cells(i, 3) = code1 & code2
- End If
- Next
-
- '3. 按 主鍵 欄C, 次鍵 欄A 遞增排序
- [A1].Resize(Barcode數 + 1, 5).Sort _
- Key1:=Range("C1"), Order1:=xlAscending, _
- Key2:=Range("A1"), Order2:=xlAscending, _
- Header:=xlYes
-
- '4. 重新寫入公式, 防操作不小心刪掉公式
- [F3] = "=MATCH(F2,G2:G7,0)" '0 →精確查詢, 不可省略, Lookup_array 可以依任意次序排列。
- [F6] = "=MATCH(F5,H1:L1,0)" '1 →可省略, 找到等於或僅次於 lookup_value 的值, Lookup_array必須遞增排序
- '-1→不可省略, 會找到等於或大於 lookup_value 的最小值, Lookup_array必須遞減排序
- [F8] = "=INDEX(H2:L7,F3,F6)" '傳回查詢範圍, 列與欄 的交义點的值
-
- '以上三列為 庫存表固定大小 使用,
- '若 庫存表固定大小 會變動, 請改用下列五列
- ' 列數 = CStr([G1].End(xlDown).Row)
- ' 欄名 = Chr([G1].End(xlToRight).Column + 63)
- ' [F3] = "=MATCH(F2,G2:G" & 列數 & ",0)"
- ' [F6] = "=MATCH(F5,H1:" & 欄名 & "1,0)"
- ' [F8] = "=INDEX(H2:" & 欄名 & "7,F3,F6)"
-
- '5. 主程式
- i = 1
- Do
- i = i + 1
- If Cells(i, 3) = "" Then GoTo done1:
- [F5] = Left(Cells(i, 3), 7) '將Barcode存到 [F5], 供 MATCH 查詢"欄"用
- [F2] = Right(Cells(i, 3), 6) '將貨號存到 [E2], 供 MATCH 查詢"列"用
- '[F8] = 庫存表中的 庫存量
- Cells(i, 5) = [F8] - Cells(i, 4) '存量 = 原庫存量 - 銷售量
-
- '如果 貨號 重覆, 第二筆開始, 則
- If Cells(i, 3) = Cells(i + 1, 3) Then
- Do
- i = i + 1
- If Cells(i, 3) = "" Then GoTo done1:
- Cells(i, 5) = Cells(i - 1, 5) - Cells(i, 4) '存量 = 上一筆存量 - 銷售量
- Loop Until i > Barcode數 Or Cells(i, 3) <> Cells(i + 1, 3)
- End If
- Loop Until i > Barcode數
-
- done1:
- '6. 按原序排序
- [A1].Resize(Barcode數 + 1, 5).Sort _
- Key1:=Range("A1"), Order1:=xlAscending, _
- Header:=xlYes
- End Sub
複製代碼 |
|