顯示具有 Excel 標籤的文章。 顯示所有文章
顯示具有 Excel 標籤的文章。 顯示所有文章

2018年10月7日 星期日

[Excel]-Excel巨集-製作延遲函數(do while loop)

2018年9月30日 星期日

[EXCEL]-在Excel中畫矩形_02, Plot a rectangular in Excel_02

2016年12月14日 星期三

[EXCEL]-在Excel中畫橢圓形_03, Plot a ellipse in Excel_03

[EXCEL]-在Excel中畫橢圓形_03, Plot a ellipse in Excel_03

繼之前的文章,在Excel中畫橢圓形_01,所畫的橢圓形之長、短軸是與XY軸互相垂直。 https://yufan-fansbook.blogspot.com/2014/10/excel-excel02-plot-ellipse-in-excel02.html
後來有朋友問說要如何做出斜的橢圓形,所以在此提供作法。

我是利用座標軸轉換的公式,將原本垂直的座標軸轉換成斜的座標軸,再利用原本畫橢圓的公式就可以畫出斜的橢圓形了。

坐標軸旋轉公式:
x' = xcosA - ysinA
y' = xsinA + ycosA
其中,A為以橢圓為中心,逆時鐘旋轉的角度
 

步驟一:延續“[EXCEL]-在Excel中畫橢圓形_01, Plot a ellipse in Excel_01”的表格。在cell A10中填入Spin,在cell B10填入你要的旋轉的角度,這裡先填上45。(旋轉45度)

步驟二:在cell K12填入t',在cell L12填入x',在cell M12填入y',多一個“ ' ”的符號表示是旋轉一個角度後的參數。

步驟三:在cell K13中填入0、在cell K14中填入10、cell K15中填入20,依此類推一值填到cell K49=360,這一行代表每10度描繪一個點,直到360度,便可描繪出一個完整的橢圓形了。

步驟四:要對X'Y'坐標描點,依照公式,所以cell L13的公式即為 =B13*COS(PI()/180*$B$10)-C13*SIN(PI()/180*$B$10),並將其複製到cell L49 ,如此一來便完成了橢圓形的X參數。


步驟五:再來要完成橢圓形的Y參數,依照公式,所以cell M13的公式即為= B13*SIN(PI()/180*$B$10)+C13*COS(PI()/180*$B$10),並將其複製到cell M49,如此便完成一中心為座標為(0,0),長軸為2,短軸為1,且旋轉45度的橢圓形參數了。

步驟六:在原本的座標圖上新增一組數據,就是旋轉後的橢圓形了

 

2016年7月3日 星期日

[Excel]-工程上常用的EXCEL函數_12_VLOOKUP

[Excel]-工程上常用的EXCEL函數_12_VLOOKUP

在一般文書處理及工程數據資料處理,常常會需要資料比對,比對出前後兩板文件或數值的差異,若是數量不多,用人工的方式檢查就夠了,但是數量多的時候,若還在用人工比對,第一耗費時間,第二可能會出錯,所以今天介紹EXCEL中的好用函數“VLOOKUP”來比對數據或是資料,以減少時間及出錯的機會。




在電子工程師的生活中,常常需要比對電路圖中的元件料號與生產系統中的元件料號(或是BOM, Bill of Meterial)是否相符合,以減少PCB打件時的失誤。現在就以比對電路圖中元件料號及材料清單作為例子,解說VLOOKUP的用法並建立一個屬於自己的比對系統,希望對各位有所幫助。

2015年9月5日 星期六

[Excel]-Excel巨集-迴圈for...next-01

[Excel]-Excel巨集-迴圈for...next-01

Excel巨集語法中,迴圈的控制有很多種,上次是使用Do While的迴圈,為了可以更靈活及孰悉的應用迴圈的寫法,這次我將示範for next的迴圈。
這次也將沿用上次的例子,當按下圖1箭頭處的綠色“Start”按鈕,則cell A2將每次累加1,直到cell A2等於所設定的數值100,如圖2
圖1

0000-1

圖2

0000-2


