iT邦幫忙

0

vba 搜尋比對 填入值

https://ithelp.ithome.com.tw/upload/images/20200508/201217984dFtm6kQKB.png
https://ithelp.ithome.com.tw/upload/images/20200508/20121798Eh5IjjmOQ1.png
https://ithelp.ithome.com.tw/upload/images/20200508/20121798V2XJtntTNE.png
想請各位大大協助我這個vba新手
目的是
在圖1上面的依照品名 儲存到圖2的品名之下 並以日期區分
但測試是有成功 但位置完全不對 不曉得哪裡做錯了 再請麻煩拜託拜託

看更多先前的討論...收起先前的討論...
那正確的位置應該是哪裡?
yes00999 iT邦新手 5 級 ‧ 2020-05-08 16:20:13 檢舉
圖2是 示意圖 要找尋到A產品 填入圖2裡面 A產品在圖1的日期以及批號
pinglam iT邦新手 5 級 ‧ 2020-05-08 16:38:35 檢舉
為什麼我只看到你在做while loop generate 日子,但是find()和call()沒用while loop去做,你是只想分類row1的數據嗎?
yes00999 iT邦新手 5 級 ‧ 2020-05-08 16:52:08 檢舉
@P大 如果用FIND 跟CALL 會比較快嗎 因為我是翻查網路拼拼湊湊的 現在真的有點毫無頭緒 我要的是 依照品名分類 使用日期分別鍵入批號
pinglam iT邦新手 5 級 ‧ 2020-05-08 17:32:37 檢舉
你下面的code 用while loop 包著,還有用變量去控制你find的值(rn = s1 rows (變量).. 和 rd = s1 .Columns (變量) ...)這樣應該就可以了,還是你提供source code,不然我們幫你還要打一遍...
yes00999 iT邦新手 5 級 ‧ 2020-05-08 17:35:49 檢舉
Sub 巨集1()



n1 = Sheets("stock").Columns(2) '品名
n2 = Sheets("stock").Columns(4) '批號
n3 = Sheets("批號紀錄").Columns(2) '最後日期

On Error Resume Next
Set s1 = Sheets("批號紀錄")
r = s1.Columns(1).Find("*", LookIn:=xlValues, SearchDirection:=xlPrevious).Row '找出最後一個日期列值
If r <= 1 Or r = "" Then s1.[a2] = Now(): r = 2 '假如都沒有日期 會從今天開始逐列增加

While DateValue(s1.Cells(r, 1)) <= DateValue(Now()) + 7 '自動填入1周後的日期
s1.Cells(r + 1, 1) = s1.Cells(r, 1) + 1
r = r + 1
Wend

rn = 0: rd = 0
rn = s1.Rows(1).Find(n1, LookIn:=xlValues, lookat:=xlWhole, SearchDirection:=xlPrevious).Column '找到同名欄值 (完全比對)
rd = s1.Columns(1).Find(DateValue(n2), LookIn:=xlValues, lookat:=xlWhole, SearchDirection:=xlPrevious).Row '找到同日列值 (完全比對)
If rn = 0 Then MsgBox ("查無品名" & n1): Exit Sub '姓名錯誤
If rd = 0 Then MsgBox ("查無日期" & n2): Exit Sub '日期錯誤
s1.Cells(rd, rn) = n3 '將效率值 放入查出來的位置

End Sub

1 個回答

0
paicheng0111
iT邦高手 1 級 ‧ 2020-05-08 18:06:30
最佳解答

如果你在圖1可以加上一欄helper的話,根本不用寫VBA。
用INDEX+MATCH就可以了。

看更多先前的回應...收起先前的回應...
yes00999 iT邦新手 5 級 ‧ 2020-05-11 09:43:30 檢舉

感謝p大 的確是解決了現況 但是因為我要每一天的的批號紀錄都要留存 有無辦法可解

不懂

yes00999 iT邦新手 5 級 ‧ 2020-05-11 10:30:07 檢舉

在您圖片中的a-d欄位 每天都會更新 而且沒有邏輯性的 更新的動作是刪除原先的 在貼上新的 所以這樣變成index+match會沒辦法紀錄之前過往紀錄

建議你可以用:選擇性貼上/值

yes00999 iT邦新手 5 級 ‧ 2020-05-12 08:37:29 檢舉

感謝P大幫忙 這邊先選你為正解哦 目前現況是還是要寫vba才能成立 貼上還是要覆蓋掉原本的

我要發表回答

立即登入回答