Board logo

標題: [發問] EXCEL是否可自動將值帶入數量&日期 [打印本頁]

作者: abc9gad2016    時間: 2016-5-18 22:23     標題: EXCEL是否可自動將值帶入數量&日期

[attach]24311[/attach]
如圖,希望由上面的備註.xls的C欄&L欄,用A欄去比對本文.xls中的數量與日期,將其帶入各欄位中
例如5月20日:日期則包含5/20~5/27的所有資料都帶入數量&日期中

不知道版上老師們是否有解法可教學,小弟對VBA完全不熟,一般EXCEL函數好像也沒辦法達到這個目的><

[attach]24312[/attach]
作者: luhpro    時間: 2016-5-18 22:44

本帖最後由 luhpro 於 2016-5-18 22:49 編輯

回復 1# abc9gad2016

看不懂你的邏輯耶.

GVHMCWY00 在 105-06-08 的資料是依據什麼邏輯要放在 5 月 27 日 的欄位內?
除了日期外的其他數字哪些是要帶入或是計算的也看不出來,
難道只要帶入 1 個數字,
帶入後其他數字不會有變化(不需要計算)嗎?

某些判斷的依據不能隨意拿掉,
否則無從判斷起.
是否能再敘述清楚一些?

建議至少要舉例 3 筆 以上有代表性的資料,
模擬實際帶入的原因或方式並加以說明,

例如找到哪個(或是遍歷所有)資料,
依據甚麼邏輯或條件,
所以要複製到哪裡,
哪些數字要怎麼計算...等等.
作者: abc9gad2016    時間: 2016-5-19 10:38

回復 2# luhpro

Hi大大,GVHMCWY00應該是要放在6/3那週,因為我只會很笨的用本文C欄去VLOOKUP備註內的C欄日期跟L欄加總未交

我是先把他全部V到5/20那週,在手動去調整週別,但是發現資料太多這樣做有問題>"<
作者: luhpro    時間: 2016-5-19 22:26

