Board logo

標題: [發問] 自動產生特定日期功能 [打印本頁]

作者: iceandy6150    時間: 2021-10-30 00:39     標題: 自動產生特定日期功能

本帖最後由 iceandy6150 於 2021-10-30 00:43 編輯

大家好
我有一個訓練表,定期辦理訓練,按照梯次走
目前自己用函數去處理
想請問如何使用按鈕自動產生? 謝謝

因為梯次是一串文字
有時候又要轉換為日期格式,還要加減月份,日又是固定值
不知道有沒有更好更快的處理方法
讓我只要填入梯次,按下自動產生按鈕,後面的格子所需要的都能自動出現
(例如我填入六個梯次,後面都會自動產生)
謝謝

[attach]34302[/attach]
綠色是基準,之後是用函數去處理
目前結訓測驗日是距離初級訓開課日8.5個月後辦理
我也想增加一個功能,讓我可以選擇要幾個月後辦理(最低是6,因為三種訓結束後才能結訓測驗)
[attach]34303[/attach]
作者: samwang    時間: 2021-10-30 08:14

回復 1# iceandy6150

不好意思,看不太懂您實際需求,請在說明詳細,謝謝

因為梯次是一串文字>>一串文字在哪裡?,要如何處理?
有時候又要轉換為日期格式,還要加減月份,日又是固定值>>可以舉實際範例說明嗎?
不知道有沒有更好更快的處理方法
讓我只要填入梯次,按下自動產生按鈕,後面的格子所需要的都能自動出現
(例如我填入六個梯次,後面都會自動產生)>>規則是什麼?
謝謝
作者: 准提部林    時間: 2021-10-30 12:16

看不懂邏輯, 先將公式整理一下:
[attach]34315[/attach]

"結訓測驗日"規則不清楚, 大約抓著做, 如:8個月, 應是滿8個月--亦即第9個月

vba可將第1及2行保留公式, 再依所需梯次數往下貼入即可
作者: iceandy6150    時間: 2021-10-31 00:34

回復 3# 准提部林

抱歉,重頭說一次
規則是這樣
每個月報名分為上半行月(1號到15號)  以及下半月(16號到月底)
以第一行為例,在104年7月1~15報的人
叫做1040801梯 (每梯人數不一定,有多有少,本案例暫時不管人數)

初級訓練為期一個月
1040801梯的人,開始訓練日為104/08/01,要通過初級訓練必須要測驗,測驗日在結束月份的22號(所以是104/08/22)

中級訓練為期三個月
1040801梯的人,中級開始訓練日是104/09/01 (因為八月整個月是初級訓練),三個月就是九、十、十一
測驗日在結束月份的22號(所以是104/11/22)

高級訓練為期兩個月
1040801梯的人,高級開始訓練日是104/12/01,個兩月就是十二、明年的一月
測驗日在結束月份的22號(所以是105/01/22)

這三種訓練都要通過,最少是六個月
之後會安排一個結訓測驗
結訓測驗日,不是在01號就是15號,這兩種

有時候是六個月後馬上測驗
有時候是七個月後

我貼的案例是8.5個月後測驗
(1040801梯的人,開始訓練日為104/08/01,結訓測驗日為105/03/15)
如果改8個月後測驗,結訓測驗日為105/03/01

而下半月的人,叫做1040816梯
三種訓練的開始日都是16號
測驗日在結束月份的06號
我貼的案例是8.5個月後測驗
(1040816梯的人,開始訓練日為104/08/16,結訓測驗日為105/04/01)


總規則整理一下

一、我只要輸入梯次,梯次是一個字串(例如1100901),後面會自動產生並算好各欄位日期,(格式為110/09/22這樣)

二、上半月報名的人,三種訓練的開始日都是01號;測驗日在結束月份的22號
    下半月報名的人,三種訓練的開始日都是16號;測驗日在結束月份的06號

三、結訓測驗日的產生,可以讓我自由輸入(橘色部分),並且最低是6起跳(會自動檢查)
作者: 准提部林    時間: 2021-10-31 10:20

