公告版位

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

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

EXCEL下拉清單用VBA自動查詢與顯示不同資料

 

這是延伸之前撰寫的一篇文章:

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


預覽畫面:

 

雖說用EXCEL的內建函數也可以做出類似的效果,

但要用IF、SMALL、IFERROR函數,還要會在EXCEL中執行陣列

授課的結果,大多學員幾乎陣亡。

反而用VBA來撰寫自動查詢與顯示不同資料,

似乎就變簡單了,

只要會撰寫簡單的 For迴圈,用Cells物件

B到E欄資料,複製到G到J欄

配合變數 k ,就可以逐一的將資料複製過來,

當然資料也可以是在不同的工作表或工作簿。

反而用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

 

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

 

教學影音完整版在論壇:

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具有進度狀態條功能(表單設計)

 

 

示意畫面:

 

緣起:

由於範例黑名單篩選,需要查詢兩個範圍是否有相同資料,

需要耗費時間比對,因此會有一小段時間需要讓使用者等待,

此時若是有個進度狀態調出現,就可以讓使用者知道所需等待時間,

與進行的進度,這樣可以讓VBA程式更加友善。

但是該如何做,從那下手呢?

首先需要知道的事VBA的表單設計,

其次是當啟動表單之後,會觸發Activate事件,

所以需要將狀態條的程式寫在這裡,

讓迴圈中加入更新狀態條的比例。

以下是詳細步驟截圖:

 

1.設計表單

加入Label控制項(大A)

2.增加啟動表單功能

Public Sub 查詢黑名單_表單()

   home.Show

End Sub

 

3.在Activate事件裡撰寫程式

Private Sub UserForm_Activate()

   PB.Width = 0

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

   k = 1

   '1.取查詢名單和黑名單字串比對

   For i = 2 To r

       Sheets(1).Cells(i, "B") = "=CountIf(黑名單, A" & i & ")"

       '2.將結果寫到查詢結果

       If Sheets(1).Cells(i, "B") >= 1 Then

           Sheets(3).Cells(k, "A") = Sheets(1).Cells(i, "A")

           k = k + 1

       End If

       PB.Width = (i - 1) * (200 /r)

       Me.Repaint

   Next

   home.Hide

End Sub

 

4.在EXCEL中增加啟動表單按鈕

所以如果按下按鈕,就會啟動進度狀態條表單,

並觸發Activate事件裡的程式,

此時就會到進度狀態條表單畫面會出現了。

也就是將來如果有需要等待的VBA程式,

就可以加入進度狀態條,讓程式更加專業有趣。

 

教學影片:

 

 

其他相關學習:

教學論壇:

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

 

與前幾期的課程雖然用的是相同的範例,但最大的不同在:

1.除了解說建函數公式,並將之轉成自訂函數,把複雜的公式變簡單。

2.如何將複雜的公式變成簡單的按鈕,按下按鈕就自動完成工作。

 

內容主要分成:

1.常用函數

2.進階函數應用

3.從函數到VBA設計

4.如何自訂函數

5.VBA程式設計入門

6.如何錄製巨集與修改

7.如何將大量資料轉存到資料庫

8.如何讀取資料庫資料

詳細目錄:http://goo.gl/eQptxx

 

有講義與範例和完成的畫面公式與程式碼,

只要按照每周的順序學習,學會EXCEL VBA自動化絕非難事,

優點:

1.可非線性學習:可按照自己最不熟的部分多次學習。

2.可反覆學習:有疑問可以多次聽講,保證學的會。

3.可攜帶學習:只要有瀏覽器就可以播放SWF檔,MAC電腦也沒問題。

 

課程理念:

1.以循序漸進的方式, 透過詳細的說明和實用的Excel VBA範例, 逐步了解整個 VBA 的架構與輪廓,進而學習 VBA 變數、函式及邏輯的觀念, 即使沒有任何程式設計基礎, 也能自己親手撰寫 VBA 程序來提昇工作效率, 晉身職場 Excel 高手! 2.進而解說EXCEL與資料庫的結合,將EXCEL當成資料庫來使用,結合函數、VBA等更深入的功能,讓資料處理和分析的應用更上層樓。 3.將結合GOOGLE雲端試算表,教您如何將EXCEL函數雲端化與網路化。

 

更多EXCEL VBA連結:

01_EXCEL函數與VBA(入門) http://terry55wu.blogspot.tw/p/excelvba.html

02_EXCEL VBA自動化教學(進階) http://terry55wu.blogspot.tw/p/excel-vba.html

 

吳老師 2019/5/21

 

 

大數據, 巨集錄製, 函數東吳進修推廣部, 表單, 處理, 資料庫, ADO, EXCEL, excel函數教學, excel函數應用, SQL, VBA, vba教學視頻

文章標籤

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

使用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 = ""