2015年3月19日 星期四

鋼筋計算的輔助自訂函數

  工程實務在計算鋼筋的重量問題上通常是要把設計圖上的配筋,按鋼筋大小尺寸(即稱為號數)分類,並求得各號數鋼筋的總長度,接著乘上各對應的每單位米公斤重(kg / m ) 後,可算出鋼筋的需求重量以供使用.
  在EXCEL的程式長度的計算可用Sum函數處理,但各單位米重如不憑記憶Key-In ,就得查詢後再Key-In ,前者有記憶錯誤的風險;而後者則降低計算速度!
  何況大多數的操作都會有修改的情況發生,因此若能以程式設計的手法改善,不但可增加計算的準確度同時也可提高計算的速度.

對策有:

1.以”複製-貼上”方法操作-----只適合Excel初學者,其他不建議.

2.Excel 內建函數方法:

  • 先作一資料工作表,將各鋼筋號數及其對應的單位米公斤重資料建立以供後續操作使用  
  • 在要在查詢的儲存格中寫入Vlookup;Hlookup函數,例如:=HLOOKUP(C2,首頁!$D$1:$L$3,3,0),其中 C2 為鋼筋號數值,而首頁工作表的D1:L3的區域及上述資料來源
  • 利用自動填滿功能便可讓同欄的儲存格得相同的函數而查得對應資料
基本資料工作表
使用Excel內建函數操作結果



3.Excel 自訂函數方法:
  • 利用VBA 撰寫自訂函數,程式碼如下:
Function Rwpm(ByVal Rn As Integer) As Single
'本函數為鋼筋號數對應的單位米公斤重
Dim i As Integer
  i = Rn - 2
Rwpm = Choose(i, "0.56", "0.994", "1.56", "2.25", "3.04", "3.98", "5.08", "6.39", "7.9")
End Function
VBA程式碼


使用VBA自訂函數操作結果


討論:

   方法2可算不錯的方法,但若檔案複製再用後會出現資料連結更新的問題,且在使用上得注意參照格位須一再確定正確,否則將參照得不正確的資料而自己還不知的風險產生!


   方法3則是使用者須要有VBA的功力,門檻較高,且須複製自訂函數程式碼或同時開啓有該程式的檔案,方有其功能.不過其優點則是,使用靈活度高,且不用另外將資料來源另存在工作表中.

至於要用何種方法則看個人習慣了!

擴充運用:
 
鋼筋計算中常要考慮的”搭接長度”,及”彎鉤長度”同樣可仿照上述方法處理用2或3的方法處理!(VBA 程式碼參見上圖)





2015年3月10日 星期二

大衍占卜輔助電腦程序



一,動機

其實之前會寫這個程式的本意是為了自修研讀易經時,常常得要詢查本卦及之卦等相関卦名,自覺如果有個小程式可配合,一定可方便許多.因而開始撰寫了第一個查卦的程式。之後在研讀金錢占卜的方法時,又發展了一個可直接將三個硬幣六次投擲的陰陽結果,按選輸入清單而查出本卦,綜卦,錯卦及爻變結果之卦的程式.這階段程式其實難度不高,只用到了函數設定(核心動作為擷取合併字元及查詢),縱使後來加入亂數函數成了可自動金錢占卜的程式,也還不用寫到VBA碼便可達成目的。

  一直到去年給賢小甥修安參考上述金錢占卜程式後,通訊之間自覺大衍占卜法手續較為複雜,光從文字研讀是有些艱澀,可再發展一電腦程式以自用。而大衍占卜的方法即為取五十支如筷子的竹籤(古人用的是蓍草),用其中四十九支以分二,掛一,揲四,歸奇的手續完成十八變而得六爻陰陽成數,如此便可得本卦及爻變後的之卦。(詳細內容可參考網路其他資料,恕不贅述!) 

  這一類的程式老早便有很多人完成,但多數為自動占卜及商業使用,跟本人發展程式的本意在於輔助易學之研讀不合.此外,個人覺得他人程式的核心處理是否按易學操作不得而知,且完全由程式亂數主導結果,稍欠靈動之機.因此本程式的原意是在每一變中以人為作分二手續後,由電腦由演繹,掛一,揲四,歸奇的過程,最後再套用回上述己完查卦系統,求得各相關卦名,至於自動占卜的功能只可算是----”副產品”,並非本程式的主要用途。

  今年二月初的一趟台北行,得知姻親朱家長輩亦在研究易學,道別之際曾言告自己有一拙作可供參考,待回高雄多日後利用空暇才將這個程式初版北傳.就在整理程式的同時,自覺程式本為自用,內容自當省略諸多說明;再者他人使用時,不比自己了解所投之自亂數確按古人大衍占卜原理,一爻所得之數須三變而得之,故須投入十八次獨立不同的亂數方得一卦.但電腦因操作速度過快,無法查視十八變的歷程,程式啓動就直接得到最後結果的方式對研究大衍占卜助益實為有限。

  所以本改寫後的一版,除多加一些說明註解外,最大的變動就是在程式的進行中加入暫停機制,調整資料捲動至對應範圍,讓每一變的左右首揲之以四的動作,皆能清楚的表現出來.之前六爻的陰陽成數得出後,須再到查卦工作表查卦,如今則直接鍵結及切換視窗得出本卦、之卦、綜卦、錯卦之成果。

二,主要大衍占卜查卦內容介紹

  1. 可配合實際蓍草(或竹籤 )占卜,將第一變中分二後的左手策數填入(右手策數自動算出)。
  2. 按灰色揲之以四的巨集按鍵後,便可得第一變的歸奇(策數)。
  3. 重複第二變的分二動作(此時程式早已把第一變歸奇後的策數扣除),如上述手續再將二變的左手策數填入格中,再按一次灰色揲之以四的巨集按鍵。
  4. 最後三變的所有操作之後,才得第一爻的陰陽成數。
  5. 重複2~6爻(共18變)操作後可得各爻陰陽及變爻(9為老陽,8為少陰,7為少陽,6為老陰;老陽須變陰,老陰須變陽,爻變之後的卦即為之卦)。
  6. 有了六爻陰陽成數後再到查卦的工作表按選各爻成數後,程式自動查出本卦,之卦,綜卦,錯卦的卦名及卦象。


程式主要外觀

二,自動占卜程式介紹

  1. 在本頁底設有一個自動占卜巨集按鍵,點按後便可自動占卜。
  2. 1~6爻的18變皆由程式亂數自行採得分二的策數。
  3. 各變階段設有暫停點,可讓使用者看清楚程式的運算及變化。
  4. 暫停後可按Enter鍵,繼續程式進行直到下個暫停點。
  5. 6爻得出陰陽成數後,程式視窗切換到查表工表,直接得本卦、之卦、錯卦及綜卦的卦名及卦象。


程式設有暫停訊息以看清楚運算過

每一爻都要經歷三變才得爻數

歷經18變才算占得一卦

程式可自動將6爻成數給定查卦工作表可得各相關卦名卦象
三,結語
  再次強調,本程式純粹為自修易經而作,若任何人熟諳64卦後實皆可快速推得各相關卦名卦象,無需利用本程式!
  且因本人能力有限,所以本程式只有查卦卜卦功能,並未有解卦的作用。