Chuyển đến nội dung
Diễn đàn CADViet
Jin Yong

Lập trình cho Excel

Các bài được khuyến nghị

I. Mở đầu.

Excel là công cụ phổ biến trong việc lưu dữ liệu, xử lý số liệu cũng như thực hiện các phép toán. Bản thân cái tên Excel (excellent) cũng thể hiện niềm tự hào không nhỏ của Microsoft khi sáng tạo ra chương trình này. Đối với các kỹ sư xây dựng, việc xử dụng các bảng tính từ excel để thiết kế kết cấu đã không còn gì là lạ lẫm. Dưới đây xin được trình bày các kỹ năng cơ bản để các bạn muốn tím hiểu về lập trình cho excel có thể chủ động hơn trong việc thành lập các bảng tính.

II. VBA.

VBA (Visual Basic for Application) là công cụ hữu hiệu và chủ yếu để lập trình cho Excel.
Để mở cửa sổ VBA, bạn dùng menu: Tools à Macro à Visual Basic Editor hoặc dùng tổ hợp phím Alt + F11.

1Goto.jpg
Giao diện của VBA gồm 3 phần cơ bản và được mặc định là:
1. Cửa sổ Object, là nơi bạn kích vào các đối tượng để làm việc.
2. Cửa sổ Properties, là nơi bạn thay đổi thuộc tính các đối tượng (Chủ yếu dùng để tạo form)
3. Cửa sổ soạn thảo, là nơi để bạn tiến hành viết code.

2VBA.jpg

  • Vote tăng 5

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

III. Nhập môn Coding.

 

Bây giờ chúng ta bắt đầu làm quen với việc viết code qua một ví dụ đơn giản.

 

Các đoạn mã thông thường được viết trong các Module của VBA, bạn create một module bằng menu Insert à Module hoặc làm như Picture ở dưới.

 

3CreateModul.jpg

 

 

Khi một Module được khởi tạo, cửa sổ soạn thảo 3 (bài 1) cũng đổi sang nền trắng cho thấy nội dung (mới đầu là rỗng) và bạn hoàn toàn có thể bắt đầu viết code cho nó.

 

4Module.jpg

 

 

Đây là một đoạn code đơn giản:

 

5Code.jpg

 

 

Có hai loại tổ hợp mã (chương trình con) cơ bản là SubFucntion.

- Sub (hay thường được gọi là thủ tục) là một đoạn mã mang chức năng điều khiển: lấy dữ liệu, xử lý và xuất dữ liệu. Sub được gọi thông qua các nút lệnh (button của form hoặc MenuButton của Menu trong Excel) hoặc menu Tools à Macro à Macros… Sub cũng có thể được gọi trong các Sub hoặc Function khác.

Sub thường có cấu trúc như sau:

 

Sub Tên_thủ_tục ()

 

Lệnh1

 

Lệnh2

 

Lệnh3

 

 

End Sub

 

Tên_thủ_tục là một chuỗi viết liền, không dấu. Bạn nên đặt tên thủ tục sao cho dễ nhớ trong khi gọi.

 

 

- Function (hay thường được gọi là hàm) là một đoạn mã bao gồm các phép toán mà kết quả là trả về một giá trị nào đó thông qua tên hàm. Function (hàm) được gọi trực tiếp trong các Cells (vì nó có chức năng trả về giá trị) như các hàm cơ bản khác của excel (MAX, MIN, SIN, COS, TAN…). Function cũng có thể được gọi trong các Function hoặc Sub khác.

Function thường có cấu trúc như sau:

 

Function Tên_hàm (Biến_1, Biến_2, Biến 3…)

 

Lệnh1

 

Lệnh2

 

Lệnh3

 

 

Tên_hàm = …..

 

End Function

 

Tên_hàm là một chuỗi viết liền, không dấu. Bạn nên đặt tên hàm sao cho dễ nhớ trong khi gọi. Phép gán “Tên_hàm =” là yêu cầu có thể gọi là bắt buộc. Trong cả hàm bạn tối thiểu phải có một lệnh như thế để định giá trị cho hàm, nếu không thì việc bạn viết code cho nó là vô nghĩa, và giá trị trả về cho nó luôn là 0.

 

 

Cách gọi Sub:

 

6Macro.jpg

 

7RunMacro.jpg

 

Cách gọi Function:

 

8LoadFunction.jpg

 

 

