標題:
姓名按起或止及日期排列顯示
[打印本頁]
作者:
shan0948
時間:
2023-2-20 20:11
標題:
姓名按起或止及日期排列顯示
請問先進,小弟有個檔案(如附檔),需要將左表的資料,顯示成右表的排列,請問函數公式要如何設定,謝謝先進![attach]35861[/attach]
作者:
Andy2483
時間:
2023-2-21 09:39
回復
1#
shan0948
謝謝前輩發表此主題與範例
後學藉此主題練習VBA陣列的建議方案下,請前輩試試看
執行前:
[attach]35862[/attach]
執行結果:
[attach]35863[/attach]
Option Explicit
Sub TEST()
Dim Brr, i&, N&, T1&, T6$, T7$
Brr = Range([G4], Cells(Rows.Count, 1).End(3))
For i = 1 To UBound(Brr)
T1 = Val(Brr(i, 1)): T6 = Brr(i, 6): T7 = Trim(Brr(i, 7))
Brr(i, 2) = "": Brr(i, 3) = ""
If T7 = "" Then GoTo 111
If T1 > 0 Then
N = i
If T7 = "起" Then Brr(N, 2) = T6
If T7 = "止" Then Brr(N, 3) = T6
ElseIf T7 = "起" Then
Brr(N, 2) = IIf(Brr(N, 2) = "", T6, Brr(N, 2) & "、" & T6)
ElseIf T7 = "止" Then
Brr(N, 3) = IIf(Brr(N, 3) = "", T6, Brr(N, 3) & "、" & T6)
End If
111
Next
[J4].Resize(N, 3) = Brr
End Sub
作者:
shan0948
時間:
2023-2-21 10:07
回復
2#
Andy2483
感謝前輩的指導,因小弟需要在不同表內使用,可否使用函數公式較為簡單,感恩謝謝!
作者:
Andy2483
時間:
2023-2-21 10:13
回復
3#
shan0948
謝謝前輩回復
後學函數公式很弱,函數公式比VBA難,後學努力學習中,等函數公式厲害的前輩指導
一起學習
作者:
Andy2483
時間:
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
作者:
hcm19522
時間:
2023-2-21 14:33
https://blog.xuite.net/hcm19522/twblog/590732675
作者:
shan0948
時間:
2023-2-22 14:15
回復
5#
Andy2483
感謝先進的指導!
作者:
shan0948
時間:
2023-2-22 15:05
回復
6#
hcm19522
非常感謝先進的指導,經測試後符合需求,助益甚大,感恩謝謝!
作者:
shan0948
時間:
2023-3-13 11:24
回復
6#
hcm19522
先進好,之前的資料顯示函數公式,因實際需要增加條件判斷,原函數公式請問要如何修正,詳細說明如附檔,謝謝![attach]35919[/attach]
作者:
Andy2483
時間:
2023-3-14 11:59
回復
9#
shan0948
謝謝前輩
後學練習VBA方式的解決方案如下,請前輩參考
執行結果:
[attach]35938[/attach]
Option Explicit
Sub TEST()
Dim Brr, i&, N&, T1&, T6$, T7$, T8$
Brr = Range([H4], Cells(Rows.Count, 1).End(3))
For i = 1 To UBound(Brr)
T1 = Val(Brr(i, 1)): T6 = Trim(Brr(i, 6)): T7 = Trim(Brr(i, 7))
T8 = Trim(Brr(i, 8))
Brr(i, 2) = "": Brr(i, 3) = "": Brr(i, 4) = "": Brr(i, 5) = ""
If T8 = "" Then GoTo 111
If T1 > 0 Then
N = i
If T8 = "起" Then Brr(N, 2) = T6
If T8 = "止" Then Brr(N, 3) = T6
ElseIf T8 = "起" Then
Brr(N, 2) = IIf(Brr(N, 2) = "", T6, Brr(N, 2) & "、" & T6)
ElseIf T8 = "止" Then
Brr(N, 3) = IIf(Brr(N, 3) = "", T6, Brr(N, 3) & "、" & T6)
If T7 = "離職" Then
Brr(N, 5) = IIf(Brr(N, 5) = "", T6, Brr(N, 5) & "、" & T6)
End If
End If
If T8 = "起" And (T7 = "新進" Or T7 = "他訓轉入") Then
Brr(N, 4) = IIf(Brr(N, 4) = "", T6, Brr(N, 4) & "、" & T6)
End If
If T8 = "止" And T7 = "離職" Then
Brr(N, 5) = IIf(Brr(N, 5) = "", T6, Brr(N, 5) & "、" & T6)
End If
111
Next
[K4].Resize(N, 5) = Brr
End Sub
作者:
shan0948
時間:
2023-3-14 12:22
回復
10#
Andy2483
感謝先進的指導,因之前是使函數公式,故為維持一致性,可否仍使用函數公式設定,謝謝!
作者:
Andy2483
時間:
2023-3-14 12:26
回復
11#
shan0948
謝謝前輩回復
公式(函數)比VBA難,後學暫幫不上忙
作者:
ML089
時間:
2023-3-14 15:32
回復
9#
shan0948
[attach]35942[/attach]
公式L4=SUBSTITUTE(TRIM(IF($H4=L$3,$F4,"")&IF($A5=""," "&L5,""))," ","、") 右拉下拉
公式N4=SUBSTITUTE(TRIM(IF(ISERROR(FIND($G4,N$3)),"",$F4)&IF($A5=""," "&N5,""))," ","、") 右拉下拉
條件式格式設定
選擇 L4:O50
工具列 - 條件式格式設定 - 新增規則 - 使用公式來決定... - 公式 = $A4=""
將填滿與字型的顏色 設為背景顏色(白色)
作者:
shan0948
時間:
2023-3-15 07:49
回復
13#
ML089
M 大好,感謝指導,經測試公式設定後結果似未完全符合增加的需求,詳細說明如附檔案,謝謝![attach]35943[/attach]
作者:
ML089
時間:
2023-3-15 16:16
回復
14#
shan0948
問題:
日期 1 起:
梁鎮魯、葉漢章 2人僅顯示在 L4 ,
L5、L6、L7、L8、L9 均不顯示,
日期 1 止 也是同樣方式
回覆:
(1) 有日期位置 L4,公式結果是否符合你要的答案 ?
(2) L5、L6、L7、L8、L9 均不顯示,可以使用 白色文字及填充白色來遮蓋文字,設定上次已經說明,如下
條件式格式設定
選擇 L4:O50
工具列 - 條件式格式設定 - 新增規則 - 使用公式來決定... - 公式 = $A4=""
將填滿與字型的顏色 設為背景顏色(白色)
作者:
shan0948
時間:
2023-3-15 19:21
回復
15#
ML089
M 大好,感謝您的回覆,您的公式有得到需要的結果,也瞭解您的意思,這方式也不失為另一種途徑,謝謝您!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)