Board logo

標題: [發問] excel報表跑巨集呈現Delay批與虛帳 [打印本頁]

作者: v03586    時間: 2015-10-1 00:57     標題: excel報表跑巨集呈現Delay批與虛帳

小弟又來麻煩各位高手了....
之前提供的都是前輩已經執行完的EXCEL巨集,再去執行我所需要的內容
這次是公司自行產生的報表,要去執行我要的內容



Excel comply資料表作為按鈕執行巨集用,執行結果呈現在Result資料表上
因為公司的報表上的List 將近3千多筆...... 提供的EXCEL 範例 刪除了大部分 保留的舉利用
[attach]22121[/attach]
需求內容 依照報表上執行巨集,找尋delay批虛帳

呈現虛帳表示方式
J欄位是投料量,M欄位到BM欄位則是前段製程欄位,所以當M欄位到BM欄位的數量大於J欄位的數量表示有虛帳

M欄位+到BM欄位大於J欄位時則是虛帳
則呈現在Virtual Result資料表上 反綠做為區隔
則表達方式如圖
[attach]22122[/attach]

Delay批定義則是,DATE TIME 投線後3天要出前段
所以公司的制式報表,欄位(X,Y,Z,AA,AB,AC,AG,AH,AN,AO,AT,AU,AV,AW)上還有數字,代表Delay批,
則呈現欄位依樣在Delay Result資料表上
我的構想是在Delay Result資料表上AE欄位是執行時間,依照執行時間去筆對公司制式報表上的DATA TIME 只要超過3天
就秀出資料表上的資訊,但如果有別的方式可以判斷執行的時間與報表上的時間是超過3天以上就顯示
如圖
[attach]22123[/attach]




以上兩種功能,不知道PKG Type 能不能判斷的出來  能帶在A欄位...

[attach]22124[/attach]
作者: v03586    時間: 2015-10-1 21:49

回復 1# v03586


    TO 版主...不好意思 這篇發錯區了
應該放在EXCEL 程式區才對...不知可否協助換區,或者刪除此篇讓我重新發文
發錯區造成版主不便深感抱歉...
作者: 准提部林    時間: 2015-10-2 22:26

本帖最後由 准提部林 於 2015-10-2 22:28 編輯

不好寫,看得眼花∼∼
1.欄位少了〔QVS〕欄,請補上;〔範例報表〕M:W應共11個欄位
2.〔日期〕欄或其他欄位屬〔文字格式〕者,請事先設定,否則資料格式會改變,
  另,〔日期〕沒有年份,遇跨年比對會有問題,目前先預判〔INPUT〕日期不會大于〔今日〕_即未來日!
3.Select Case 用的是〔欄位〕區別,自行去認各不同資料群組的欄號區域
4.程式碼看起來有點複雜,但肯定都是基本語法,請自行參酌視實際修改,恕不再註解及說明
 
  1. Sub 執行()
  2. Dim Arr, Brr(0, 1 To 32), j&, Jm%, k&, Km%, TT$, QD, QA, QB
  3. Call 清除
  4. Dim X As New Application
  5. With X.Workbooks.Open(ThisWorkbook.Path & "\範例報表.xls", ReadOnly:=True)
  6.      Arr = .Sheets(1).UsedRange.Columns("A:BM").Cells
  7.      .Close 0
  8. End With
  9. For j = 9 To UBound(Arr)
  10.   If Arr(j, 1) = "PKG Type :" Then TT = Arr(j, 4)
  11.   If Arr(j, 1) Like "#######" = False Then GoTo 101
  12.   
  13.   QD = Date
  14.   If IsDate(Arr(j, 9)) Then QD = DateValue(Arr(j, 9))
  15.   If QD > Date Then QD = DateValue(Year(Date) - 1 & "/" & Arr(j, 9))
  16.   If Date - QD > 3 Then QD = 1 Else QD = 0
  17.  
  18.   QA = 0: QB = 0: Km = 1: Brr(0, 1) = TT: Brr(0, 32) = Date
  19.   For k = 1 To UBound(Arr, 2)
  20.     Select Case k
  21.       Case 1, 3, 4, 9, 10
  22.         Jm = 1
  23.       Case 13 To 23
  24.         Jm = 1: QA = QA + Val(Arr(j, k))
  25.       Case 30 To 32, 35 To 39, 42 To 45, 50 To 65
  26.         QA = QA + Val(Arr(j, k))
  27.       Case 24 To 29, 33, 34, 40, 41, 46 To 49
  28.         Jm = 1: QA = QA + Val(Arr(j, k)): QB = QB + Val(Arr(j, k))
  29.     End Select
  30.     If Jm > 0 Then Km = Km + 1: Brr(0, Km) = Arr(j, k): Jm = 0
  31.   Next k
  32.   If QA > Arr(j, 10) Then ['Virtual Result'!A65536].End(xlUp)(2).Resize(1, 31) = Brr
  33.   If QB > 0 And QD = 1 Then ['Delay Result'!A65536].End(xlUp)(2).Resize(1, 32) = Brr
  34. 101: Next j
  35. Beep
  36. End Sub

  37. '=======================================
  38. Sub 清除()
  39. Sheets("Virtual Result").UsedRange.Offset(1, 0).ClearContents
  40. Sheets("Delay Result").UsedRange.Offset(1, 0).ClearContents
  41. End Sub
複製代碼

作者: v03586    時間: 2015-10-3 10:13

回復 3# 准提部林


    感謝版大的支援以及幫我把基本架構建設好,讓小弟能自己去延生!我一開始都認為我的技術瓶頸在PKG type 因為沒有固定位置!
我也覺得我把說明打得太複雜了...版大還看得懂真是厲害!!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)