Đến nội dung


Hình ảnh
- - - - -

Lập trình cho Excel


  • Please log in to reply
61 replies to this topic

#1 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 17 November 2007 - 01:54 PM

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


  • 5

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#2 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 19 November 2007 - 10:55 AM

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.

Hình đã gửi


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ó.

Hình đã gửi


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

Hình đã gửi


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:

Hình đã gửi

Hình đã gửi

Cách gọi Function:

Hình đã gửi


Đế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.
  • 5

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#3 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 20 November 2007 - 01:40 PM

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

  • 8

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#4 ngayve324

ngayve324

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 515 Bài viết
Điểm đánh giá: 270 (khá)

Đã gửi 25 November 2007 - 05:26 PM

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:
  • 1

#5 conghaice

conghaice

    biết vẽ pline

  • Members
  • PipPip
  • 67 Bài viết
Điểm đánh giá: 56 (tàm tạm)

Đã gửi 25 November 2007 - 05:37 PM

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 /@
  • 0

#6 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 26 November 2007 - 02:06 PM

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:
  • 1

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#7 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 26 November 2007 - 02:20 PM

(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

Hình đã gửi

Hình đã gửi

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.
  • 2

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#8 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 04 December 2007 - 01:16 PM

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

Hình đã gửi

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.

Hình đã gửi
  • 4

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#9 FoJ

FoJ

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 04 December 2007 - 01:23 PM

cảm ơn anh nhé, em đang cần cái này, hay quá
  • 0

#10 duongsatdn

duongsatdn

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1657 Bài viết
Điểm đánh giá: 761 (tốt)

Đã gửi 30 January 2008 - 09:51 AM

Bác JIN lâu quá chưa ra thêm bài nào ở topic này..., tiếp đi bác.
  • 1

#11 kien_ksxd

kien_ksxd

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: 27 (tàm tạm)

Đã gửi 10 April 2008 - 11:04 AM

nữa đi anh, nữa đi anh, cố lên anh, áhhhhhh gần được rồi anh, thêm nữa đi anh, á á á á em iu anh lắm. pót tiếp đi anh, anh nha
  • 0

#12 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 10 April 2008 - 06:10 PM

: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.
  • 1

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#13 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 21 April 2008 - 09:24 AM

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,...
  • 2
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#14 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 21 April 2008 - 09:59 AM

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.
  • 1

#15 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 23 April 2008 - 11:02 PM

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

http://www.giaiphape...hread.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.
  • 1
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#16 tienlagiay_dxt

tienlagiay_dxt

    biết lệnh trim

  • Members
  • PipPipPip
  • 191 Bài viết
Điểm đánh giá: 185 (tàm tạm)

Đã gửi 24 April 2008 - 09:34 AM

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
  • 1

#17 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 24 April 2008 - 09:44 AM

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?
  • 0

#18 ngayve324

ngayve324

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 515 Bài viết
Điểm đánh giá: 270 (khá)

Đã gửi 24 April 2008 - 09:51 AM

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ộ.
  • 0

#19 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 01 May 2008 - 01:15 PM

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.
  • 2
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#20 hadongnat

hadongnat

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 07 May 2008 - 11:40 PM

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
  • 0