標題:
[發問]
請問如何自動列出資料庫資料
[打印本頁]
作者:
urlsyu
時間:
2020-2-10 13:57
標題:
請問如何自動列出資料庫資料
本帖最後由 urlsyu 於 2020-2-10 14:00 編輯
請問大大,假設我有資料庫如下
想要將其轉置成報表內格式後A4印出,方便現場人員核對進出貨
例如我想調出某批號的規格0~6
這需要如何製作?謝謝
作者:
hcm19522
時間:
2020-2-10 16:13
本帖最後由 hcm19522 於 2020-2-10 16:14 編輯
B2 右拉 下拉{=IFERROR(INDEX(資料庫!$E:$E,SMALL(IF((OFFSET($A1,MATCH(1=1,$A2:$A999<>"",),)="規格"&資料庫!$D$2:$D$999)*(資料庫!$C$2:$C$999=$B$1),ROW($2:$999)),(ROW()-LOOKUP(1,0/($A$1:$A1<>""),ROW($1:1)))*10-10+COLUMN(A1))),"")
B2複製到各數量 下一格 右拉 下拉
作者:
urlsyu
時間:
2020-2-10 17:52
大大你好,我貼上以後是空白顯示
我之前爬文也是知道用OFFSET語法
但卡在如何判斷資料庫批號跟規格
請問你提供判斷規格依據是在那?
大感謝
作者:
hcm19522
時間:
2020-2-10 21:31
回復
3#
urlsyu
數組公式 :複製公式 不含 "=" ,貼上後加 "=" ;最前 "{" 代表 shift+ctrl+enter 三鍵一起按所產生 ,非程式裡面
作者:
urlsyu
時間:
2020-2-10 22:15
本帖最後由 urlsyu 於 2020-2-10 22:19 編輯
回復
4#
hcm19522
大大你好
爬文爬的頭殼暈暈
成功了
大大大感恩:L
作者:
hcm19522
時間:
2020-2-11 14:42
回復
5#
urlsyu
https://blog.xuite.net/hcm19522/twblog/588890415
作者:
urlsyu
時間:
2020-2-11 22:17
回復
6#
hcm19522
請問大大
加入出貨資料後,想製作庫存資料,要如何判斷規格欄?
感恩~
[attach]31699[/attach]
作者:
hcm19522
時間:
2020-2-12 10:30
回復
7#
urlsyu
庫存 C3:I4=SUMIFS(資料庫!$E:$E,資料庫!$C:$C,$B3,資料庫!$D:$D,C$2)-SUMIFS(出貨!$E:$E,出貨!$C:$C,$B3,出貨!$D:$D,C$2)
作者:
urlsyu
時間:
2020-2-16 14:38
回復
8#
hcm19522
再次感謝大大
最後想將庫存只列出尚有庫存批號如檔案所列,研究好幾天寫不出來:dizzy:
[attach]31730[/attach]
感恩感恩
作者:
hcm19522
時間:
2020-2-16 16:42
回復
9#
urlsyu
庫存A3 下拉{=IFERROR("A000"&SMALL(IF(SUMIF(資料庫!B:B,"A000"&ROW($1:$9)-1,資料庫!$D:$D)-SUMIF(出貨!$C:$C,"A000"&ROW($1:$9)-1,出貨!$E:$E),ROW($1:$9)-1),ROW(A1)),"")
庫存B3 右拉 下拉=IF($A3="","",SUMIFS(資料庫!$D:$D,資料庫!$B:$B,$A3,資料庫!$C:$C,B$2)-SUMIFS(出貨!$E:$E,出貨!$C:$C,$A3,出貨!$D:$D,B$2))
作者:
urlsyu
時間:
2020-2-16 22:06
回復
10#
hcm19522
大大你好
庫存A3 下拉{=IFERROR("A000"&SMALL(IF(SUMIF(資料庫!B:B,"A000"&ROW($1:$9)-1,資料庫!$D:$D)-SUMIF(出貨!$C:$C,"A000"&ROW($1:$9)-1,出貨!$E:$E),ROW($1:$9)-1),ROW(A1)),"")
這句寫法有個問題,萬一我的編號超過十筆(如:A0011)就無法使用
謝謝你
作者:
hcm19522
時間:
2020-2-17 09:41
本帖最後由 hcm19522 於 2020-2-17 09:44 編輯
回復
11#
urlsyu
=IFERROR("A"&TEXT(SMALL(IF(SUMIF(資料庫!B:B,"A"&TEXT(ROW($1:$99)-1,"0000"),資料庫!$D:$D)-SUMIF(出貨!$C:$C,"A"&TEXT(ROW($1:$99)-1,"0000"),出貨!$E:$E),ROW($1:$99)-1),ROW(A1)),"0000"),"")
作者:
urlsyu
時間:
2020-2-17 21:13
回復
12#
hcm19522
大大安安~
剛剛試過,不能正確顯示
[attach]31738[/attach]
大大感恩~
作者:
hcm19522
時間:
2020-2-18 10:47
(輔助 取批號不重複) 資料庫F1 下拉{=INDEX(B:B,MIN(IF((COUNTIF(F$1:F1,B$2:B$999)=0)*(B$2:B$999<>""),ROW($2:$999),4^8)))&""
庫存A3 下拉 {=IFERROR(INDEX(資料庫!F:F,SMALL(IF(SUMIF(資料庫!B:B,資料庫!F$2:F$99,資料庫!$D:$D)-SUMIF(出貨!$C:$C,資料庫!F$2:F$99,出貨!$E:$E),ROW($2:$99)),ROW(A1))),"")
作者:
Andy2483
時間:
2023-12-14 14:43
謝謝論壇,謝謝各位前輩
後學藉此帖以1#範例練習陣列與字典,學習方案如下,請各位前輩指教
資料表:
[attach]37128[/attach]
結果表:
[attach]37129[/attach]
Option Explicit
Sub TEST()
Dim Brr, Crr(10, 11), Z, A, i&, R&, C%, T$, T3$, T4$, xR
'↑宣告變數
'Application.ScreenUpdating = False
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是 字典
Brr = Range([資料庫!E2], [資料庫!A65536].End(3))
'↑令Brr變數是帶入範圍儲存格值的二維陣列
For i = 1 To UBound(Brr)
'↑設順迴圈!i從1到Brr陣列縱向最大索引列號
T3 = Trim(Brr(i, 3)): T4 = Trim(Brr(i, 4))
'↑令T3變數是i迴圈列第3欄Brr陣列值,令T4變數是i迴圈列第4欄Brr陣列值
If T3 = "" Or T4 = "" Then GoTo i01 Else T = T3 & "|" & T4
'↑如果規格或批號是空的!就跳到標示 i01位置繼續執行,
'否則就令T變數是以"|"符號連接T3與T4變數組成的新字串
A = Z(T): R = Z(T & "/r"): C = Z(T & "/c")
'↑令A變數是以T變數查Z字典回傳item值,
'令R變數是以T變數連接"/r"組成的新字串,查Z字典回傳item值
'令C變數是以T變數連接"/c"組成的新字串,查Z字典回傳item值
If Not IsArray(A) Then A = Crr: A(0, 0) = "批號": A(0, 1) = T3: R = 1: Z(T & "/規格") = "規格" & T4
'↑如果A變數不是陣列!就令A變數是Crr空陣列,令最左上角陣列值是 "批號"字串,
'令0列/1欄陣列值是T3變數(批號),令R變數是 1
'令T變數連接 "/規格"組成的新字串為key,item是 "規格"字串連接T4變數組成的新字串,納入Z字典中
C = C + 1
'↑令C變數累加 1
If C = 11 Then C = 1: R = R + 1
'↑如果C變數是 11,就令C=1,R+1 (陣列換行放結果值)
A(R, C) = Val(Brr(i, 5))
'↑令重量值放入陣列裡
Z(T & "/r") = R: Z(T & "/c") = C: Z(T) = A
'↑令列數與欄數紀錄在字典中
'令A二維陣列放回字典中
i01: Next
Sheets("報表").UsedRange.EntireRow.Delete
'↑令舊的結果刪除
Set xR = [報表!A1]
'↑令xR變數是物件 ("報表"工作表的[A1]儲存格)
For Each A In Z.KEYS
'↑設逐項迴圈!令A變數是 Z字典裡的key之一
If InStr(A, "/") Then GoTo A01 Else R = Z(A & "/r")
'↑如果A變數裡有包含"/"字元!就跳到標示A01位置繼續執行,否則就令R變數取出紀錄在Z字典的列數
With xR.Resize(R + 3, 12)
'↑以下是關於結果範圍儲存格的程序
.Value = Z(A)
'↑令該範圍儲存格值,以A變數查Z字典回傳的陣列值寫入
.Cells(R + 3, 1) = Z(A & "/規格"): .Cells(R + 3, 2) = "數量": .Cells(R + 3, 4) = "小計:"
'↑令該範圍儲存格最後列1,2,4欄儲存格寫入字串
.Cells(R + 3, 3) = "=COUNT(" & xR.Resize(R, 12).Offset(1).Address & ")"
'↑令該範圍儲存格最後列第3欄儲存格寫入 非空格的儲存格數公式=COUNT()
.Cells(R + 3, 5) = "=SUM(" & xR.Resize(R, 12).Offset(1).Address & ")"
'↑令該範圍儲存格最後列第5欄儲存格寫入 儲存格數值總和公式=SUM()
For i = 7 To 10: .Borders(i).Weight = 4: Next
'↑令該儲存格範圍最外圍設為粗格線
End With
Set xR = xR(R + 4, 1)
'↑令xR變數是下個結果範圍的第1格儲存格
A01: Next
End Sub
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)