• 2

excel表製作月行事曆

2016-01-25 18:07 發佈
文章關鍵字 EXCEL表
試作了一個簡單的範例,請參考!

農曆部份如要以正規的方式表示,
則須以 VBA 程式碼撰寫,工程較龐大,
故僅以簡單的方式表示!

My Interior Knowledge is Extraordinaire
Mystique Hsiao wrote:
試作了一個簡單的範...(恕刪)


您作的這個表在下有下載來看過內容了,
真的感覺您的方式還蠻有創意的,
使用把 西曆 和 農曆 內容分離的方式,來做到不同步內容變更,因而能維持字型大小的不同,
不過有個地方在下一時看不明白,想請教您一下^^"
那就是有在公式中的 TEXT函數 內容裏頭有一個文字格式的設定
---> TEXT(xxxxx,"[$-130000]xxxx")
這其中的 [$-130000] 的作用是什麼?
在下看了一會,也查了留存的資料,還是沒能了解這個用途,所以想請您幫忙指點一下,
另外想請問您使用的 OFFICE 版本是 2010 還是....?
因為在下開啟這個 EXCEL 文件查看後,在 "農曆" 的公式內容呈現部份,
一開始看內容數值是都正常呈現,但一點進查看公式後再退出,就變成 "#VALUE!" 了,
所以猜想說是不是 OFFICE 版本不同所導至? 在下是使用 2010 的。

ya102061 wrote:
能否用excel做...(恕刪)


依您所提供的表格內容,在下看過之後也試想了一會,
感覺目前尚不能解決的問題點就是---> 西曆 和 農曆 的轉換
因為您是要能切換 年月份 後自動變更對應內容,
等在下再試想看看有沒有克服的方式,如果有想到的話再來嚐試試作看看。
yuehmao wrote:
因為您是要能切換 年月份 後自動變更對應內容...(恕刪)


如果時間多的話,那建議您可以看看 office 官方範本

純函數、公式,但定義超多陣列,讀起來有點煩人
https://templates.office.com/zh-tw/templates-for-Excel

純 vba,可指定年份、月份
https://support.microsoft.com/zh-tw/kb/150774
程式碼有錯,請把程式碼中的 "案例" 改成 "case"

農曆的話,拿 vba 那個範例,套入幾行公式就行

請慢慢研究

snare wrote:
如果時間多的話,那...(恕刪)


十分感謝您的資訊提供
在下先來研究看看^^
yuehmao wrote:
您作的這個表在下有下載來看過內容了,
真的感覺您的方式還蠻有創意的,
使用把 西曆 和 農曆 內容分離的方式,來做到不同步內容變更,因而能維持字型大小的不同


坦白說,我是用土法煉鋼的方式來做的,
而且我覺得西曆和農曆分開不同欄位較易處理,
其實只需要判斷第一列和後兩列,
中間三列只需要 +1 即可(西曆部份)


yuehmao wrote:
不過有個地方在下一時看不明白,想請教您一下^^"
那就是有在公式中的 TEXT函數 內容裏頭有一個文字格式的設定
---> TEXT(xxxxx,"[$-130000]xxxx")
這其中的 [$-130000] 的作用是什麼?
在下看了一會,也查了留存的資料,還是沒能了解這個用途,所以想請您幫忙指點一下


完成西曆的判斷之後,再套用出農曆就比較簡單一點,
使用的公式是從網路上 Google 來的,
老實說,我也一直搞不懂 [$-130000] 的作用,
等有空時再來 Google 看看它的原理為何!

不過我另外有找到一個使用 VBA 做的公式,
可以把轉換出來的農曆用小寫國字方式呈現,
但因為整個公式有些龐大,檔案又是 2003 的格式,
所以就懶得再弄了!


yuehmao wrote:
另外想請問您使用的 OFFICE 版本是 2010 還是....?
因為在下開啟這個 EXCEL 文件查看後,在 "農曆" 的公式內容呈現部份,
一開始看內容數值是都正常呈現,但一點進查看公式後再退出,就變成 "#VALUE!" 了,
所以猜想說是不是 OFFICE 版本不同所導至? 在下是使用 2010 的。


我用的是 Office 2010,
會出現錯誤有可能是作業系統日期格式的設定不同,
我自己習慣使用『月/日/西元年』的格式,
所以在函數中也是以此格式來設計,
但我沒有再花時間去實際測試,所以不確定是否與此有關!

但我有發現,我的做法在電腦中的 Office 可正確顯示結果,
但用手機的『Google 試算表』則無法正確顯示農曆日期,
且在最初版本中,後兩列的西曆在超出當月最後一天時會出現錯誤日期(後已修訂),
等等再來安裝微軟的 Excel APP 試試看!

補充:
微軟的 Excel APP 不太好用,
文字如有設定不同字型則無法顯示,
且所有公式計算的結果全都變成『#VALUE!』
同一個公司的軟體,為何相容性反而不如其它公司?
還是回去用 Google 試算表好了!
My Interior Knowledge is Extraordinaire

Mystique Hsiao wrote:

坦白說,我是用土法煉鋼的方式來做的,
而且我覺得西曆和農曆分開不同欄位較易處理,
其實只需要判斷第一列和後兩列,
中間三列只需要 +1 即可(西曆部份)

完成西曆的判斷之後,再套用出農曆就比較簡單一點,
使用的公式是從網路上 Google 來的,
老實說,我也一直搞不懂 [$-130000] 的作用,
等有空時再來 Google 看看它的原理為何!


