我知道用INDEX 加MATCH 可以找到值 但我希望依名字跟日期對應到後值後,直接把原值改掉,請問有辦法嗎 或寫VBA
以下表為依居直接把上表改掉 有新班別直接把原班別改掉
我知道用INDEX
來杯拿鐵大大你好
很感謝你的回答
但我還是VBA新手,真的看不太懂
可否請你逐行多打一點註解
我試著做一些備註
但不懂那個邏輯,想套用都難
Sub 換班()
'換班表A23:H28 ,原班表A14:M20(D14:M20日期,B16:B20)
'提出人want答應人 hire
'want(日期,姓名,原班別)
'宣告dataR = 24
dataR = 24
'A16儲存格
last = Range("A16").End(xlDown).Row
'Cells(列,欄)(24,1)
'提出人WANT=陣列(24,1)(24,2)(24,3)
'答應人hire=陣列(24,5)(24,6)(24,7)
Do While Cells(dataR, 1).Value <> ""
want = Array(Cells(dataR, 1), Cells(dataR, 2), Cells(dataR, 3))
hire = Array(Cells(dataR, 5), Cells(dataR, 6), Cells(dataR, 7))
For i = 16 To last
'假設名字格值=
If Cells(i, 2).Value = want(1) Then
want(1) = Cells(i, 1)
End If
If Cells(i, 2).Value = hire(1) Then
hire(1) = Cells(i, 1)
End If
Next
'C15格偏移
Range("C15").Offset(hire(1), hire(0)).Select
Range("C15").Offset(hire(1), hire(0)).Value = want(2)
Range("C15").Offset(want(1), want(0)).Select
Range("C15").Offset(want(1), want(0)).Value = hire(2)
dataR = dataR + 1
Loop
End Sub
目前知道就就怎麼多,可否請您多打一點註解
這是示範請記得修改
Sub 換班()
'換班表A23:H28 ,原班表A14:M20(D14:M20日期,B16:B20)
'提出人want答應人 hire
'want提出人=陣列(換班日期,提出人姓名,提出人班表)
'hire答應人=陣列(換班日期,答應人姓名,答應人班表)
last = Range("A16").End(xlDown).Row 'A16到表格底端(確認員工人數
dataR = 24 '換班表第一列
sta = "C15"
比較簡單作法改上面三列參數
last:Range("A16")改成你原班表「王大明」位置
dataR = 24 改成你換班表第一列列數(表頭不算)
sta = "C15"改成你原班表「星期」位置
Do While Cells(dataR, 1).Value <> "" '不斷執行程式直到空值
'儲存換班表第n列
want = Array(Cells(dataR, 1), Cells(dataR, 2), Cells(dataR, 3))
hire = Array(Cells(dataR, 5), Cells(dataR, 6), Cells(dataR, 7))
'把員工姓名改成員工編號
'hire答應人=陣列(換班日期,答應人姓名,答應人班表)
For i = 16 To last
If Cells(i, 2).Value = want(1) Then
want(1) = Cells(i, 1) '
End If
If Cells(i, 2).Value = hire(1) Then
hire(1) = Cells(i, 1)
End If
Next
'從C15往下hire(1)列,往右hire(0)列,改成提出人班表
'員工編號是往下排序,所以會移動到答應人同列
'而日期則是往右排序,所以會移動到跟日期同欄
Range(sta).Offset(hire(1), hire(0)).Value = want(2)
Range(sta).Offset(want(1), want(0)).Value = hire(2)
dataR = dataR + 1 '換班表下一列
Loop
End Sub