close

問題: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

arrow
arrow
    文章標籤
    VBA Inputbox 數列
    全站熱搜

    chrisovo 發表在 痞客邦 留言(0) 人氣()