Đến đây sẽ có bạn bật cười mà rằng: việc tính chu vi thì Excel cũng có thể giải quyết ngon lành, việc gì mà phải dùng module với code cho nó to tát!

 

:bigsmile:

 

Thật ra trên chỉ là một ví dụ đơn giản, chúng ta có thể viết những đoạn mã dài mà bạn không thể viết gọn trong sheet của excel được.

 

 

Trên đây đã trình bày các bước đơn giản để lập trình cho excel. Bạn cần trang bị cho mình những kiến thức về việc viết mã. Ngôn ngữ của Visual Basic khá đơn giản, và nó rất gần với Turbo Pascan.

  • Vote tăng 5

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

IV. Làm việc với dữ liệu.

 

Bao gồm đọc (load, get…), xử lý, và xuất kết quả.

Tuỳ thuộc vào nguồn của dữ liệu (thu thập bằng tay, bằng các chương trình khác hay SAP hoặc ETABS) mà dữ liệu có thể là: nằm ngay trong một Sheet của Excel, nằm trong một file text (*.txt), hoặc nằm trong file database (*.mdb). Sau đây xin giới thiệu về cách đọc và xuất dữ liệu với 3 dnạg thông thường này.

1. Đọc và xuất dữ liệu từ một Sheet

 

X = Sheet1.Cells(R_ID, C_ID)
Sheet1.Cells(R_ID, C_ID) = Y

 

Với R_ID và C_ID là số thứ tự của dòng (row) và cột (column).

Dòng thứ nhất là lệnh lấy giá trị của ô có định vị dòng = R_ID, và cột = C_ID trong sheet1 gán cho biến X. Ví dụ: X = sheet1.Cells(2,3) là lấy giá trị của ô C2 ở sheet1 gán cho X.

Dòng thứ hai là lệnh lấy giá trị của biến X đặt vào ô có định vị dòng = R_ID, và cột = C_ID trong sheet1. Ví dụ: Sheet1.Cells(1,1)=2 là đặt giá trị ô A1 bằng 2. hoặc Sheet1.Cells(3,1) = "Hello" là đặt giá trị ô A3 là "Hello". Lúc này trong sheet1 ô A3 sẽ hiện lên chữ: Hello

2. Đọc và xuất dữ liệu từ một file text (*.txt)

Vốn là Visual Basic, VBA cũng hỗ trợ các kiểu đọc file dữ liệu dạng text thông thường. Chẳng hạn: lệnh lấy dữ liệu từ một file

 

Exp = "D:\VB\Hung\MagicOfLove\magic.vbp"
Open Exp For Input As #1
Do While EOF(1) = False
i = i + 1
Line Input #1, Dem
Close #1

 

lệnh xuất (ghi) dữ liệu vào một file:

 

Open FileName For Output As #1
For i = 1 To Sec_Num
Print #1, Sec_List(i)
Next
Close #1

  • Vote tăng 8

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bác Jin có time thì viết giới thiệu thêm đi. đọc mấy cái mà bắt đầu thấy khoái rùi :) :bigsmile:

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bác Jin có time thì viết giới thiệu thêm đi. đọc mấy cái mà bắt đầu thấy khoái rùi :) :bigsmile:

 

Diễn đàn www.giaiphapexcel.com

Có lẽ đây là niềm tự hào của người Việt về excel. Trong đó tập hợp quá nhiều con người có niềm đam mê, tâm huyết vì 1 cộng đồng mà họ làm nên những điều thật là tuyệt.

Chúc mọi người vui và kiếm được nhiều thông tin /@

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Diễn đàn www.giaiphapexcel.com

Có lẽ đây là niềm tự hào của người Việt về excel. Trong đó tập hợp quá nhiều con người có niềm đam mê, tâm huyết vì 1 cộng đồng mà họ làm nên những điều thật là tuyệt.

Chúc mọi người vui và kiếm được nhiều thông tin /@

Diễn đàn Giải Pháp Excel dĩ nhiên là niềm tự hào chung của mọi người. Nhưng giữa một biển dữ liệu mênh mông như thế, thật khó để cho những người bắt đầu chọn lọc.

Jin không có quá nhiều thm vọng, Jin chỉ muốn cung cấp cho những người mới bắt đầu, và quan tâm đến CADVIET, một cách tiếp cận dễ dàng nhất với công tác lập trình - những điều cần nhất cho kỹ sư xây dựng. Để rồi sau đó nâng cao trình độ ở diễn đàn Giải Pháp Excel