回復 3# abc9gad2016
試試看:
  1. Sub nn()
  2.   Dim iCol%
  3.   Dim lRC&, lRow&, lRows&
  4.   Dim sPath$, sStr$
  5.   Dim bNFind As Boolean, bCor As Boolean
  6.   Dim dDte As Date
  7.   Dim vdPdt, vdDte
  8.   Dim wbSou As Workbook, wsSou As Worksheet, wsTar As Worksheet
  9.   
  10.   sPath = ThisWorkbook.Path
  11. ChDrive sPath
  12. ChDir sPath
  13.   Set vdPdt = CreateObject("Scripting.Dictionary")
  14.   Set vdDte = CreateObject("Scripting.Dictionary")
  15.   Set wsTar = Workbooks("本文.xls").Sheets(1)
  16.   
  17.   bNFind = True
  18.   For Each wbSou In Workbooks
  19.     If wbSou.Name = "備註.xls" Then
  20.       bNFind = False
  21.       Exit For
  22.     End If
  23.   Next
  24.   
  25.   If bNFind Then
  26.     Set wsSou = Workbooks.Open("備註.xls").Sheets(1)
  27.   Else
  28.     Set wsSou = wbSou.Sheets(1)
  29.   End If
  30.    
  31.   With wsTar
  32.     .Activate
  33.     lRC = 3
  34.     While .Cells(lRC, 3) <> ""
  35.       vdPdt(CStr(.Cells(lRC, 3))) = lRC
  36.       lRC = lRC + 1
  37.     Wend
  38.     lRows = lRC ' 記錄最後列號
  39.    
  40.     lRC = 3
  41.     bCor = True
  42.     dDte = #5/20/2016#
  43.     While lRC <= Columns.Count - 7
  44.       If Weekday(dDte) = 6 Then
  45.         lRC = lRC + 4
  46.         With .Cells(1, lRC)
  47.           With .Offset(1).Offset(, 1)
  48.             .Value = "數量"
  49.             .Interior.ColorIndex = 35
  50.           End With
  51.           With .Offset(1).Offset(, 2)
  52.             .Value = "日期"
  53.             .Interior.ColorIndex = 35
  54.           End With
  55.           .Resize(, 4).Merge
  56.           .Value = dDte
  57.           .NumberFormat = "m" & Chr(34) & "月" & Chr(34) & "d" & Chr(34) & "日" & Chr(34) & ";@"   ' m"月"d"日";@
  58.           If bCor Then .Resize(Rows.Count, 4).Interior.ColorIndex = 35
  59.           bCor = Not bCor
  60.         End With
  61.         vdDte(CStr(dDte)) = lRC
  62.       Else
  63.         vdDte(CStr(dDte)) = lRC
  64.       End If
  65.       dDte = dDte + 1
  66.     Wend
  67.   End With
  68.   
  69.   With wsSou
  70.     lRC = 8
  71.     While .Cells(lRC, 1) <> ""
  72.       sStr = CStr(.Cells(lRC, 1))
  73.       lRow = vdPdt(sStr)
  74.       If lRow = 0 Then
  75.         wsTar.Cells(lRows, 3) = sStr
  76.         vdPdt(sStr) = lRows
  77.         lRow = lRows
  78.         lRows = lRows + 1
  79.       End If
  80.       sStr = .Cells(lRC, 3)
  81.       sStr = Left(sStr, 3) + 1911 & "/" & CInt(Mid(sStr, 5, 2)) & "/" & CInt(Right(sStr, 2)) ' 2016/6/1
  82.       iCol = vdDte(sStr) + 1
  83.       If iCol <> 0 Then
  84.         wsTar.Cells(lRow, iCol) = .Cells(lRC, 9) ' 數量
  85.         wsTar.Cells(lRow, iCol + 1) = .Cells(lRC, 3) ' 日期
  86.       End If
  87.       lRC = lRC + 1
  88.     Wend
  89.   End With
  90. End Sub
複製代碼
[attach]24323[/attach]
作者: abc9gad2016    時間: 2016-5-21 10:23

回復 4# luhpro

不好意思,我用了大大給的巨集去RUN,轉了很久,最後資料還是沒有變動
不知道是不是我太笨了,對VBA一竅不通不知道如何使用
作者: luhpro    時間: 2016-5-21 21:07

回復 5# abc9gad2016
你是用你提供的檔案來跑的嗎?(PS. 檔名要完全相同, 且要放在同一個目錄下)
我是以你提供的檔案內容來想程式,
實際跑過沒問題才貼出來的喔.
作者: abc9gad2016    時間: 2016-5-22 11:52

回復 6# luhpro

大大,我的步驟將你的本文.zip打開,再把備註丟進去本文資料夾

之後開本文的檔案,打開巨集sheet.nn,跑出來檔案沒有動,是我哪邊做錯了嗎

[attach]24337[/attach]
作者: luhpro    時間: 2016-5-26 22:16

本帖最後由 luhpro 於 2016-5-26 22:23 編輯

回復 7# abc9gad2016
執行前 :
[attach]24357[/attach]

執行後 :
[attach]24358[/attach]

你參考一下上方的附圖內容,
我是以 本文.xls 檔案中的 C 欄(編號) 與 日期(從 G 欄開始) 做 資料標的 位置的基準,
(5月20日 以前的資料會跑到 A, B 欄, 這部分我沒做針對處理, 請直接忽略結果)
因為你的 本文.xls 與 備註.xls 中的資料有滿多的差異,
所以實際上會有一堆新增編號出現,
它們都是新增到最底下,
你參考看看.

註 :
你可以在第 69 行下中斷點, (前面都是建立索引, 此行之後才真正放入資料)
然後依次按 F8 單步執行確認結果.
作者: abc9gad2016    時間: 2016-5-30 19:14

回復 8# luhpro

萬分的感謝前輩指導!




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