本帖最後由 准提部林 於 2021-10-31 10:25 編輯

回復 4# iceandy6150

依你舉的例子:梯次 1040801
>> 結測 8.5月 >> 105/03/15
往前推算
>> 結測 7.5月 >> 105/02/15
>> 結測 6.5月 >> 105/01/15 ---高級測驗 105/01/22  --- 結測早于高測???
>> 結測 6.0月 >> 105/01/01 ---高級測驗 105/01/22  --- 結測早于高測???
===============
梯次 1040816
>> 結測 8.5月 >> 105/04/01
往前推算
>> 結測 7.5月 >> 105/03/01
>> 結測 6.5月 >> 105/02/01 ---高級測驗 105/02/06  --- 結測早于高測???
>> 結測 6.0月 >> 105/01/16 ---高級測驗 105/02/06  --- 結測早于高測???

============================
作者: ML089    時間: 2021-10-31 20:54

建議2列及3列都改為 excel日期(西元日期) 輸入,
再格式化為中文日期
梯次格式化 emmdd
報名截止格式化 e/mm/月底
其他隔式化 e/mm/dd

A4 以後的公式就可以大量減化
A4 =EDATE(A2,1)
右拉下拉

其他 A2:I3 另有公式詳檔案
作者: iceandy6150    時間: 2021-10-31 20:59

回復 5# 准提部林

嗯...我想這個是計算方式的差異
最快能結訓測驗應該要在...高級測驗結束後,最接近的01號或15號

梯次 1040801
>> 結測 8.5月 >> 105/03/15
往前推算
>> 結測 7.5月 >> 105/02/15
>> 結測 7.0月 >> 105/02/01
>> 結測 6.5月 >> 105/01/15 ---高級測驗 105/01/22  --- 結測早于高測???
>> 結測 6.0月 >> 105/01/01 ---高級測驗 105/01/22  --- 結測早于高測???

高級測驗 105/01/22---則最早結測為105/02/01

以月分來看1040801梯
08~隔年02,為8+6=14 (12進一年...餘2)
數學計算,8月已經自己算一個月了,所以我才會說最低6

如果手算,8月要算,08,09,10,11,12,01,02,這樣是足七個月,也就是結測 7.0月 >> 105/02/01

===============
梯次 1040816 亦同
---高級測驗 105/02/06  --- 則最早結測為105/02/15
08~隔年02,為8+6=14 (12進一年...餘2)

對了,因為這些日期出來,要合併列印到WORD去
所以如果用自訂e/mm//dd,可能會出現錯誤
日期可能還是要維持字串 "105/02/15",這樣合併列印才不會出錯

所以是不是先從字串-->日期,加減後再變回字串 ?
謝謝
作者: iceandy6150    時間: 2021-11-1 23:44

回復 3# 准提部林

版主大您好
您提供的檔案可以準確使用

但是結訓測驗日,是01,15這兩種,您的公式出來是01,16這兩種
不知道怎麼修改? 謝謝

另外,我為了讓WORD合併列印可以正常讀取
必須把"日期"改成"字串"
我的方法是在工作表2去設定
比如B2=TEXT(工作表1!B2,"e/mm/dd")
然後把公式從B2拖曳到~右底,在拖曳到~下底

再從工作表2的A1,Ctrl+Shift+右  ,Ctrl+Shift+下
就可以整個複製起來,到工作表3的A1,貼上 "值"
就大功告成啦

只不過,不曉得為何會出現奇怪的提醒

[attach]34332[/attach][attach]34332[/attach]
作者: 准提部林    時間: 2021-11-5 10:21

回復 8# iceandy6150

重新做, 日期都是民國年月日(文字型態):
[attach]34346[/attach]

1) 若你的版本無法使用 "r"&104/01/01..轉成西元年, 就比較麻煩
2) 新版excel對數值或日期型態, 而以文字型態處理時, 大部份會提示及標示, 並不妨礙正常使用




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)