- 帖子
- 522
- 主題
- 36
- 精華
- 1
- 積分
- 603
- 點名
- 0
- 作業系統
- win xp sp3
- 軟體版本
- Office 2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2012-12-13
- 最後登錄
- 2021-7-11
|
18#
發表於 2016-1-11 17:47
| 只看該作者
- ' 本VBA請放在Sheet(1), 不要放在 Module1
- ' 下列兩列 ******** 之間請先調調好, 再執行本VBA
- Sub TEST3()
- Dim I As Integer, J As Integer, Col As Integer
- Dim arST, arET, arKind
- ''***********************
- Dim ndx(10) As Integer, cnt(10) As Integer '多寫一點備用, 沒用到也沒關係
- arKind = Array("X", "O", "V", "◎", "*") '可增減, 沒用到也沒關係
- '符號排列順序, 與將來的輸出順有關
- arST = Array("17:20", "17:21", "17:22", "17:23") '起始時間, 最多只能比"V,O,X,◎,*"少1
- arET = Array("19:20", "19:21", "19:22", "19:23") '結束時間, 最多只能比"V,O,X,◎,*"少1
- ''***********************
- Col = 8 'H=8, 姓名輸出位置在 [H13]
-
- '1. 完全清除輸出區(包含內容、格式等)
- [H12:IV15].Clear
-
- '2. 重建時間
- For I = 0 To UBound(arKind) - 1
- cnt(I) = Application.CountIf(Range("C2", "C" & [C65536].End(xlUp).Row), arKind(I))
- If cnt(I) > 0 Then
- ndx(I) = Col
- Col = Col + cnt(I)
- If I <> UBound(arKind) - 2 Then
- For J = 13 To 15
- Cells(J, Col).Resize(1, 2).Merge '時間格合併
- Cells(J, Col).HorizontalAlignment = xlCenter
- Next
- Cells(13, Col) = arST(I) '起始時間在第13列
- Cells(14, Col) = "~" '"~" 號在第14列
- Cells(14, Col).Orientation = -90 '文字方向→右轉90度(錄來的)
- Cells(15, Col) = arET(I) '結束時間在第15列
- '如需其他格式, 請自行錄製再選用貼上(無須全部照抄)
- End If
- Col = Col + 2
- End If
- Next
-
- '3. 開始輸出姓名
- For Each E In Range("B2", "B" & [B65536].End(xlUp).Row)
- If E.Offset(0, 1) = "" Then GoTo Next1:
- For I = 0 To UBound(arKind) - 1
- If E.Offset(0, 1) = arKind(I) Then
- Cells(12, ndx(I)) = arKind(I) '顯示標記(因有些符號你不想用, 故加註才會清楚), 可註解掉
- Cells(13, ndx(I)) = E
- Cells(13, ndx(I)).Resize(3, 1).Merge '姓名格合併
- Cells(13, ndx(I)).Orientation = xlVertical '文字方向→垂直排列
- ndx(I) = ndx(I) + 1
- GoTo Next1:
- End If
- Next
- Next1:
- Next
- End Sub
複製代碼 回復 17# 074063 |
|