- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
5#
發表於 2023-2-21 11:27
| 只看該作者
本帖最後由 Andy2483 於 2023-2-21 11:30 編輯
回復 3# shan0948
謝謝前輩發表此主題,讓後學有練習此情境的機會
以下是資料表與結果表不同工作表的方案,請前輩參考
Option Explicit
Sub TEST()
Dim Brr, i&, N&, T1&, T6$, T7$, Sh1 As Worksheet, Sh2 As Worksheet
'↑宣告變數:Brr是通用型變數,(i,N,T1)是長整數變數,(T6,T7)是字串變數,
'(Sh1,Sh2)是工作表變數
Set Sh1 = Sheets("資料表")
'↑令Sh1這工作表變數是 名為"資料表"的工作表
Set Sh2 = Sheets("結果表")
'↑令Sh2這工作表變數是 名為"結果表"的工作表
Brr = Range(Sh1.[G4], Sh1.Cells(Rows.Count, 1).End(3))
'↑令Brr是二維陣列!以資料表[G4]到A欄最後一個有內容儲存格,這範圍值帶入陣列裡
For i = 1 To UBound(Brr)
'↑設順迴圈!i從1到Brr陣列縱向最大索引列號數
T1 = Val(Brr(i, 1)): T6 = Brr(i, 6): T7 = Trim(Brr(i, 7))
'↑令T1這長整數變數是 i迴圈列第1欄Brr陣列值,以Val()轉化回傳數值,
'↑令T6這字串變數是 i迴圈列第6欄Brr陣列值
'↑令T7這字串變數是 i迴圈列第7欄Brr陣列值,以Trim()去除頭尾空白字元後的新字串
Brr(i, 2) = "": Brr(i, 3) = ""
'↑令i迴圈列第2欄Brr陣列值是 空字元:令i迴圈列第3欄Brr陣列值是 空字元
If T7 = "" Then GoTo 111
'↑如果T7變數是 空字元!就跳到 111位置繼續執行
If T1 > 0 Then
'↑如果T1變數大於 0??
N = i
'↑令N這長整數變數是i迴圈數
If T7 = "起" Then Brr(N, 2) = T6
'↑如果T7變數是 "起"!就令i迴圈列第2欄Brr陣列值是 T6變數
If T7 = "止" Then Brr(N, 3) = T6
'↑如果T7變數是 "止"!就令i迴圈列第3欄Brr陣列值是 T6變數
ElseIf T7 = "起" Then
'↑否則如果T1是 0或小於0!而且T7變數是 "起"字串
Brr(N, 2) = IIf(Brr(N, 2) = "", T6, Brr(N, 2) & "、" & T6)
'↑令i迴圈列第2欄Brr陣列值是 IIf()回傳值:
'如果i迴圈列第2欄Brr陣列值是空字元,IIf()回傳值是T6變數,
'否則,IIf()回傳值是i迴圈列第2欄Brr陣列值連接"、",再連接T6變數後的新字串
ElseIf T7 = "止" Then
'↑否則如果T1是 0或小於0!而且T7變數是 "止"字串
Brr(N, 3) = IIf(Brr(N, 3) = "", T6, Brr(N, 3) & "、" & T6)
'↑令i迴圈列第3欄Brr陣列值是 IIf()回傳值:
'如果i迴圈列第3欄Brr陣列值是空字元,IIf()回傳值是T6變數,
'否則,IIf()回傳值是i迴圈列第3欄Brr陣列值連接"、",再連接T6變數後的新字串
End If
111
Next
Sh2.[J4].Resize(N, 3) = Brr
'↑令結果表[J4]擴展向下N列,向右擴展3欄範圍的儲存格以Brr陣列值帶入
Application.Goto Sh2.[J4]
'↑令儲存格游標跳到 結果表[J4]位置
End Sub |
|