的確如您所言這樣,
在下觀摩過您弄的表格之後,也比較能明瞭您的用意想法了,
但就是一直參不透 TEXT 函數中的文字格式 [$-130000] 的用意,
也試過自已在表格中加任意內容看看,但還是看不出是造成何種影響^^"


不過我另外有找到一個使用 VBA 做的公式,
可以把轉換出來的農曆用小寫國字方式呈現,
但因為整個公式有些龐大,檔案又是 2003 的格式,
所以就懶得再弄了!


這個部份其實在下自個也有 Google 了一些資料,
但目前找到的東西,在實際應用上都會出現錯誤...
所以 西曆 和 農曆 的轉換,在下目前也還尚不能克服這個問題...


我用的是 Office 2010,
會出現錯誤有可能是作業系統日期格式的設定不同,
我自己習慣使用『月/日/西元年』的格式,
所以在函數中也是以此格式來設計,
但我沒有再花時間去實際測試,所以不確定是否與此有關!

但我有發現,我的做法在電腦中的 Office 可正確顯示結果,
但用手機的『Google 試算表』則無法正確顯示農曆日期,
且在最初版本中,後兩列的西曆在超出當月最後一天時會出現錯誤日期(後已修訂),
等等再來安裝微軟的 Excel APP 試試看!

補充:
微軟的 Excel APP 不太好用,
文字如有設定不同字型則無法顯示,
且所有公式計算的結果全都變成『#VALUE!』
同一個公司的軟體,為何相容性反而不如其它公司?
還是回去用 Google 試算表好了!


原來是這樣,
在農曆內容的公式部份
其實在下也有自行試過把 TEXT 函數中原本的日期格式 "mm/dd/yyyy" 改成 "yyyy/m/d"
這樣來測試,其結果也是出現 "#VALUE!",
後來再嘗試把整段公式中,某個 TEXT 函數前面的 "--" 符號去除,結果就能正常呈現數字了,
但這樣一來呈現的內容值卻變成是不正確的,像是原本該是呈現 "初1" 的地方變成 "16" 這樣,
雖然目前還不能釐清問題所在,但很謝謝您能抽空耐心做測試。



最後,在下也對您熱心的解說表達謝意,
感謝您~3Q Very Much^^
snare wrote:
如果時間多的話,那...(恕刪)


在下觀摩過這整段程序後,
發現其實裏頭並沒有提到任何 西曆 和 農曆 的轉換用法,
而其實在下最需要的就是這個部份的應用方法,
也在網路上 Google 了一些資料內容參考,
發覺其實如果是在 VB 上的話,是可以套用 .NET Framework 所提供的公用物件,
但是在實際要把那個方式的碼段放進 VBA 執行時,卻一直出現編譯錯誤..
一開始就直接卡在最開頭的那一段CODE,如下:

Imports System.Globalization

所以,至目前還是未解決這個問題....^^"

本來還有點異想天開,想說是否可以自已用目前所掌握能用在 VBA 的CODE 重頭來寫這個轉換函數,
但一 Google 查閱 西曆 和 農曆 的算法,卻發現其內容並沒有想像中那樣容易...lol
因此目前又卡關了,只能說尚在了解中...^^"

=========================
以下是 VB 西曆 轉 農曆 的函式CODE


Imports System.Globalization

Private Function GetTaiwanLunisolarDate(ByVal dSolarDate As Date) As String

Dim dTwDate As New TaiwanLunisolarCalendar
Dim iLunYear As Integer
Dim iLunMonth As Integer
Dim iLeapMonth As Integer

iLunYear = dTwDate.GetYear(dSolarDate)
iLunMonth = dTwDate.GetMonth(dSolarDate)
iLeapMonth = dTwDate.GetLeapMonth(iLunYear)

If (iLeapMonth > 0) Then
If (iLunMonth >= iLeapMonth) Then iLunMonth = iLunMonth - 1
End If

GetTaiwanLunisolarDate = iLunYear & "/" & iLunMonth & "/" & dTwDate.GetDayOfMonth(dSolarDate)

End Function
yuehmao wrote:
發現其實裏頭並沒有提到任何 西曆 和 農曆 的轉換用法,
而其實在下最需要的就是這個部份的應用方法,...(恕刪)


沒錯,只有國曆
農曆的話不建議寫vba,

真正的農曆,它的曆法計算超級麻煩的

我會直接把公式加入vba比較省事
公式是 google 來的,不同的公式都有一定的誤差
真的要正確的話,還需要每年起始日期的大量資料庫
用公式轉,雖然時間一長就會不準,也夠用了

(a1放日期,或是從vba中取日期)
ActiveCell.FormulaR1C1 = _
"=MID(""甲乙丙丁戊己庚辛壬癸"",MOD(TEXT(R[-4]C[-2],""[$-130000]e"")-4,10)+1,1)&MID(""子丑寅卯辰巳午未申酉戌亥"",MOD(TEXT(R[-4]C[-2],""[$-130000]e"")-4,12)+1,1)&""年""&TEXT(R[-4]C[-2],"" [$-130000][DBNum1]m月d日"")"

行事曆,我寧願用 google 日曆(可加上農曆),又可以和手機同步、備忘錄、事件通知,用excel很累的

至於那個$-130000的,記得您有問過,請參考
http://www.exceltip.net/thread-10436-1-1.html

建議excel 還是乖乖用國歷,不然就用公式轉一轉就好
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?