第一步:修改程式。先打開上次的例子,依照下圖3將程式修改成圖4的程式。
1.Do While j <= i改成 For j = 1 To i
2. Loop 改成 Next j

圖3

0000-3

圖4

0001-1


For…Next是不是看起來也很直覺,
For j = 1 To i”是不是可以翻譯成“當j等於1i之間”則執行迴圈。
Next j”則可以翻譯成當迴圈執行完後,就做“下一個j”。

第二步:單步執行程式,驗證程式。
按第1F8,程式開始


0002


按第2F8


0003


按第3F8


0004


按第4F8,此時可以將滑鼠游標移到“j = j +1”這行程式碼的前面,則會出現一個小方塊,這樣我們就可以觀察現在j的值是多少。此時j=1,因為我們從“For j = 1 To i”這行就已經將j的初始值定為1


0005


按第5F8,“j = j +1”這行變成黃色,但其實程式正要執行這行程式,當再按一次F8時,程式移到下一行“Next j”,這才表示程式已做完“j = j + 1”,此時小方塊中的j值才會發生變化。


0006


按第6F8,“Next j”這行變成黃色,表示程式已完成上一行“j = j +1”,此時小方塊中的j值變化成2,並即將執行“Next j”。


0007


按第7F8,“Cells(2, 1).Value = j”這行變成黃色,表示程式已完成上一行“Next j”,此時可看出小方塊中的j值已變化成3

0008


按第7F8


0009


按第8F8


0010


按第9F8


0011


按第10F8

0012


按第11F8


0013


按第12F8

0014


按第13F8

0015


按第14F8

0016


按第15F8,各位是否發現奇怪的現象,j的值是從1,每次累加1,但是觀察Cell A2的值卻是13579‧‧‧,每次累加2的變化。因為“Next j”本身就已經具有每次加1的特性了,我在迴圈中又再加了“j = j + 1”這行程式,所以等於每做一次迴圈,每次增加不是1,而是每次增加2


0017


第三步:修改程式,如圖。將“j = j + 1”這行刪除,並將“For j = 1 To i”改成“For j = 0 To i”,j的初始值才會是0,這樣j才會從0一直記數到100


0018


0019






參考資料:


2015年8月16日 星期日

[Excel]-Excel巨集-迴圈Do while...Loop-02

[Excel]-Excel巨集-迴圈Do while...Loop-02


               在上篇文章中,說明了do while...loop的用法,在實際應用中,若要中途停止迴圈,則需要再寫一個巨集來達成。


圖1



選取開發人員中的巨集選項,來新增一個巨集。如下圖2。
圖2



接下來先命名巨集,我們就用stop當作該巨集名稱吧,但輸入完後發現,建立的按鈕不能按下,這是因為stop不能使用得緣故,所以就改成stopp。
圖3




將名稱改成stopp後,建立的按鈕就可按下了。
圖4


接著在巨集內容中寫上cells(2,1)=cells(1,1).value,如圖5。
這就是將cell A1的值帶入cell A2,這樣Start巨集中的迴圈條件就會不成立,即迴圈中止。
圖5


當然也可以化簡如下
圖6



巨集寫完後,記得先存檔。
圖7




圖8




圖9




圖10

2015年8月9日 星期日

[Excel]-Excel巨集-迴圈Do while...Loop-01

[Excel]-Excel巨集-迴圈Do while...Loop-01

       想在Excel中,做一個可重複執行的巨集。目的如下;如下圖1,在cell A1中設定100,在cell A2中設定1,希望做一個指令(巨集),當執行此一巨集時,cell A2將從1變為2、再變為3,一直增加數值,直到等於我們所設定的數值,即100。這樣重複性的功能最適合用巨集來執行了,以下就來練習一下如何用一個迴圈巨集來達成這樣的需求。自己在學習當中,希望大家一同進步,若有錯誤及任何意見,請不吝指教。有些參考網路教學,會盡量標明參考網站,若有侵犯著作請告知。
圖1

第一步:另存檔案成“Excel啟用巨集的活頁簿”。若要執行巨集,必須將Excel另存成可執行具的的檔案格式,如圖2所示,選擇另存檔案→Excel啟用巨集的活頁簿。
圖2
再從存檔類型中,選擇“Excel啟用巨集的活頁簿”,如下圖3。
圖3