Các bài viết trên ở góc độ chủ quan, nên dĩ nhiên còn nhiều thiếu sót, mong các cao thủ lượng thứ :bigsmile:

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

(Tiếp #3)

 

3. Đọc dữ liệu từ file Microsoft Data Base (*.mdb)

Với những người có nhu cầu đọc dữ liệu từ SAP, ETABS hay các chương trình khác, làm việc với *.mdb dĩ nhiên rất cần thiết.

Trong VBA, để đọc được dữ liệu từ *.mdb cần có bộ hỗ trợ liên kết động của Micrrosoft - DAO. Nó nằm sẵn trong hệ thống và bạn chỉ việc khai báo.

Bạn khai báo qua menu Tool --> References

 

1Referencer.jpg

 

2DAO.jpg

 

Một ví dụ cho việc đọc dữ liệu:

 

Dim DB As Database
Dim rstFrameSection As Recordset
Dim VD
Set DB = OpenDatabase("D:\VD.mdb")
Set rstFrameSection = DB.OpenRecordset("SELECT * FROM [Frame Section Assignments]")
rstFrameSection.Filter = "Story = STORY4"
VD = rstFrameSection.Fields("SectionName")

 

Trong ví dụ trên, DB như mảng dữ liệu đã được mở qua dòng lệnh số 3

Dòng lệnh số 4 mở một bảng (table) trong file dữ liệu này - ở đây là bảng Frame Section Assignments .

Dòng lệnh số 5 lọc bảng dữ liệu trên, chỉ để lại những record thoả mãn cột Story có giá trị là STORY4

Dòng lệnh số 6, đọc giá trị tại cột SectionName của bảng dữ liệu (đã được lọc) trên.

 

Bạn nên tham khảo cấu trúc một file DataBase được xuất ra từ SAP hay ETABS để hiểu rõ hơn ví dụ trên.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

V. Mổ xẻ file dữ liệu xuất ra từ ETABS (*.mdb)

 

1. Xuất File dữ liệu từ Etabs.

Etabs hỗ trợ nhiều kiểu file xuất ra, trong đó thông dụng và dễ làm việc nhất vẫn là *.mdb, bởi vì nó dễ dàng đọc được bằng các hàm hỗ trợ của hệ thống các chương trình của Microsoft - một chuẩn đã được chấp nhận.

Bạn xuất dữ liệu bằng menu File -> Export -> Save Input/Output as Access Database File

 

1MenuExport.jpg

 

Tuy nhiên, bạn chỉ nên xuất những dữ liệu cần thiết cho việc tính toán, theo kinh nghiệm của tôi, nó nằm trong các bảng:

MODEL DEFINITION

- Building Data

- Property Definitions

- Frame Assignments

ANALYSIS RESULTS

- Reaction

- Frame Output

 

Chừng ấy bảng có thể cho bạn truy tìm được tiết diện và nội lực của các cấu kiện; phản lực tại móng.

Do cách khai báo đặc trưng của vật liệu tuân theo các tiêu chuẩn của nước ngoài, nên chúgn ta không nhất thiết phải lấy dữ liệu này, thay vào đó bằng việc phát triển giao diện cho người dùng lựa chọn đặc trưng vật liệu tại các chương trình ứng dụng.

Bạn cũng chỉ nên lựa chọn những tổ hợp cần thiết để xuất ra, tránh phức tạp cho quá trình viết ứng dụng.

 

2Export.jpg

  • Vote tăng 4

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

:bigsmile:

 

Mặc dù có nhiều lời khuyến khích (cảm ơn các bạn), nhưng Jin nghĩ về cơ bản như thế là đã xong rồi. Trong quá trình thực hành, có gì vướng mắc chúng ta hãy trao đổi thêm.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Còn thiếu rất nhiều mới gọi là cơ bản bạn Jin Yong ạ, ví dụ như điều khiển có điều kiện (if .. then), vòng lặp (for...next,do...loop,...), các đối tượng như Application, Workbook, Worksheet, Range, Selection, menu,...

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Còn thiếu rất nhiều mới gọi là cơ bản bạn Jin Yong ạ, ví dụ như điều khiển có điều kiện (if .. then), vòng lặp (for...next,do...loop,...), các đối tượng như Application, Workbook, Worksheet, Range, Selection, menu,...

'Cơ bản' ở đây mang tính cảm quan định tính, quan niệm của Jin chỉ là khái quát cho dân kỹ thuật chạm tay vào VBA chứ chưa đạt tầm có thể lập trình tốt được.

 

Biết rằng Phantuhuong rất am tường về VBA, mong được Phantuhuong bổ sung thêm để topic này ngày càng sâu sắc giúp dân kỹ thuật có thể dùng VBA cho ACAD.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Kiến thức VBA cơ bản trong Excel tôi đã up ở mục dưới rồi anh Nguyen Hoanh ạ:

 

http://www.giaiphapexcel.com/forum/showthread.php?t=888

 

Vì đây là diễn đàn về Cad nên tôi quan tâm hơn về VBA for Cad. Tuy nhiên để lập trình tốt trong Cad, tôi vẫn cần nắm sâu hơn nữa kiến thức cơ bản về Cad thì mới biết lập trình Cad. Nhưng về VBA for Cad thì ở diễn đàn này có vẻ ít người quan tâm.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Kiến thức VBA cơ bản trong Excel tôi đã up ở mục dưới rồi anh Nguyen Hoanh ạ:

 

http://www.giaiphapexcel.com/forum/showthread.php?t=888

 

Vì đây là diễn đàn về Cad nên tôi quan tâm hơn về VBA for Cad. Tuy nhiên để lập trình tốt trong Cad, tôi vẫn cần nắm sâu hơn nữa kiến thức cơ bản về Cad thì mới biết lập trình Cad. Nhưng về VBA for Cad thì ở diễn đàn này có vẻ ít người quan tâm.

Không phải vậy đâu, rất nhiều người quan tâm, chỉ là chưa có người chỉ dẫn.

Mong bác Hướng đóng góp, chia sẻ kinh nghiệm cho diễn đàn

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Không phải vậy đâu, rất nhiều người quan tâm, chỉ là chưa có người chỉ dẫn.

Mong bác Hướng đóng góp, chia sẻ kinh nghiệm cho diễn đàn

Hoàn toàn nhất trí! Rất mong được anh PhanTuHuong tham gia. Tuyệt vời hơn nữa nếu như anh có thể vui lòng làm cánh chim đầu đàn, dẫn đường để anh em tập bay theo?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

tiếp tục đi bác PhanTuHuong và ssg. các bác thấy đó, trên bài viết các bác trên diễn đàn rất được nhiều người quan tâm và ủng hộ.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tôi cũng rất muốn tìm hiểu thêm nữa nhưng bận nhiều thứ, nhưng VBA for Excel thì có rất nhiều tài liệu rồi, bây giờ tôi sẽ tập trung sang VBA for Cad thôi.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tôi cũng rất muốn tìm hiểu thêm nữa nhưng bận nhiều thứ, nhưng VBA for Excel thì có rất nhiều tài liệu rồi, bây giờ tôi sẽ tập trung sang VBA for Cad thôi.

hoan hô visua basic

  • Vote tăng 1
  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào các bạn !

 

Lần đầu tiên mình tham gia diễn đàn, và chưa biết gì về VBA,mình chỉ biết nó rất quan trọng trong xây dựng, đọc bài của các bạn mình rất muốn tham gia.Bạn Jin có những bài viết thật hay.

 

Sao tự nhiên các cuộc thảo luận lại ngưng, các bạn và bạn Jin có thể tiếp tục chỉ thảo luận đi,vì mình nghĩ nó thật hữu ích cho mọi người

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào các bạn !

 

Lần đầu tiên mình tham gia diễn đàn, và chưa biết gì về VBA,mình chỉ biết nó rất quan trọng trong xây dựng, đọc bài của các bạn mình rất muốn tham gia.Bạn Jin có những bài viết thật hay.

 

Sao tự nhiên các cuộc thảo luận lại ngưng, các bạn và bạn Jin có thể tiếp tục chỉ thảo luận đi,vì mình nghĩ nó thật hữu ích cho mọi người

Tôi thấy ý kiến này đúng!

 

 

The world có thể lên diễn đàn: giaiphapexcel mà discovery.

(có gì hay lại up lại diễn đàn này)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tôi thấy ý kiến này đúng!

 

 

The world có thể lên diễn đàn: giaiphapexcel mà discovery.

(có gì hay lại up lại diễn đàn này)

 

Uh ! Cảm ơn bạn nhiều bạn có tham gia diễn đàn giaiphapexcel không ?

Nếu mình biết nhất định mình sẽ hướng dẫn lại cho mọi người .Mình rất hi vọng vậy

 

Thân chào

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
V. Mổ xẻ file dữ liệu xuất ra từ ETABS (*.mdb)

 

1. Xuất File dữ liệu từ Etabs.

Etabs hỗ trợ nhiều kiểu file xuất ra, trong đó thông dụng và dễ làm việc nhất vẫn là *.mdb, bởi vì nó dễ dàng đọc được bằng các hàm hỗ trợ của hệ thống các chương trình của Microsoft - một chuẩn đã được chấp nhận.

Bạn xuất dữ liệu bằng menu File -> Export -> Save Input/Output as Access Database File

 

1MenuExport.jpg

 

Tuy nhiên, bạn chỉ nên xuất những dữ liệu cần thiết cho việc tính toán, theo kinh nghiệm của tôi, nó nằm trong các bảng:

MODEL DEFINITION

- Building Data

- Property Definitions

- Frame Assignments

ANALYSIS RESULTS

- Reaction

- Frame Output

 

Chừng ấy bảng có thể cho bạn truy tìm được tiết diện và nội lực của các cấu kiện; phản lực tại móng.

Do cách khai báo đặc trưng của vật liệu tuân theo các tiêu chuẩn của nước ngoài, nên chúgn ta không nhất thiết phải lấy dữ liệu này, thay vào đó bằng việc phát triển giao diện cho người dùng lựa chọn đặc trưng vật liệu tại các chương trình ứng dụng.

Bạn cũng chỉ nên lựa chọn những tổ hợp cần thiết để xuất ra, tránh phức tạp cho quá trình viết ứng dụng.

 

2Export.jpg

 

Cảm ơn bạn rất nhiều :

 

Sau khi làm như bạn hướng dẫn mình sẽ có file như thế này phải không ?

 

http://www.cadviet.com/upfiles/ScreenHunte...May_10_1915.gif

 

Mình định up cả kết quả lên luôn nhưng không được.

 

Làm sao mình có thể đọc được kết quả hả bạn.( Xuất kết quả sang EXCEL )

 

Thân chào

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
(Tiếp #3)

 

3. Đọc dữ liệu từ file Microsoft Data Base (*.mdb)

Với những người có nhu cầu đọc dữ liệu từ SAP, ETABS hay các chương trình khác, làm việc với *.mdb dĩ nhiên rất cần thiết.

Trong VBA, để đọc được dữ liệu từ *.mdb cần có bộ hỗ trợ liên kết động của Micrrosoft - DAO. Nó nằm sẵn trong hệ thống và bạn chỉ việc khai báo.

Bạn khai báo qua menu Tool --> References

 

1Referencer.jpg

 

2DAO.jpg

 

Một ví dụ cho việc đọc dữ liệu:

 

Dim DB As Database
Dim rstFrameSection As Recordset
Dim VD
Set DB = OpenDatabase("D:\VD.mdb")
Set rstFrameSection = DB.OpenRecordset("SELECT * FROM [Frame Section Assignments]")
rstFrameSection.Filter = "Story = STORY4"
VD = rstFrameSection.Fields("SectionName")

 

Trong ví dụ trên, DB như mảng dữ liệu đã được mở qua dòng lệnh số 3

Dòng lệnh số 4 mở một bảng (table) trong file dữ liệu này - ở đây là bảng Frame Section Assignments .

Dòng lệnh số 5 lọc bảng dữ liệu trên, chỉ để lại những record thoả mãn cột Story có giá trị là STORY4

Dòng lệnh số 6, đọc giá trị tại cột SectionName của bảng dữ liệu (đã được lọc) trên.

 

Bạn nên tham khảo cấu trúc một file DataBase được xuất ra từ SAP hay ETABS để hiểu rõ hơn ví dụ trên.

 

Đọc kết quả thì sẽ làm như thế này :

 

http://www.cadviet.com/upfiles/ScreenHunte...May_10_1922.gif

 

Chẳng thấy kết quả nào hết? các bạn chỉ mình với

 

Còn cái CODE thì đánh y nguyên vào phải không bạn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×