問題:http://club.excelhome.net/thread-1394832-1-1.html
重點方法:application.inputbox(prompt:="",type:=)
解法:
Sub test()
Dim arr, brr, crr
'樓主要求班表排休是一禮拜一次,他只需要該禮拜有排休的人,因此設定用inputbox挑選範圍
'inputbox的type:=8變數是指選取的範圍會是range物件
'將用inputbox選取出來的物件賦予給Arr陣列
arr = Application.InputBox(prompt:="請選擇加班區域:", Type:=8)
'將個員工的名字賦予給Crr,方便後面用迴圈將名字賦予給Brr
crr = Range("D2:D" & [d65535].End(3).Row)
'要先redim brr的範圍,否則下方brr跑迴圈時會超出陣列索引範圍
ReDim brr(1 To 1000, 1 To 2)
'先將變數x賦值1,下方跑if條件式時,若條件達成會自動透過x = x + 1 增加brr的列數
x = 1
'用ubound抓出inputbox挑選的陣列的列數及欄數,跑迴圈
'此時arr(1, j)為日期,arr(2,j)為星期幾,然後當arr(i,j) = "調休"關鍵字時
'會將arr(1,j)的日期賦予給brr(x,2),然後名字crr(j,1)會賦予給brr(x,1) => 要注意crr(j,1)要與arr(j,i)的列數是相符的
'否則會回傳錯的名字,最後條件達成後x = x +1,將brr的列數資料向下一列。
For i = 1 To UBound(arr, 2)
For j = 1 To UBound(arr, 1)
If arr(j, i) = "調休" Then
brr(x, 1) = crr(j, 1)
brr(x, 2) = arr(1, i)
x = x + 1
End If
Next j
Next i
[BC4].Resize(UBound(brr, 1), 2) = brr
End Sub
留言列表