公告版位

目前分類:01_EXCEL函數與VBA (156)

瀏覽方式: 標題列表 簡短摘要

使用VBA製作銷貨訂購單與儲存資料(EXCEL當資料庫)

 

預覽畫面:

 

本範例主要分享銷貨訂單的自動化EXCEL當成輸入介面

當然也可以利用VBA裡的表單來製作,難度會比較高些,

不過感覺會更專業些,但是無論哪種方式,

最主要是可以輔助輸入的效率與正確性

讓輸入資料不易出錯,

也無法隨意竄改,

所以需要最後配合保護工作表

除了四個區域(單號、客戶、商品、數量)可以修改外,

其他都不能修改,避免輸入資料正確性

另外下拉清單也可以自動帶出其他資料

這樣就可以加快輸入效率,

最後,可以再利用VBA程式

將所有資料存在銷貨明細一筆紀錄單號也自動加一之後,

又可以繼續輸入資料,達到類似進銷存系統的目的。

 

以下分享流程:

1.訂單日期

02_到貨日期

03_到貨日期(避開六日)

04_客戶

05_序號

06_商品

07_小計

08_保護工作表

09_增加訂單明細工作表

10_VBA程式畫面

Public Sub 新增資料()

   '1.判斷在哪一列

   If Sheets("銷貨明細").Range("A2") = "" Then

       r = 2

   Else

       r = Sheets("銷貨明細").Range("A1").End(xlDown).Row + 1

   End If

   '2.輸出資料

   '單號

   Sheets("銷貨明細").Cells(r, "A") = Range("B2")

   '訂單日期

   Sheets("銷貨明細").Cells(r, "B") = Range("D2")

   '到貨日期

   Sheets("銷貨明細").Cells(r, "C") = Range("G2")

   '客戶編號

   Sheets("銷貨明細").Cells(r, "D") = Range("B3")

   '客戶名稱

   Sheets("銷貨明細").Cells(r, "E") = Range("C3")

   '連絡電話

   Sheets("銷貨明細").Cells(r, "F") = Range("G3")

   '地址

   Sheets("銷貨明細").Cells(r, "G") = Range("B4")

   '銷貨總額

   Sheets("銷貨明細").Cells(r, "H") = Range("G4")

  

   '3.清空資料

   'Range("B2") = ""

   Range("B3") = ""

   Range("E2") = ""

   Range("B7:B16").ClearContents

   Range("F7:F16").ClearContents

 

   '4.單號加1

   Range("B2") = Range("B2")+ 1

End Sub

 

**如果編號為S000X

   Range("B2") = Left(Range("B2"), 1) & Format(Right(Range("B2"), 4) + 1, "0000")

 

教學影音(完整版在論壇):

 

教學影音完整版在論壇:

https://groups.google.com/forum/#!forum/scu_excel_vba2_86

 

課程特色:

EXCEL函數 VBA程式設計資料庫與網路資料是分別屬於不同領域的知識,

但卻是目前大家都需要的一項專業技能,要把三者融合的很好實在非常不容易,

剛好我有近20年的VB程式設計資料庫設計的經驗,

教EXCEL函數與相關課程也有多年,因此清楚如何把最重要的知識教給大家,

ADO資料庫設計的知識非常多,但根據我多年的設計實務經驗,

覺得最重要的是掌握SQL語言,就可以輕易的完成查詢、新增、修改與刪除等功能,

就可以輕易的完成自己想處理的大量資料,大大提高工作效率了!

 

上課用書是:

Excel函數&VBA其實很簡單

