標題:
[發問]
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
試試看:
Sub nn()
Dim iCol%
Dim lRC&, lRow&, lRows&
Dim sPath$, sStr$
Dim bNFind As Boolean, bCor As Boolean
Dim dDte As Date
Dim vdPdt, vdDte
Dim wbSou As Workbook, wsSou As Worksheet, wsTar As Worksheet
sPath = ThisWorkbook.Path
ChDrive sPath
ChDir sPath
Set vdPdt = CreateObject("Scripting.Dictionary")
Set vdDte = CreateObject("Scripting.Dictionary")
Set wsTar = Workbooks("本文.xls").Sheets(1)
bNFind = True
For Each wbSou In Workbooks
If wbSou.Name = "備註.xls" Then
bNFind = False
Exit For
End If
Next
If bNFind Then
Set wsSou = Workbooks.Open("備註.xls").Sheets(1)
Else
Set wsSou = wbSou.Sheets(1)
End If
With wsTar
.Activate
lRC = 3
While .Cells(lRC, 3) <> ""
vdPdt(CStr(.Cells(lRC, 3))) = lRC
lRC = lRC + 1
Wend
lRows = lRC ' 記錄最後列號
lRC = 3
bCor = True
dDte = #5/20/2016#
While lRC <= Columns.Count - 7
If Weekday(dDte) = 6 Then
lRC = lRC + 4
With .Cells(1, lRC)
With .Offset(1).Offset(, 1)
.Value = "數量"
.Interior.ColorIndex = 35
End With
With .Offset(1).Offset(, 2)
.Value = "日期"
.Interior.ColorIndex = 35
End With
.Resize(, 4).Merge
.Value = dDte
.NumberFormat = "m" & Chr(34) & "月" & Chr(34) & "d" & Chr(34) & "日" & Chr(34) & ";@" ' m"月"d"日";@
If bCor Then .Resize(Rows.Count, 4).Interior.ColorIndex = 35
bCor = Not bCor
End With
vdDte(CStr(dDte)) = lRC
Else
vdDte(CStr(dDte)) = lRC
End If
dDte = dDte + 1
Wend
End With
With wsSou
lRC = 8
While .Cells(lRC, 1) <> ""
sStr = CStr(.Cells(lRC, 1))
lRow = vdPdt(sStr)
If lRow = 0 Then
wsTar.Cells(lRows, 3) = sStr
vdPdt(sStr) = lRows
lRow = lRows
lRows = lRows + 1
End If
sStr = .Cells(lRC, 3)
sStr = Left(sStr, 3) + 1911 & "/" & CInt(Mid(sStr, 5, 2)) & "/" & CInt(Right(sStr, 2)) ' 2016/6/1
iCol = vdDte(sStr) + 1
If iCol <> 0 Then
wsTar.Cells(lRow, iCol) = .Cells(lRC, 9) ' 數量
wsTar.Cells(lRow, iCol + 1) = .Cells(lRC, 3) ' 日期
End If
lRC = lRC + 1
Wend
End With
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/)