第二步:存檔完後,便進入正題了。先在cell A1中輸入100,這是希望要記數的數值。cell B1中輸入setcell A2中輸入1,這是記數的初始值。cell B2中輸入count。如下圖4。
圖4


第三步:插入三個快取圖案,並分別輸入“Start”,“Stop”,“Reset”。這三個按鈕將代表不同的功能,也就是說會有三個不同的巨集要編寫。 
圖5



第四步:建立巨集。點選檢視中的巨集,便會出現如圖6的對話框,
圖6
 接著在巨集名稱中輸入“Start”,並按下建立,這表示按下綠色的Start按鈕便會執行此一巨集程式。
圖7

按下建立後,便會出現編輯巨集的程式編輯框,將來的程式編寫便是在這一編輯框內編寫。

圖8



第五步:規畫程式流程。在巨集編寫之前,先想一下我們需要的動作流程,
1.判斷cell A2小於cell A1
2.cell A2小於cell A1cell A21→再跳回的1
3. cell A2不小於cell A1→停止程式
這三步就是程式運作的主要原理,用圖形表示程式的流程,如下圖9。

圖9


第六步:編寫程式。依下圖編寫程式,我現在先示範Do While...Loop的用法。
1.  Sub Start ()End Sub之間的東西就是這巨集的內容,也就是說一個巨集的開始一定是Sub XXX (),結尾一定是End SubXXX就是巨集名稱。

2.  Dim i As IntegerDim j As Integer:定義ij為整數

3.  i = Cells(1, 1).Value:定義cell A1的值 = i,這樣可以簡化程式的寫法,即要用到cell A1的時候,只要輸入i就可以了。

4.  j= Cells(2, 1).Value:定義cell A2的值 = j

5.  Do While...Loop的用法或基本框架如下:
        
        Do While 條件
                迴圈內容
        Loop

        
    Do While j <= i    迴圈開始條件:j <= i

       
        j = j + 1      迴圈內容:每執行一次迴圈,j的值就增加1
                          直到j的值小於或等於i的值
   
    Loop            迴圈結束

圖10

第七步:單步執行程式。程式初步寫好,先用單步執行來確認程式是否可正常動作。在偵錯選項中選擇逐行,或是直接按F8也可以。
圖11


按第一次F8,可以看到程式中第一航變成黃色了,這表示現在正在執行這一行。如下圖12。
圖12


按第二次F8
圖13


按第三次F8
圖14


按第四次F8
圖15


按第五次F8
圖16


按第六次F8
圖17


按第七次F8
圖18


按第八次F8

圖19

按第九次F8
圖20


此時,將滑鼠游標移到下圖21的紅色圓圈處,最左邊的j上面,會出現一個“j = 3”,這就是現在j的值,即cell A2的值。
圖21


接著再按下多次F8,並將滑鼠游標移到下圖22的紅色圓圈處,最左邊的j上面,會出現一個“j=26”,這就是現在j的值,即cell A2的值。但奇怪的是在Excel頁面上的Cell A2仍然顯示1。這表示程式可能有些問題。
圖22

圖23

第八步:程式修改。想一下為何實際上cell A2的值不會變化?因為迴圈中j的值有一值累加,但是每累加一次就必須將j的值再帶入cell A2,這樣才會顯示在Excel中。所以流程圖及程式修改如下。

圖24


程式修改部分:將 j = Cells(2, 1).Value由迴圈外部移到迴圈內部。
再次單步執行,驗證程式。按了多次F8,會發現j的值只會在12之間變化,如下圖25及圖26。

圖25
圖26

第九步:程式修改。將 j = Cells(2, 1).Value改成Cells(2, 1).Value = j。如此一來 Cell A2的值可以正常的累加到100了。在回到Excel中直接用滑鼠點選綠色的“Start”,就會看到Cell A2的值從1一值增加到100。
圖27
圖28
圖29


後記,整個巨集的寫法也可以畫簡為以下,也可以達成相同功能。

圖30