(http://www.books.com.tw/exep/prod/booksfile.php?item=0010457292)

Excel VBA 與資料庫整合大活用

(http://www.books.com.tw/exep/prod/booksfile.php?item=0010463634)

 

完整教學影音DVD申請

http://goo.gl/ZlBZE

 

其他相關學習:

函數東吳進修推廣部, EXCEL, EXCEL VBA 函數 程式設計 線上教學 excel vba 教學 excel vba指令教學 vba範例教學excel  excel vba教學視頻 函數教學 excel函數

文章標籤

吳老師 發表在 痞客邦 留言(0) 人氣()

EXCEL太複雜工作還是交給VBA吧!範例班級成績查詢

 

預覽畫面:

 

關於下拉清單快速查詢班級資料是常見問題,

但是要做到這樣的結果,

如果用EXCEL內建函數

需要用到函數分別有:

IF(比對)、SAMLL(改範圍比對與排序)、INDEX(抓資料)、IFERROR(過濾錯誤)

而且還需要用陣列來執行,

光複雜度,就令人卻步

每每講完這部分,再講VBA的解法,

反而用VBA來處理顯得更加簡便

所以,

若有更複雜的工作,要提高工作效率,

建議,還是用VBA為佳。

 

如何用VBA來做:

 

Public Sub 班級()

   '1.刪除舊資料

   Range("G5:J12").ClearContents

   '1.輸出的列數

   k = 5

   '2.迴圈判斷班級

   For i = 2 To 12

       If Cells(i, "A") = Range("H2") Then

           Cells(k, "G") = Cells(i, "B")

           Cells(k, "H") = Cells(i, "C")

           Cells(k, "I") = Cells(i, "D")

           Cells(k, "J") = Cells(i, "E")

           k = k + 1

       End If

   Next

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

   If Target.Address = "$H$2" Then

       Call 班級

   End If

End Sub


補充用EXCEL內建函數:

以下是用IF(比對)、SAMLL(改範圍比對與排序)、INDEX(抓資料)、IFERROR(過濾錯誤)

=IF($A2=$H$2,ROW()-3,"N")

{=SMALL(IF($A$2:$A$12=$H$2,ROW($A$2:$A$12),"N"),ROW()-4)}

**注意SMAIL的比對為範圍,所以需要將比對條件改為範圍,另返回的列數也要是範圍,並且一定要用陣列執行(CTRL+SHIFT+ENTER)

 

{=INDEX($A$1:$E$12,SMALL(IF($A$2:$A$12=$H$2,ROW($A$2:$A$12),"N"),ROW()-4),COLUMN()-5)}

 

 

 

{=IFERROR(INDEX($B$1:$E$12,SMALL(IF($A$2:$A$12=$H$2,ROW($A$2:$A$12),"N"),ROW(A1)),COLUMN(A1)),"")}

 

教學影音(完整版在論壇):

 

教學影音完整版在論壇:

https://groups.google.com/forum/#!forum/scu_excel_vba2_86

 

課程特色:

EXCEL函數 VBA程式設計資料庫與網路資料是分別屬於不同領域的知識,

但卻是目前大家都需要的一項專業技能,要把三者融合的很好實在非常不容易,

剛好我有近20年的VB程式設計資料庫設計的經驗,

教EXCEL函數與相關課程也有多年,因此清楚如何把最重要的知識教給大家,

ADO資料庫設計的知識非常多,但根據我多年的設計實務經驗,

覺得最重要的是掌握SQL語言,就可以輕易的完成查詢、新增、修改與刪除等功能,

就可以輕易的完成自己想處理的大量資料,大大提高工作效率了!

 

上課用書是:

Excel函數&VBA其實很簡單

(http://www.books.com.tw/exep/prod/booksfile.php?item=0010457292)

Excel VBA 與資料庫整合大活用

(http://www.books.com.tw/exep/prod/booksfile.php?item=0010463634)

 

完整教學影音DVD申請

http://goo.gl/ZlBZE

 

其他相關學習:

函數東吳進修推廣部, EXCEL, EXCEL VBA 函數 程式設計 線上教學 excel vba 教學 excel vba指令教學 vba範例教學excel  excel vba教學視頻 函數教學 excel函數

文章標籤

吳老師 發表在 痞客邦 留言(0) 人氣()

EXCEL快速資料分欄用INDEX函數與VBA

 

預覽畫面:

 

常遇到儲存格中若有單欄資料要分為四欄多欄資料,

若不懂的用INDEX等查詢函數,配合COLUMN與ROW參照函數

可能要用非常多的時間才能完成工作,

但若懂得用INDEX或INDIRECT函數

馬上就可以輕易完成結果,

需要先用Column與Row函數取得位置,再利用INDEX函數讀取資料,

最後多餘的標題與冒號,可以用REPLACE函數或是MID函數去除。

不過比較函數與VBA的執行效率,

當然VBA程式寫出來,按下按鈕執行似乎比較直接,

所以若資料量大或是需要重複動作的應用,

還是建議用VBA來完成

 

1.Column與Row函數:

=COLUMN()-3+(ROW()-2)*4

 

2.INDEX函數

=INDEX($B$2:$B$33,COLUMN()-3+(ROW()-2)*4,1)

3.MID與LEN函數

=MID(INDEX($B$2:$B$33,COLUMN()-3+(ROW()-2)*4,1),LEN(D$1)+2,99)

**補充用REPLACE切割=REPLACE(INDEX($B$2:$B$33,COLUMN()-3+(ROW()-2)*4,1),1,LEN(D$1)+1,"")

 

 

4.INDIRECT函數

=INDIRECT("B"&COLUMN()-2+(ROW()-2)*4)

=REPLACE(INDIRECT("B"&COLUMN()-2+(ROW()-2)*4),1,LEN(D$1)+1,"")

 

**用INDIRECT轉為VBA的RANGE物件輸出資料

 

Public Sub 人事分欄()

'    Cells(2, 4) = Range("B2")

'    Cells(2, 5) = Range("B3")

   k = 2

   For i = 2 To 9

       For j = 4 To 7

           Cells(i, j) = Mid(Range("B" & k), Len(Cells(1, j)) + 2, 99)

           k = k + 1

       Next

   Next

End Sub

 

Public Sub 清除()

   Range("D2:G9").ClearContents

End Sub

 

教學影音(完整版在論壇):

 

教學影音完整版在論壇:

https://groups.google.com/forum/#!forum/scu_excel_vba2_86

 

課程特色:

1.如何將函數轉成VBA2.VBA與資料庫快速結合

 

EXCEL函數 VBA程式設計資料庫與網路資料是分別屬於不同領域的知識,

但卻是目前大家都需要的一項專業技能,要把三者融合的很好實在非常不容易,

剛好我有近20年的VB程式設計資料庫設計的經驗,

教EXCEL函數與相關課程也有多年,因此清楚如何把最重要的知識教給大家,

ADO資料庫設計的知識非常多,但根據我多年的設計實務經驗,

覺得最重要的是掌握SQL語言,就可以輕易的完成查詢、新增、修改與刪除等功能,

就可以輕易的完成自己想處理的大量資料,大大提高工作效率了!

 

上課用書是:

Excel函數&VBA其實很簡單(http://www.books.com.tw/exep/prod/booksfile.php?item=0010457292)

Excel VBA 與資料庫整合大活用(http://www.books.com.tw/exep/prod/booksfile.php?item=0010463634)

 

完整教學影音DVD申請:http://goo.gl/ZlBZE

論壇:http://groups.google.com/group/labor_excel_vba?hl=zh-TW

 

其他相關學習:

 

函數東吳進修推廣部, EXCEL, EXCEL VBA 函數 程式設計 線上教學 excel vba 教學 excel vba指令教學 vba範例教學excel  excel vba教學視頻 函數教學 excel函數

文章標籤

吳老師 發表在 痞客邦 留言(0) 人氣()

EXCEL VBA動態取消工作表保護與VBA專案保護設定

 

最新課程:EXCEL高階函數與大數據VBA自動化 提昇工作效率,晉身職場 Excel 高手!http://my.sce.pccu.edu.tw/MS/business/Detail.aspx?ProdId=8IP1_A6090&Source=HotClas

 

預覽畫面:

 

若設定了工作表保護之後,

無論是人工輸入或是VBA輸入

但會失敗,VBA則會跳出錯誤畫面,

因此,

可以動態的將保護取消,之後再動態的加上保護,

ActiveSheet.Unprotect ("1234")


不過,因為會需要將密碼寫到程式之中,

所以保護VBA專案裡的程式碼,又是另一個問題,

因此,此次的分享主要是如何VBA動態取消工作表保護與VBA專案保護設定

 

 

教師研習時數

=SUMIF(Sheet2!$B$3:$B$16,B2,Sheet2!$C$3:$C$16)+SUMIF(Sheet3!$B$3:$B$14,B2,Sheet3!$C$3:$C$14)

 

如何保護公式與資料:

 

**如何動態輸入公式到儲存格中

 

 

Public Sub 研習總時數()

   ActiveSheet.Unprotect ("1234")

   For i = 2 To Range("A2").End(xlDown).Row

       Cells(i, "C") = "=SUMIF(Sheet2!$B$3:$B$16,B" & i & ",Sheet2!$C$3:$C$16)+SUMIF(Sheet3!$B$3:$B$14,B" & i & ",Sheet3!$C$3:$C$14)"

   Next

   ActiveSheet.Protect ("1234")

End Sub

Public Sub 研習總時數清除()

   ActiveSheet.Unprotect ("1234")

   For i = 2 To Range("A2").End(xlDown).Row

       Cells(i, "C") = ""

   Next

   ActiveSheet.Protect ("1234")

End Sub

 

 

 

教學影片:

 

教學影音完整版在論壇:

https://groups.google.com/forum/#!forum/scu_excel_vba2_86

 

課程特色:

1.如何將函數轉成VBA2.VBA與資料庫快速結合

 

EXCEL函數 VBA程式設計資料庫是分別屬於三個領域的知識,

但卻是目前大家都需要的一項專業技能,要把三者融合的很好實在非常不容易,

剛好我有近20年的VB程式設計資料庫設計的經驗,

教EXCEL函數與相關課程也有多年,因此清楚如何把最重要的知識教給大家,

ADO資料庫設計的知識非常多,但根據我多年的設計實務經驗,

覺得最重要的是掌握SQL語言,就可以輕易的完成查詢、新增、修改與刪除等功能,

就可以輕易的完成自己想處理的大量資料,大大提高工作效率了!

 

上課用書是:

Excel函數&VBA其實很簡單(http://www.books.com.tw/exep/prod/booksfile.php?item=0010457292)

Excel VBA 與資料庫整合大活用(http://www.books.com.tw/exep/prod/booksfile.php?item=0010463634)

 

完整教學影音DVD申請:http://goo.gl/ZlBZE

論壇:http://groups.google.com/group/labor_excel_vba?hl=zh-TW

 

其他相關學習:

函數東吳進修推廣部, EXCEL, EXCEL VBA 函數 程式設計 線上教學 excel vba 教學 excel vba指令教學 vba範例教學excel  excel vba教學視頻 函數教學 excel函數

文章標籤

吳老師 發表在 痞客邦 留言(0) 人氣()

EXCEL VBA表單設計成績輸入將EXCEL當資料庫

 

預覽畫面:

 

為了避免因資料輸入錯誤,而產生日後修正的問題,

建議可以利用VBA的表單設計功能,

把EXCEL當成資料庫來存放資料,

這樣可以大大減少日後所衍生的問題。

步驟是先在VBA中先自訂表單,

再把所需要的元件加到表單中,

接下來建立起動表單程序,

並在新增按鈕中撰寫對應的程序,就能完成輸入的動作,

但後續尚需加入防呆機制,讓表單能更加完善,

若多人存取,則可以在結合ADO與SQL語言,和外部資料庫連結

如ACCESS或MYSQL等。

 

如何設計表單將EXCEL當成資料庫存資料

 

**如何啟動表單

1.按鈕啟動

Public Sub 啟動表單()

    home.Show

End Sub

 

2.隨工作簿啟動

 

 

**貼到新增按鈕

Private Sub CommandButton1_Click()

   '1.新增資料

   r = Range("A2").End(xlDown).Row + 1

   Cells(r, "A") = TextBox1.Text

   Cells(r, "B") = TextBox2.Text

   Cells(r, "C") = TextBox3.Text

   Cells(r, "D") = TextBox4.Text

   '2.自動帶出平均和成績判斷

   Cells(r, "E") = Round((CInt(TextBox2.Text) + CInt(TextBox3.Text) + CInt(TextBox4.Text)) / 3, 1)

   Cells(r, "F") = 成績函數(Cells(r, "E"))

   Cells(r, "G") = 成績函數多重(Cells(r, "E"))

   '3.清除資料

   TextBox1.Text = ""

   TextBox2.Text = ""

   TextBox3.Text = ""

   TextBox4.Text = ""

   '4.游標放在TextBox1上

   TextBox1.SetFocus

End Sub

 

教學影音(完整版在論壇):

 

教學影音完整版在論壇:

https://groups.google.com/forum/#!forum/scu_excel_vba2_86

 

課程特色:

1.如何將函數轉成VBA2.VBA與資料庫快速結合

 

EXCEL函數 VBA程式設計資料庫是分別屬於三個領域的知識,

但卻是目前大家都需要的一項專業技能,要把三者融合的很好實在非常不容易,

剛好我有近20年的VB程式設計資料庫設計的經驗,

教EXCEL函數與相關課程也有多年,因此清楚如何把最重要的知識教給大家,

ADO資料庫設計的知識非常多,但根據我多年的設計實務經驗,

覺得最重要的是掌握SQL語言,就可以輕易的完成查詢、新增、修改與刪除等功能,

就可以輕易的完成自己想處理的大量資料,大大提高工作效率了!

 

上課用書是:

Excel函數&VBA其實很簡單(http://www.books.com.tw/exep/prod/booksfile.php?item=0010457292)

Excel VBA 與資料庫整合大活用(http://www.books.com.tw/exep/prod/booksfile.php?item=0010463634)

 

完整教學影音DVD申請:http://goo.gl/ZlBZE

論壇:http://groups.google.com/group/labor_excel_vba?hl=zh-TW

 

其他相關學習:

 

函數東吳進修推廣部, EXCEL, EXCEL VBA 函數 程式設計 線上教學 excel vba 教學 excel vba指令教學 vba範例教學excel  excel vba教學視頻 函數教學 excel函數

文章標籤

吳老師 發表在 痞客邦 留言(0) 人氣()

INDEX與INDIRECT函數將單欄資料轉為三欄與VBA

 

預覽畫面:


常遇到儲存格中若有單欄資料要分為三欄多欄資料,

若不懂的用INDEX等查詢函數,配合COLUMN與ROW參照函數

可能要用非常多的時間才能完成工作,

但若懂得用INDEX或INDIRECT函數

馬上就可以輕易完成結果,當然更大量資料與重複應用,

還是建議用VBA來完成

最後補充說明將三欄再轉為一欄的邏輯說明。

 

通訊錄單欄轉三欄

 

**COLUMN&ROW

 

 

=COLUMN()-2+(ROW()-2)*3

**INDEX

 

=INDEX($A$1:$A$18,COLUMN()-2+(ROW()-2)*3,1)

 

**REPLACE

 

=REPLACE(INDEX($A$1:$A$18,COLUMN()-2+(ROW()-2)*3,1),1,LEN(C$1),"")

 

**INDIRECT與MID函數

 

=MID(INDIRECT("A"&COLUMN()-2+(ROW()-2)*3),LEN(C$1)+1,99)

**VBA程式碼與畫面

 

 

Public Sub 通訊錄_Range輸出()

   '1.列迴圈

   For i = 2 To 7

       '2.欄迴圈

       For j = 3 To 5

           '3.輸出結果

           Cells(i, j) = Range("A" & j - 2 + (i - 2) * 3)

           '4.切割文字

           Cells(i, j) = Mid(Cells(i, j), Len(Cells(1, j)) + 1, 99)

       Next

   Next

End Sub

 

Public Sub 清除()

   Range("C2:E7").ClearContents

End Sub

 

**三欄轉回一欄

=INDEX($C$2:$E$7,INT((ROW()-1)/3)+1,MOD(ROW()-1,3)+1)

 

教學影音(完整版在論壇):

 

教學影音完整版在論壇:

https://groups.google.com/forum/#!forum/scu_excel_vba2_86

 

課程特色:

1.如何將函數轉成VBA2.VBA與資料庫快速結合

 

EXCEL函數 VBA程式設計資料庫是分別屬於三個領域的知識,

但卻是目前大家都需要的一項專業技能,要把三者融合的很好實在非常不容易,

剛好我有近20年的VB程式設計資料庫設計的經驗,

教EXCEL函數與相關課程也有多年,因此清楚如何把最重要的知識教給大家,

ADO資料庫設計的知識非常多,但根據我多年的設計實務經驗,

覺得最重要的是掌握SQL語言,就可以輕易的完成查詢、新增、修改與刪除等功能,

就可以輕易的完成自己想處理的大量資料,大大提高工作效率了!

 

上課用書是:

Excel函數&VBA其實很簡單(http://www.books.com.tw/exep/prod/booksfile.php?item=0010457292)

Excel VBA 與資料庫整合大活用(http://www.books.com.tw/exep/prod/booksfile.php?item=0010463634)

 

完整教學影音DVD申請:http://goo.gl/ZlBZE

論壇:http://groups.google.com/group/labor_excel_vba?hl=zh-TW

 

其他相關學習:

 

函數東吳進修推廣部, EXCEL, EXCEL VBA 函數 程式設計 線上教學 excel vba 教學 excel vba指令教學 vba範例教學excel  excel vba教學視頻 函數教學 excel函數

文章標籤

吳老師 發表在 痞客邦 留言(0) 人氣()

從計算數字個數到留下數字或英文或中文自訂函數

 

預覽畫面:


常遇到儲存格中若有英文(分大小寫)、數字和中文夾雜

但若只要取出其中的數字或英文或中文,

不懂VBA,這個問題將非常麻煩,資料少還可以徒法煉鋼,

慢慢複製貼上,但若資料非常巨量,將是巨大麻煩,

本文分享從計算數字個數開始,

MID、CODE、ROW、IFFERROR、SUM加上陣列計算數字個數,

已經夠複雜的了,若要再取出數字部分,那就更加困難,

建議改為VBA的自訂函數,

除了可以計算數字個數與非數字個數,

亦可留下數字,或英文或中文教您學會如何簡單自訂VBA函數

 

1.計算數字個數公式:

{=SUM(IFERROR((CODE(MID(A2,ROW($1:$99),1))>47)*(CODE(MID(A2,ROW($1:$99),1))

 

2.計算非數字個數公式:

{=SUM(IFERROR((CODE(MID(A2,ROW($1:$99),1))57),0))}

 

**內碼表:

 

1.首字轉編碼

=CODE(MID(A2,1,1))

 

2.判斷48-57間

=(CODE(MID(A2,1,1))>47)*(CODE(MID(A2,1,1))

=IFERROR((CODE(MID(A2,1,1))>47)*(CODE(MID(A2,1,1))

3.數字個數

=SUM(IFERROR((CODE(MID(A2,{1,2,3,4,5,6,7,8,9},1))>47)*(CODE(MID(A2,{1,2,3,4,5,6,7,8,9},1))<58),0))

4.數字個數陣列(Ctrl+Shift+Enter)

{=SUM(IFERROR((CODE(MID(A2,{1,2,3,4,5,6,7,8,9},1))>47)*(CODE(MID(A2,{1,2,3,4,5,6,7,8,9},1))<58),0))}

5.非數字個數

{=SUM(