Tình hình là em muốn tự học VBA (vì mỗi lần muốn làm gì cứ lên nhờ mọi người giúp thấy ngại quá) nhưng không biết bắt đầu từ đâu? tài liệu như thế nào? học ở đâu?...
nên em muốn tự học nhờ anh chị, các bạn tư vấn giúp ... cảm ơn mọi người nhiều ạ!
Tình hình là em muốn tự học VBA (vì mỗi lần muốn làm gì cứ lên nhờ mọi người giúp thấy ngại quá) nhưng không biết bắt đầu từ đâu? tài liệu như thế nào? học ở đâu?...
nên em muốn tự học nhờ anh chị, các bạn tư vấn giúp ... cảm ơn mọi người nhiều ạ!
Theo tôi thì bạn nên bắt đầu từ việc record macro sau đó xem code nó tạo ra, nghiệm từ từ sẽ ngấm sâu thôi. Thứ hai là tìm quyển sách "Lập trình VBA trong excel cho người mới bắt đầu".
Theo tôi thì bạn nên bắt đầu từ việc record macro sau đó xem code nó tạo ra, nghiệm từ từ sẽ ngấm sâu thôi. Thứ hai là tìm quyển sách "Lập trình VBA trong excel cho người mới bắt đầu".
Các bạn ấy đùa với bạn ấy (Có thể bạn ít tham gia vào diễn đàn nên không biết), bạn nhìn trên thanh địa chỉ của trình duyệt (Chính là trang bạn đang truy cập) sẽ thấy www.giaiphapexcel.com, GPE là viết tắt của từ "Giải pháp Excel".
Tình hình là em muốn tự học VBA (vì mỗi lần muốn làm gì cứ lên nhờ mọi người giúp thấy ngại quá) nhưng không biết bắt đầu từ đâu? tài liệu như thế nào? học ở đâu?...
nên em muốn tự học nhờ anh chị, các bạn tư vấn giúp ... cảm ơn mọi người nhiều ạ!
Ở đây thiếu gì người nhờ mà có gì ngại?
Theo kinh nghiệm của tôi, ngừoi nào có ý chí và khả năng tự học thì họ đã bắt đầu học rồi, không phải quanh quẩn hỏi các bước bắt đầu.
Nói tóm lại, muốn học thì cứ bắt đầu học. Chỗ nào bí thì đi hỏi. Từ việc nhỏ từ từ sẽ tích tụ lại thành việc lớn.
Lập trình VBA nó giống như tát nước. Đủ kiên nhẫn thì tát đầy ruộng. Nó không phải là xây đập thuỷ điện mà cần phải thiết kế từ đầu.
Ở đây thiếu gì người nhờ mà có gì ngại?
Theo kinh nghiệm của tôi, ngừoi nào có ý chí và khả năng tự học thì họ đã bắt đầu học rồi, không phải quanh quẩn hỏi các bước bắt đầu.
Nói tóm lại, muốn học thì cứ bắt đầu học. Chỗ nào bí thì đi hỏi. Từ việc nhỏ từ từ sẽ tích tụ lại thành việc lớn.
Lập trình VBA nó giống như tát nước. Đủ kiên nhẫn thì tát đầy ruộng. Nó không phải là xây đập thuỷ điện mà cần phải thiết kế từ đầu.
lần đầu tiên hỏi câu này, biết là sẽ bị các bạn nói thế này, nhưng thật sự cái gì không biết thì mình hỏi, còn trả lời hay giúp đỡ như thế nào là do các bạn, nhưng dù sao cũng cảm ơn nhé
Quên mất cái này:
Học thì chịu khó bỏ thời giờ quan sát một chút. Tuy ở trên (bài #16) tôi có nói "chỗ nào bí thì đi hỏi". Nhưng chẳng lẽ cái gì bạn cũng chịu là bí trước khi tự quan sát và tìm hiểu?
Nếu bạn chịu khó quan sát thì đã biết nó là gì.
lần đầu tiên hỏi câu này, biết là sẽ bị các bạn nói thế này, nhưng thật sự cái gì không biết thì mình hỏi, còn trả lời hay giúp đỡ như thế nào là do các bạn, nhưng dù sao cũng cảm ơn nhé
Biết nhằm những chỗ không cần biết.
Muốn cầu thầy thì phải biết chữ nhẫn.
Tôi là dân chuyên thống kê. Theo thống kê của tôi thì khả năng dân hay tự ái học được lập trình là dưới 50%.
Quên mất cái này:
Học thì chịu khó bỏ thời giờ quan sát một chút. Tuy ở trên (bài #16) tôi có nói "chỗ nào bí thì đi hỏi". Nhưng chẳng lẽ cái gì bạn cũng chịu là bí trước khi tự quan sát và tìm hiểu?
Nếu bạn chịu khó quan sát thì đã biết nó là gì.
xin lỗi nếu những câu hỏi của mình làm phiền bạn, lúc đầu mình nghĩ là thuật ngữ liên quan đến VBA nên mình hỏi thêm, mình cũng không ngờ các bạn chọc mình, rồi giờ thì bị bạn nói thế này, có vẻ những người mới như mình không được chào đón ở đây, xin lỗi làm phiền mọi người
Đã nói là chỉ biết những chỗ không cần biết mà.
Nếu dùng ngôn ngữ ở diễn đàn này để ví von việc dùng VBA như luyện kiếm thì bạn có thể học được các chiêu kiếm tuyệt đỉnh từ tài liệu và các "cao thủ" ở đây.
Nhưng đó là kiếm chiêu. Muón học được kiếm quyết thì ở diễn đàn này chỉ có tối đa 3 người biết kiếm quyết, trong đó có một người không phân biệt kiếm quyết và kiếm chiêu cho nên chỉ còn lại 2 ngừoi với khả năng chỉ dẫn.
Tôi bắt đầu VBA bằng cách vọc 1 đoạn code đọc số thành chữ. Lúc đầu nhìn hoa cả mắt. Code ra kết quả chưa theo ý nên tôi mò mẫm tự sửa lại, VD đọc bốn thành Tư, bỏ phần đọc số sau dấu phẩy, thêm dấu phẩy sau khi đọc mỗi nhóm số tỷ, triệu, nghìn... Mấy ký tự unicode mở rộng lại dò dẫm tìm bảng tra cho nó, rồi tìm thấy hàm chuyển nên khỏi cần bảng tra thủ công... đại loại thế. Thấy ham ham và tiếp tục vọc. Tự nhiên nó ngấm vào người. Dĩ nhiên để code được thì còn do năng khiếu nữa, lập trình ko phải ai cũng học được. Nó đòi hỏi 1 cái đầu tư duy kiểu logic, tính cẩn thận, tỷ mỉ, thích khám phá và học hỏi, tư duy sáng tạo cũng rất quan trọng vì bạn luôn phải tìm cái gì đó mới, ý tưởng mới để có động lực làm tiếp. Một cách nữa là tìm các code có sẵn trên diễn đàn để nghiên cứu , đọc các bài trả lời, tự tay bạn phải viết và chạy để kiểm nghiệm chứ nhìn theo kiểu đọc sách giáo khoa thì không ngấm vào đầu được.
Tôi bắt đầu VBA bằng cách vọc 1 đoạn code đọc số thành chữ. Lúc đầu nhìn hoa cả mắt. Code ra kết quả chưa theo ý nên tôi mò mẫm tự sửa lại, VD đọc bốn thành Tư, bỏ phần đọc số sau dấu phẩy, thêm dấu phẩy sau khi đọc mỗi nhóm số tỷ, triệu, nghìn... Mấy ký tự unicode mở rộng lại dò dẫm tìm bảng tra cho nó, rồi tìm thấy hàm chuyển nên khỏi cần bảng tra thủ công... đại loại thế. Thấy ham ham và tiếp tục vọc. Tự nhiên nó ngấm vào người. Dĩ nhiên để code được thì còn do năng khiếu nữa, lập trình ko phải ai cũng học được. Nó đòi hỏi 1 cái đầu tư duy kiểu logic, tính cẩn thận, tỷ mỉ, thích khám phá và học hỏi, tư duy sáng tạo cũng rất quan trọng vì bạn luôn phải tìm cái gì đó mới, ý tưởng mới để có động lực làm tiếp. Một cách nữa là tìm các code có sẵn trên diễn đàn để nghiên cứu , đọc các bài trả lời, tự tay bạn phải viết và chạy để kiểm nghiệm chứ nhìn theo kiểu đọc sách giáo khoa thì không ngấm vào đầu được.
Theo mình bạn chủ động tìm kiếm tư liệu và thông tin. Học từ lý thuyết cơ bản (các khái niệm cơ bản của vba) hướng theo thực hành
Tìm và đọc các bài viết về chủ đề này trên diễn đàn GPE
Ví dụ Bạn có thể đọc các bài giảng sau đây của anh befaint, anh Ptm0412 https://www.giaiphapexcel.com/diendan/threads/bài-9-function-and-sub.130769/ https://www.giaiphapexcel.com/diendan/threads/giới-thiệu-cơ-bản-về-vòng-lặp-for-next.6354/
Ngoài ra nếu bạn thực sự đam mê và muốn học VBA thì có thể tham khảo các tài liệu khác. Bạn để lại email mình sẽ gửi tài liệu.
Sau khi đã có 1 chút kiến thức về VBA nếu bạn muốn tìm hiểu sâu, bài bản hơn thì bạn tham gia các lớp của anh Nguyễn Duy Tân, anh Phan Tự Hướng và các lớp khác. Thông tin các khóa học này bạn tìm kiếm trên diễn đàn GPE sẽ ra ngay thôi
Dân gian vẫn có câu "Học thầy không tầy học bạn" , nhưng học xong bạn rồi, quay sang học thầy sẽ học được nhiều hơn ở Thầy
T.... Dĩ nhiên để code được thì còn do năng khiếu nữa, lập trình ko phải ai cũng học được. Nó đòi hỏi 1 cái đầu tư duy kiểu logic, tính cẩn thận, tỷ mỉ, thích khám phá và học hỏi, tư duy sáng tạo cũng rất quan trọng vì bạn luôn phải tìm cái gì đó mới, ý tưởng mới để có động lực làm tiếp. ....
Tôi hoàn toàn không đồng ý cái điểm "do năng khiếu". Hễ có khả năng hiểu đến toán cỡ lớp 9 (khoảng toán lượng giác) là có thể học lập trình. Nó chỉ có mấy cái lệnh và vài cái lô gic.
Cái chỗ động lực mới à chỗ quan trọng. Như tôi đã ví ở trên, bạn có đủ kiên nhẫn cầm cái gàu đi tát nước hay khong mới quan trọng. Hay chỉ nghe hàng xóm nói rồi đi sắm cái máy bơm.
Theo mình bạn chủ động tìm kiếm tư liệu và thông tin. Học từ lý thuyết cơ bản (các khái niệm cơ bản của vba) hướng theo thực hành
Tìm và đọc các bài viết về chủ đề này trên diễn đàn GPE
Ví dụ Bạn có thể đọc các bài giảng sau đây của anh befaint, anh Ptm0412 https://www.giaiphapexcel.com/diendan/threads/bài-9-function-and-sub.130769/ https://www.giaiphapexcel.com/diendan/threads/giới-thiệu-cơ-bản-về-vòng-lặp-for-next.6354/
Ngoài ra nếu bạn thực sự đam mê và muốn học VBA thì có thể tham khảo các tài liệu khác. Bạn để lại email mình sẽ gửi tài liệu.
Sau khi đã có 1 chút kiến thức về VBA nếu bạn muốn tìm hiểu sâu, bài bản hơn thì bạn tham gia các lớp của anh Nguyễn Duy Tân, anh Phan Tự Hướng và các lớp khác. Thông tin các khóa học này bạn tìm kiếm trên diễn đàn GPE sẽ ra ngay thôi
Dân gian vẫn có câu "Học thầy không tầy học bạn" , nhưng học xong bạn rồi, quay sang học thầy sẽ học được nhiều hơn ở Thầy
Người nói ra câu này (ở bài #28) là người lớn tuổi. Lớp người này đã trải qua gia đoạn "bao cấp", khó khăn đủ thứ. Từ "học tập" đối với họ có bao chứa sự bắt buọc, miễn cưỡng, và là sáo ngữ đầu môi. Khác với học hành là tự nguyện vừa học vừa thử cái mình học, do lòng hiếu học.
mình đi làm rồi, và cũng reco một vài macro đơn giản để phục vụ công việc của mình, nên giờ mình cần biết mình nên bắt đầu từ đâu thay vì cứ băng ngang như lúc trước, nhưng mà thực sự từ lúc đăng bài mình có cảm giác rất ít bạn thực sự có tâm giúp mình bằng cách chia sẻ thông tin hay kinh nghiệm, chỉ chia sẻ những cái ngoài lề, mình biết nó khó, vì khó nên mình mới hỏi và cần sự giúp đỡ của mọi người nếu dễ mình đã không đăng bài để hỏi, mong mọi người nói thẳng vào vấn đề giúp mình, cảm ơn
Em thấy câu này rất đúng với em, muốn học hỏi thì phải nhẫn . Ai chỉ thì học, ai mắng thì nghe" thông thường thì em thấy các bậc đàn anh, cha, chú người ta mắng đúng rất nhiều
Theo luật diễn đàn, bạn có quyền mách lên ban quản trị để ngừoi ta xoá (hoặc chém chặt) hết những câu trả lời ngoài lề.
Trước mắt thì tôi theo nguyên tắc không cần phải trả lời riêng cho bạn. Tôi trả lời cho những người khác trên diễn đàn.
Và những điều tôi chỉ dẫn thì tôi cũng có nói rõ rằng chúng là cái căn bản của lập trình.
Khi học toán giải tích, có những người chỉ cốt thuộc công thức tính đạo hàm. Tôi thì khác, toi bắt ngừoi học phải hiểu rằng "đạo hàm là giới hạn của dy/dx khi dx tiến về 0".
Nếu ban quản trị đồng ý với bạn rằng chỉ dẫn kiểu như vậy là lạc đề thì đó là ý ban quản trị, không phải của bạn.
Theo luật diễn đàn, bạn có quyền mách lên ban quản trị để ngừoi ta xoá (hoặc chém chặt) hết những câu trả lời ngoài lề.
Trước mắt thì tôi theo nguyên tắc không cần phải trả lời riêng cho bạn. Tôi trả lời cho những người khác trên diễn đàn.
Và những điều tôi chỉ dẫn thì tôi cũng có nói rõ rằng chúng là cái căn bản của lập trình.
Khi học toán giải tích, có những người chỉ cốt thuộc công thức tính đạo hàm. Tôi thì khác, toi bắt ngừoi học phải hiểu rằng "đạo hàm là giới hạn của dy/dx khi dx tiến về 0".
Nếu ban quản trị đồng ý với bạn rằng chỉ dẫn kiểu như vậy là lạc đề thì đó là ý ban quản trị, không phải của bạn.
vậy em xin lỗi anh chị vì đã làm phiền, có vẻ đây không phải nơi dành cho người mới bắt đầu, em đã sai ngay từ lúc đặt câu hỏi, em nghỉ mình sẽ tìm hiểu thêm trước khi có câu hỏi khác, cảm ơn mọi người nhiều ạ
mình đi làm rồi, và cũng reco một vài macro đơn giản để phục vụ công việc của mình, nên giờ mình cần biết mình nên bắt đầu từ đâu thay vì cứ băng ngang như lúc trước, nhưng mà thực sự từ lúc đăng bài mình có cảm giác rất ít bạn thực sự có tâm giúp mình bằng cách chia sẻ thông tin hay kinh nghiệm, chỉ chia sẻ những cái ngoài lề, mình biết nó khó, vì khó nên mình mới hỏi và cần sự giúp đỡ của mọi người nếu dễ mình đã không đăng bài để hỏi, mong mọi người nói thẳng vào vấn đề giúp mình, cảm ơn
Theo ý kiến chủ quan của tôi, nếu bạn thực sự muốn học lập trình VBA, thì bạn cần theo học 1 lớp VBA cơ bản.
Ở đó bạn được các thầy sẽ dạy cho bạn những kiến thức cơ bản đầu tiên. Khi bạn có những thứ cơ bản đó rồi, bạn có thể tự học, tự nghiên cứu, tự vọc.
Tuy nhiên bạn cần phải có thêm niềm đam mê yêu thích nó nữa. Ngay chính bản thân tôi, tôi cũng đi theo hướng này.
Và tất cả những việc tôi đang làm ở cơ quan, đều dùng VBA.
Chúc bạn thành công!
Theo ý kiến chủ quan của tôi, nếu bạn thực sự muốn học lập trình VBA, thì bạn cần theo học 1 lớp VBA cơ bản.
Ở đó bạn được các thầy sẽ dạy cho bạn những kiến thức cơ bản đầu tiên. Khi bạn có những thứ cơ bản đó rồi, bạn có thể tự học, tự nghiên cứu, tự vọc.
Tuy nhiên bạn cần phải có thêm niềm đam mê yêu thích nó nữa. Ngay chính bản thân tôi, tôi cũng đi theo hướng này.
Và tất cả những việc tôi đang làm ở cơ quan, đều dùng VBA.
Chúc bạn thành công!
Thay mặt BQT của diễn đàn giaiphapexcel.com (GPE), tôi đã xóa những bài viết mà tôi cho là nhạy cảm, dễ gây hiểu nhầm, mất đoàn kết, không trả lời đúng trọng tâm.
Các bạn hãy cùng nhau chung tay xây dựng vì một diễn đàn tốt đẹp nhé.
Dim sh As Worksheet
Set sh = Workbooks(1).Worksheets.Item(1) ' toi sheet 1
Set sh = Workbooks(1).Worksheets(1) ' toi sheet 1
Set sh = Workbooks(1).Worksheets.Item("Sheet1") ' toi sheet Sheet1
Set sh = Workbooks(1).Worksheets("Sheet1") ' toi sheet Sheet1
Set sh = Workbooks("copyfile.xlsm").Worksheets.Item(1) ' toi sheet 1
Set sh = Workbooks("copyfile.xlsm").Worksheets(1) ' toi sheet 1
Set sh = Workbooks("copyfile.xlsm").Worksheets.Item("Sheet1") ' toi sheet Sheet1
Set sh = Workbooks("copyfile.xlsm").Worksheets("Sheet1") ' toi sheet Sheet1
Thế có sheet cụ thể trong tập tin cụ thể thì làm thế nào truy cập tới từng vùng trên sheet đó? Đối tượng Worksheet lại có thuộc tính Range - cũng là đối tượng. Vd. truy cập tới Range
Mã:
Dim rng As Range
Set rng = Workbooks("copyfile.xlsm").Worksheets("Sheet1").Range("C2") ' la truy cap toi o C2 tren Sheet1 trong tap tin copyfile.xlsm
Range lại có thuộc tính Font - cũng là đối tượng.
Vậy thì nếu có bài toán: "Hãy tô đậm và cho mầu đỏ ô C2 trên Sheet1 của tập tin copyfile.xlsm", thì chỉ cần truy cập tới đối tượng Font của ô C2 trên Sheet1 của tập tin copyfile.xlsm rồi thiết lập thuộc tính Bold và Color của đối tượng Font thôi
Mã:
Sub he()
Dim FontObj As Font
Set FontObj = Workbooks("copyfile.xlsm").Worksheets("Sheet1").Range("C2").Font
With FontObj
.Bold = True
.Color = RGB(255, 0, 0)
End With
End Sub
Nhưng bản thân truy cập Workbooks("copyfile.xlsm").Worksheets("Sheet1").Range("C2").Font đã trả về đối tượng Font rồi nên cũng có thể không dùng biến FontObj
Mã:
Sub he()
With Workbooks("copyfile.xlsm").Worksheets("Sheet1").Range("C2").Font
.Bold = True
.Color = RGB(255, 0, 0)
End With
End Sub
1. Thuật toán.
Muốn giải quyết một vấn đề bất kỳ thì phải tìm ra được hướng đi, tìm ra thuật toán. Thuật toán là thuật toán, nó chả phụ thuộc vào VBA, Delphi hay bất cứ ngôn ngữ lập trình nào. VBA, Delphi hay các môi trường lập trình khác chỉ là công cụ để bạn thực hiện cái thuật toán đã nghĩ ra của mình. Để có thuật toán thì phải phân tích vấn đề, tư duy. Có 1 vấn đề nhưng rất có thể 100 có 100 thuật toán khác nhau. Người ta tư duy tốt, có bề dày kinh nghiệm thì có thể người ta nghĩ ra thuật toán tốt, ngắn gọn. Mình tư duy kém hơn, chưa có kinh nghiệm thì thuật toán của mình kém hơn, có thể đi vòng vèo hơn. Thế thôi.
Tôi cho một vd. không dính dáng gì tới bảng tính. Giả sử bạn có chuỗi 11 chữ số. Bạn muốn biết số đó có 4 chữ số cuối dạng ABAB (số đẹp?) hay không. Tôi nghĩ: đơn giản quá, chỉ cần "cắt" ra ký tự 1, 2, 3 và 4 tính từ cuối rồi làm 2 phép so sánh - 1 và 3, 2 và 4. Nếu 1 = 3 và 2 = 4 thì số cho trước có dạng x..xABAB. Thế thôi. Nhưng bạn đam mê Toán và bạn biết là một số có 4 chữ số sẽ có dạng ABAB khi và chỉ khi chia hết cho 101. Do vậy bạn nghĩ ra thuật toán: "cắt" ra từ cuối chuỗi có 4 ký tự và nhập vào biến số k, vd. nhập vào biến Long. Sau đó kiểm tra xem k có chia hết cho 101 không. Nếu chia hết thì chuỗi ban đầu có dạng x...xABAB, ngược lại thì không có dạng đó.
Thường cái khó là nghĩ ra hướng đi, tìm ra được thuật toán.
Cho dù bạn lập công thức trân sheet hay viết code VBA thì bạn cũng phải tìm ra hướng đi, nghĩ ra được thuật toán. Bước tiếp theo là tìm xem có những hàm nào giúp bạn thực hiện các bước của thuật toán đó. Thế thôi. Khác nhau chỉ là ở chỗ người ta nghĩ ra thuật toán hay và công thức của người ta ngắn gọn, còn của mình thì không "đẹp" như thế.
2. Khai báo biến, các cấu trúc dữ liệu, các cấu trúc của ngôn ngữ.
Trong lập trình VBA thì thường có những kết quả trung gian, và cần phải nhớ những kết quả đó để sử dụng về sau. Các biến chính là dùng để nhớ các kết quả trung gian. Nhưng nhiều khi có nhiều giá trị cần nhớ để dùng về sau và cách lôgíc duy nhất là nhớ chúng trong một cấu trúc dữ liệu gọi là "mảng" thay vì nhớ trong các biến đơn giản rời rạc. Lúc đó việc truy cập tới các giá trị rất đơn giản. Vậy thì bước đầu tiên là học về cơ bản: có những kiểu dữ liệu gì, cách khai báo biến. Cách khai báo mảng và truy cập tới từng thành phần của mảng.
Cơ bản còn là các cấu trúc của ngôn ngữ. Giả sử có bài toán: Hãy tô mầu các ô có giá trị 5 trong vùng A1:C2. Thuật toán mà ai cũng nghĩ ra là: Đọc ra lần lượt A1, B1, C1, A2, B2, C2 và kiểm tra xem có = 5 không. Nhưng nếu có vùng khủng A1:Z100 thì sao? Dùng thuật toán trên cũng được nhưng code sẽ dài lê thê. Còn nếu chưa biết trước số dòng và cột thì thuật toán bó tay. Nhưng nếu trước đó bạn đã tìm hiểu và biết VBA có cấu trúc FOR và bạn hiểu được triết lý của nó thì ở thời điểm này bạn sẽ nghĩ ra thuật toán khác: "Dò" từng dòng của vùng dữ liệu, và với mỗi dòng thì "dò" từng cột, và đọc ra giá trị của ô ở dòng và cột đang "dò". Như thế code sẽ ngắn gọn và luôn chỉ ngắn như thế dù số dòng cột có là bao nhiêu. Chính vì thế mà bước 1 là phải tìm hiểu cơ bản: VBA có những cấu trúc nào. Những cấu trúc ở đây là FOR, DO ... LOOP, IF ... THEN, SELECT CASE ... Biết được chúng thì trong giai đoạn tìm thuật toán mới có thể "nghĩ" ra thuật toán hợp lý.
Ngoài ra còn phải tìm hiểu xem VBA có những hàm gì.
Muốn làm bất cứ việc gì thì bước đầu tiên khi đầu quân cho một xưởng là phải biết trong xưởng có công cụ gì, cách hoạt động của chúng. Vì thế điểm 2 này là bài học đầu tiên.
3. Lập trình đối tượng.
Lập trình tương tác với bảng tính chẳng qua là lập trình đối tượng. Nói nôm na là phải truy cập được tới đối tượng cần quan tâm rồi sau đó gọi các phương thức của nó, hoặc đọc / thiết lập các thuộc tính của đối tượng đó. Thế thôi và chỉ thế thôi.
Trong Excel VBA thì mỗi tập tin là một đối tượng WorkBook. Trong mỗi tập tin thì mỗi sheet là một đối tượng WorkSheet. Trong mỗi sheet thì mỗi vùng (một hay nhiều ô) là một đối tượng Range. Trong mỗi Range thì vd. thuộc tính Font là đối tượng. Hiểu được, hình dung được "cấu trúc" của tập tin về mặt đối tượng thì sẽ dễ dàng truy cập tới bất cứ đối tượng nào.
Như tôi đã viết thì mọi việc chỉ là truy cập được tới đối tượng cần quan tâm rồi gọi phương thức, thuộc tính của nó. Vậy làm thế nào để truy cập được tới đối tượng bất kỳ?
Khi kích hoạt Excel và vào VBE để viết code thì bạn luôn có 1 đối tượng gọi là Application. Nó như là cái gốc. Muốn truy cập tới đối tượng này thì chỉ cần viết Application. Nhưng Application có nhiều phương thức và thuộc tính. Vd. thuộc tính WorkBooks - là đối tượng "quản lý" các tập tin hiện đang mở trong Excel. Như vậy truy cập tới đối tượng này là Application.WorkBooks. Nhưng làm cách nào để truy cập tới tập tin cụ thể trong số các tập tin đang mở?
Đối tượng Workbooks có tuộc tính Item dùng để truy cập tới từng tập tin. Có 2 cách là dùng chỉ số và dùng tên tập tin:
Mã:
Application.Workbooks.Item(1) là truy cập tới tập tin 1
Application.Workbooks.Item("copyfile.xlsm") là truy cập tới tập tin "copyfile.xlsm"
Cũng có thể viết ngắn gọn
Mã:
Application.Workbooks(1) là truy cập tới tập tin 1
Application.Workbooks("copyfile.xlsm") là truy cập tới tập tin "copyfile.xlsm"
Application có thể bỏ và code sẽ ngắn như sau - có ghi nhớ đối tượng vào biến wb (As WorkBook) để sau đó dùng
Mã:
Set wb = Workbooks(1)
Set wb = Workbooks("copyfile.xlsm")
ThisWorkbook là đối tượng (kiểu Workbook) đại diện cho tập tin mà trong đó có code hiện hành.
Thế có đối tượng tập tin (workbook) cụ thể rồi thì làm thế nào truy cập tới từng sheet cụ thể? Ở đây cũng tương tự, tức đối tượng Workbook có thuộc tính là đối tượng Worksheets và các cách truy cập
Mã:
Dim sh As Worksheet
Set sh = Workbooks(1).Worksheets.Item(1) ' toi sheet 1
Set sh = Workbooks(1).Worksheets(1) ' toi sheet 1
Set sh = Workbooks(1).Worksheets.Item("Sheet1") ' toi sheet Sheet1
Set sh = Workbooks(1).Worksheets("Sheet1") ' toi sheet Sheet1
Set sh = Workbooks("copyfile.xlsm").Worksheets.Item(1) ' toi sheet 1
Set sh = Workbooks("copyfile.xlsm").Worksheets(1) ' toi sheet 1
Set sh = Workbooks("copyfile.xlsm").Worksheets.Item("Sheet1") ' toi sheet Sheet1
Set sh = Workbooks("copyfile.xlsm").Worksheets("Sheet1") ' toi sheet Sheet1
Thế có sheet cụ thể trong tập tin cụ thể thì làm thế nào truy cập tới từng vùng trên sheet đó? Đối tượng Worksheet lại có thuộc tính Range - cũng là đối tượng. Vd. truy cập tới Range
Mã:
Dim rng As Range
Set rng = Workbooks("copyfile.xlsm").Worksheets("Sheet1").Range("C2") ' la truy cap toi o C2 tren Sheet1 trong tap tin copyfile.xlsm
Range lại có thuộc tính Font - cũng là đối tượng.
Vậy thì nếu có bài toán: "Hãy tô đậm và cho mầu đỏ ô C2 trên Sheet1 của tập tin copyfile.xlsm", thì chỉ cần truy cập tới đối tượng Font của ô C2 trên Sheet1 của tập tin copyfile.xlsm rồi thiết lập thuộc tính Bold và Color của đối tượng Font thôi
Mã:
Sub he()
Dim FontObj As Font
Set FontObj = Workbooks("copyfile.xlsm").Worksheets("Sheet1").Range("C2").Font
With FontObj
.Bold = True
.Color = RGB(255, 0, 0)
End With
End Sub
Nhưng bản thân truy cập Workbooks("copyfile.xlsm").Worksheets("Sheet1").Range("C2").Font đã trả về đối tượng Font rồi nên cũng có thể không dùng biến FontObj
Mã:
Sub he()
With Workbooks("copyfile.xlsm").Worksheets("Sheet1").Range("C2").Font
.Bold = True
.Color = RGB(255, 0, 0)
End With
End Sub
Tóm lại lập trình tương tác với bảng tính chẳng qua là truy cập tới đối tượng cần thiết rồi gọi phương thức của nó, đọc ra hoặc thiết lập các thuộc tính của nó. Chả có gì là cao siêu cả.
Nói ngắn gọn thì trước hết phải đọc và hiểu điểm 2. Hiểu được cấu trúc của tập tin ở điểm 3. Nhưng đọc 2 và 3 ở đâu? Nguồn có thể là sách, các khóa học. Nhưng đấy là thời xưa. Thời nay thì kho kiến thức chính là Internet. Dù khóa học có dài bao nhiêu thì cũng không bằng kho kiến thức Internet. Nhưng về điểm 2 và 3 bạn cũng có thể đọc ngay trong VBE: Alt + F11 -> menu View -> Object Browser. Ở ListBox trái bạn có các lớp. Vd. bạn click vào Application thì ở ListBox phải bạn có các phương thức và thuộc tính của đối tượng Application. Giả sử bạn click vào thuộc tính Workbooks rồi nhấn F1 thì bạn sẽ thấy có giải thích, ví dụ về cách truy cập, cách dùng v...v
Ở dưới 2 ListBox bạn nhìn thấy dòng Property Workbooks As Workbooks
. Bạn click vào Workbooks ở dòng này thì thấy Workbooks ở ListBox trái được chọn và ở ListBox phải bạn có các phương thức và thuộc tính của đối tượng Workbooks. Bạn click vào thuộc tính Item rồi nhấn F1 ... Cứ như thế tới khi mỏi tay, mắt đau, đọc thấy ớn thì thôi.
Cần gì tìm đâu xa xôi. Ngay trong VBE bạn có một kho kiến thức. Muốn viết code, muốn hiểu được code của người khác, vd. lấy từ trên mạng về, thì phải có cơ bản điểm 2 và 3. Vài buổi học offline chả là cái gì cả. Cái mấu chốt là phải hiểu được cấu trúc của bảng tính về mặt đối tượng, hiểu và sử dụng thuần thục các cấu trúc của VBA. Còn thuật toán hay và ngắn gọn tới mức nào là tùy thuộc vào khả năng mỗi người. Nó như học Toán ấy. Không phải cứ cần cù là giỏi Toán.
Hôm Mạnh coi Tivi thấy nhỏ dẫn chương trình hỏi tay lập trình viên thế nào là thuật toán trả lời như sau:
Nói đơn giản vầy cho chị hiểu cùng một vấn người ta viết code xử lý ra cái kết quả đó mất 10 phút ... còn người khác có thuật toán tốt viết code xử lý vấn đề đó mất 5 giây ...vậy sự khác nhau về cách xử lý vấn đề đó trong code gọi là thuật toán
Hông biết hắn nói vậy trúng hay trật he ................ khơi nguồn cho học tập 1 chút
Hôm Mạnh coi Tivi thấy nhỏ dẫn chương trình hỏi tay lập trình viên thế nào là thuật toán trả lời như sau:
Nói đơn giản vầy cho chị hiểu cùng một vấn về người ta viết code xử lý ra cái kết quả đó mất 10 phút ... còn người khác có thuật toán tốt viết code xử lý vấn đề đó mất 5 giây ...vậy sự khác nhau về cách xử lý vấn đề đó trong code gọi là thuật toán
Hình như có cái gì đó ngượng ngượng thì phải.
thuật toán được hiểu nôn na kiểu nông dân là như thế này. thuật toán là tập hợp các bước làm, được sắp theo 1 thứ tự nhất định, và khi thực hiện các bước làm đó thì ta sẽ ra kết quả mong muốn từ dữ liệu đầu vào
ví dụ như việc nấu cơm, chúng ta cần phải thao tác những bước như sau, lấy xoong, bỏ gạo vào xoong, vo gạo và bắt liên bếp, bật điện và nấu.
thế là sản phẩm cuối cùng là cơm
Hình như có cái gì đó ngượng ngượng thì phải.
thuật toán được hiểu nôn na kiểu nông dân là như thế này. thuật toán là tập hợp các bước làm, được sắp theo 1 thứ tự nhất định, và khi thực hiện các bước làm đó thì ta sẽ ra kết quả mong muốn từ dữ liệu đầu vào
ví dụ như việc nấu cơm, chúng ta cần phải thao tác những bước như sau, lấy xoong, bỏ gạo vào xoong, vo gạo và bắt liên bếp, bật điện và nấu.
thế là sản phẩm cuối cùng là cơm
còn có nồi nấu 2 tiếng hay 10 tiếng đó là giải thuật để giải quyết vấn đề đó chứ không phải là thuật toán
Hôm Mạnh coi Tivi thấy nhỏ dẫn chương trình hỏi tay lập trình viên thế nào là thuật toán trả lời như sau:
Nói đơn giản vầy cho chị hiểu cùng một vấn người ta viết code xử lý ra cái kết quả đó mất 10 phút ... còn người khác có thuật toán tốt viết code xử lý vấn đề đó mất 5 giây ...vậy sự khác nhau về cách xử lý vấn đề đó trong code gọi là thuật toán
Hông biết hắn nói vậy trúng hay trật he ................ khơi nguồn cho học tập 1 chút
Tôi trả lời bạn dựa trên cái câu "cho học tập một chút"
Cái mà người kia nói là thuật toán loại cao cấp. Thú thật, cỡ này chính tôi cũng chưa học tới.
Dùng ví dụ điển hình, bạn nhân một số 12345 cho 5:
1. Ngừoi quen dùng tính nhẩm có thể làm con toán nhân này, khong cần mẹo gì
2. Với cái kiến thức "5 tức là 10 chia 2, và nhân 10 có nghĩa là cộng thêm 1 số 0", người quen tính nhẩm có thể áp dụng
Như vậy, thuật toán 2 tốt hơn 1. Để có thể làm như vậy, bạn phải thêm 1 kiến thức (5x2 = 10)
Có cái gì chưa ổn?
Thực ra, để sử dụng kiến thức 5x2=10 bạn còn phải dựa trên các đinh luật toán sau:
(1) nếu a1=b1*c1 và c2=c1*d1 thì a1=b1*c2/d1; luật này thì dễ hiểu rồi
(2) luật thứ hai hơi sâu 1 chút, chúng ta ít khi học tới là vì nó được hiểu ngầm
- cách diễn tả số trong toán số thường ngày của ta là cách diễn tả của hệ thống thập phân. Theo cách diễn tả này thì con toán nhân 10^n chỉ giản dị là dời cả nhóm số về bên trái n đơn vị. Như vậy, con toán nhân 10 là con toán rất dễ thực hiện tính nhẩm!
Thuật toán cao cấp thuộc về toán cao cấp. Nó chỉ giành cho những người thực sự muốn học về lập trình giải tích số (numerical analysis) và lập trình trí tuệ nhân tạo (artificial intelligence). Những thuật toán này thường độc lập với ngôn ngữ và môi trường.
Nói xong phần cao cấp, bây giờ đến phần mới bắt đầu:
Hiện nay, cái thuật toán hầu hết dựa trên kinh nghiệm. Làm quen rồi thì bạn tự động biết cách A hiệu quả hơn cách B. Đó là lý do tại sao tôi nói cứ cắm cúi làm một thời gian tự động sẽ quen.
Tuy nhiên, từ quen đến giỏi cần phải có đầu óc cởi mở để tiếp thu những cái thủ thuật mẹo của người khác. Những thủ thuật mẹo này chính là cái mà tôi gọi là thuật toán ứng dụng. Những thuật toán này thường đi sát với môi trường.
VBA là công cụ của Access được du nhập vào Excel. Về sau này thực sự được sử dụng ở Excel nhiều hơn bởi vì Excel đã chiếm được ngôi vị độc tôn trong bảng tính (mãi gần đây mới bị Google Sheets cạnh tranh) trong khi Access bị các phần mềm CSDL khác nện tơi tả. Vì vậy học VBA cũng đồng thời phải học cách sử dụng giao diện với bảng tính - tức là các đối tượng của bảng tính. Một số tiện nghi khác trên nền tảng Windows cũng sẽ được sử dụng, điển hình là các đối tượng của VBScript như Dictionary, Regexp... Bên CSDL thì có ADO...
Lập trình tới một mức độ nào đó, bạn bắt buộc phải chấp nhận rằng tự mình không đủ thì giờ để viết tất cả những chức năng cần thiết. Và bạn phải học qua cách sử dụng những gì được người khác cung cấp sẵn. Điển hình là khi bạn thấy người ta sử dụng các đối tượng của Windows qua API
Các ngôn ngữ tổng quát hơn có thư viện riêng của chúng. Điển hình C# có dot net, C++ có STL, Java có Beans, JavaScript có JQuery, JSON...
Cái mức "giỏi" mà bác nói ở đây nó tương đối cao. Hầu hết các lập trình viên không cần phải đạt đén mức này. Và trên thực tế là chỉ có một số ít.
Cái từ "giỏi" mà tôi dùng nó thấp hơn. Nhưng đủ để giải quyết hầu hết các vấn đề. Vì vậy tôi rất tự tin khi tuyên bố rằng chỉ cần siêng năng là tập được.
Trước đây tôi có dùng ví dụ kiếm chiêu và kiếm quyết. Cái mức độ kiếm chiêu chỉ cần siêng năng. Cái mức độ kiếm quyết phải cần mở rộng đầu óc quan sát. Cái điểm "thông minh" mà bác đòi hỏi chỉ dùng trong trường hợp muốn vượt hơn "thầy" - thanh xuất ư lam nhi thanh ư lam.
Tôi trả lời bạn dựa trên cái câu "cho học tập một chút"
Cái mà người kia nói là thuật toán loại cao cấp. Thú thật, cỡ này chính tôi cũng chưa học tới.
Dùng ví dụ điển hình, bạn nhân một số 12345 cho 5:
1. Ngừoi quen dùng tính nhẩm có thể làm con toán nhân này, khong cần mẹo gì
2. Với cái kiến thức "5 tức là 10 chia 2, và nhân 10 có nghĩa là cộng thêm 1 số 0", người quen tính nhẩm có thể áp dụng
Như vậy, thuật toán 2 tốt hơn 1. Để có thể làm như vậy, bạn phải thêm 1 kiến thức (5x2 = 10)
Có cái gì chưa ổn?
Thực ra, để sử dụng kiến thức 5x2=10 bạn còn phải dựa trên các đinh luật toán sau:
(1) nếu a1=b1*c1 và c2=c1*d1 thì a1=b1*c2/d1; luật này thì dễ hiểu rồi
(2) luật thứ hai hơi sâu 1 chút, chúng ta ít khi học tới là vì nó được hiểu ngầm
- cách diễn tả số trong toán số thường ngày của ta là cách diễn tả của hệ thống thập phân. Theo cách diễn tả này thì con toán nhân 10^n chỉ giản dị là dời cả nhóm số về bên trái n đơn vị. Như vậy, con toán nhân 10 là con toán rất dễ thực hiện tính nhẩm!
Thuật toán cao cấp thuộc về toán cao cấp. Nó chỉ giành cho những người thực sự muốn học về lập trình giải tích số (numerical analysis) và lập trình trí tuệ nhân tạo (artificial intelligence). Những thuật toán này thường độc lập với ngôn ngữ và môi trường.
Nói xong phần cao cấp, bây giờ đến phần mới bắt đầu:
Hiện nay, cái thuật toán hầu hết dựa trên kinh nghiệm. Làm quen rồi thì bạn tự động biết cách A hiệu quả hơn cách B. Đó là lý do tại sao tôi nói cứ cắm cúi làm một thời gian tự động sẽ quen.
Tuy nhiên, từ quen đến giỏi cần phải có đầu óc cởi mở để tiếp thu những cái thủ thuật mẹo của người khác. Những thủ thuật mẹo này chính là cái mà tôi gọi là thuật toán ứng dụng. Những thuật toán này thường đi sát với môi trường.
VBA là công cụ của Access được du nhập vào Excel. Về sau này thực sự được sử dụng ở Excel nhiều hơn bởi vì Excel đã chiếm được ngôi vị độc tôn trong bảng tính (mãi gần đây mới bị Google Sheets cạnh tranh) trong khi Access bị các phần mềm CSDL khác nện tơi tả. Vì vậy học VBA cũng đồng thời phải học cách sử dụng giao diện với bảng tính - tức là các đối tượng của bảng tính. Một số tiện nghi khác trên nền tảng Windows cũng sẽ được sử dụng, điển hình là các đối tượng của VBScript như Dictionary, Regexp... Bên CSDL thì có ADO...
Lập trình tới một mức độ nào đó, bạn bắt buộc phải chấp nhận rằng tự mình không đủ thì giờ để viết tất cả những chức năng cần thiết. Và bạn phải học qua cách sử dụng những gì được người khác cung cấp sẵn. Điển hình là khi bạn thấy người ta sử dụng các đối tượng của Windows qua API
Các ngôn ngữ tổng quát hơn có thư viện riêng của chúng. Điển hình C# có dot net, C++ có STL, Java có Beans, JavaScript có JQuery, JSON...
Tôi mới vừa tư vấn một người bạn, có thể tạm coi người này là chuyên gia về thuật toán (algorithm). Câu trả lời của người này như sau:
Đem tốc độ để làm ví dụ cho thuật toán là một cái nhìn hạn hẹp. Thuật toán còn là cái khác biệt giữa sai số chấp nhận và không thể chấp nhận. Và có những vấn đề nếu không có thuật toán nghiêm chỉnh thì không thể giải.
Đó là lời của người ấy. Phần giải thích thêm của riêng tôi về sai số như sau:
Giải một hệ thống phương trình n ẩn số, nếu chỉ dùng phương pháp Gauss thuần túy thì sẽ nhanh hơn các cách cải tiến khác. Nhưng khi số n lớn thì khả năng sai của phép Gauss không cải tiến rất cao.
Vì kiến thức diễn đàn rất rộng và nhiều vấn đề, chỉ phù hợp với người đã có kiến thức về VBA. Bạn chưa biết gì thì nên đọc sách "Lập trình VBA cho người mới bắt đầu" để có đường đi, đừng vội và đừng sợ. Tiếc là sách mới chưa xuất bản được dù đã dồn bao tâm huyết, update nhiều nội dung.
Tôi mới vừa tư vấn một người bạn, có thể tạm coi người này là chuyên gia về thuật toán (algorithm). Câu trả lời của người này như sau:
Đem tốc độ để làm ví dụ cho thuật toán là một cái nhìn hạn hẹp. Thuật toán còn là cái khác biệt giữa sai số chấp nhận và không thể chấp nhận. Và có những vấn đề nếu không có thuật toán nghiêm chỉnh thì không thể giải.
Đó là lời của người ấy. Phần giải thích thêm của riêng tôi về sai số như sau:
Giải một hệ thống phương trình n ẩn số, nếu chỉ dùng phương pháp Gauss thuần túy thì sẽ nhanh hơn các cách cải tiến khác. Nhưng khi số n lớn thì khả năng sai của phép Gauss không cải tiến rất cao.
Thưa anh, làm sao để có thể biết Gauss là gì khi em học hết lớp 12 đã đi phụ hồ để xây dựng đất nước ? và đến giờ vẫn chưa hiểu tại sao mình được tốt nghiệp cấp 3 ?
Đọc sách là đúng rồi. Nhưng không phải cái mua ngoài cửa hàng mới là sách. Cả một help to đùng là sách chứ còn là gì? Những bài đăng trên mạng là sách chứ là gì? Khi tôi cài Delphi thì sách ngoài cửa hàng hiếm, trên mạng cũng không nhiều vì internet ở thời kỳ đầu. Nhưng tôi thấy kèm với help về Delphi thì trong thư mục còn có cả help Windows API. Mà trong help thì có rất nhiều mục nói về từng control của Window, về cơ chế thông điệp của system, về cơ chế của Clipboard, cơ chế của hook, các thao tác liên quan đến đồ họa v... Mỗi một phần đều có ví dụ. Chỉ việc đọc, chạy thử ví dụ. Nếu được thì thử biến tấu - tham số khác chẳng hạn. Trên cơ sở đó mà hiểu được cách làm việc. Nếu quyển help đó là sách giấy thì có thể nói là tôi đã đọc nó nát bơm hết rồi.
Help VBA cũng là một sách lớn. Sau khi có khái niệm về hệ thống đối tượng của tập tin Excel thì có thể thử giải quyết vấn đề hàng ngày của mình. Vd. ai cũng từng một lần tô đậm giá trị trong một ô, hoặc đổi mầu chữ. Vậy thì thử làm bằng code xem sao. Nếu đã có khái niệm như tôi trình bầy thì biết là ô (vùng), tức Range, nằm trên sheet, tức worksheet, cụ thể, mà sheet lại thuộc tập tin, tức workbook, cụ thể. Vậy thì muốn thay đổi mầu chữ, tức mầu của Font, của một ô (vùng) thì phải xem trong những thuộc tính, phương thức của đối tượng Range có cái gì dính dáng tới Font không. Như tôi đã nói: Alt + F11 -> menu View -> Object Browser -> chọn Range ở ListBox trái -> nhìn sang ListBox phải sẽ có các phương thức và thuộc tính của đối tượng Range. Tuy các tên đều bằng tiếng Anh nhưng ai biết chút tiếng Anh thì thấy là bác Bill đặt các tên mà chỉ cần nhìn vào đã có thể chắc 50% về ý nghĩa của phương thức hay thuộc tính. Chẳng hạn nhìn thấy thuộc tính Font thì có thể chắc 50% là nó liên quan tới phông chữ. Vậy chọn Font và nhấn F1. Lúc này thì rõ ràng 100% rồi. Mà lại có cả ví dụ
This example determines the if the font name for cell A1 is Arial and notifies the user.
Visual Basic for Applications
Sub CheckFont()
Range("A1").Select
' Determine if the font name for selected cell is Arial.
If Range("A1").Font.Name = "Arial" Then
MsgBox "The font name for this cell is 'Arial'"
Else
MsgBox "The font name for this cell is not 'Arial'"
End If
Thưa anh, làm sao để có thể biết Gauss là gì khi em học hết lớp 12 đã đi phụ hồ để xây dựng đất nước ? và đến giờ vẫn chưa hiểu tại sao mình được tốt nghiệp cấp 3 ?
1. làm sao để có thể biết Gauss là gì: chỉ những người biết mới nói ra câu này. Nếu không biết thì đã làm thinh. Nó giống như câu hỏi "Đạo là gì?", chỉ những người tìm hiểu Đạo rồi mới hỏi.
2. chưa hiểu tại sao mình được tốt nghiệp cấp 3: cấp 3 là gì?
Khi học toán giải tích, có những người chỉ cốt thuộc công thức tính đạo hàm. Tôi thì khác, toi bắt ngừoi học phải hiểu rằng "đạo hàm là giới hạn của dy/dx khi dx tiến về 0".
Chà, bác là thầy dạy môn toán hay sao mà nhớ kỹ vậy? Mặc dù em đã thôi học mấy chục năm, nhưng khi bác nói là em lại nghĩ như đó là bài học ngày hôm qua. Đặc biệt em vẫn còn nhớ từ viết tắt (đ.p.c.m) <==> Điều phải chứng minh?
Chà, bác là thầy dạy môn toán hay sao mà nhớ kỹ vậy? Mặc dù em đã thôi học mấy chục năm, nhưng khi bác nói là em lại nghĩ như đó là bài học ngày hôm qua. Đặc biệt em vẫn còn nhớ từ viết tắt (đ.p.c.m) <==> Điều phải chứng minh?
Tình hình là em muốn tự học VBA (vì mỗi lần muốn làm gì cứ lên nhờ mọi người giúp thấy ngại quá) nhưng không biết bắt đầu từ đâu? tài liệu như thế nào? học ở đâu?...
nên em muốn tự học nhờ anh chị, các bạn tư vấn giúp ... cảm ơn mọi người nhiều ạ!
Đi học có hai nhóm học cơ bản:
1- Học sinh, sinh viên đối tượng này đến trường và học theo thầy rất nhanh vì họ là tờ giấy trằng, họ tuân thủ và làm theo đúng bài, nhưng lại yếu về kinh nghiệm thực tế để đưa vấn đề học kết nối vào thực tiễn.
2- Người đi làm rồi đi học: đối tượng này thường chăm chăm học đúng cái mình đang cần, đối tượng này rất thực tế nhưng nhiều người trong đó mắc phải sai lầm, chỉ chú ý tới cái mình cần mà không biết răng để làm cái đó người ta phải học từ BÀI SỐ 1. Ví lẽ đó mà nhòm người này đi học lại rất khó khăn và dễ nản vì "không thấy thực tế", hoặc "không phải cái mong chờ". Đây là sai lầm trong việc học. Đối tượng này chỉ học thành công khi gặp thầy có kinh nghiệm phát hiện ra bệnh tâm lý, ép theo bài bản và định hướng ghép thực tế nhanh.
Quay lại vấn đề học VBA. Người tìm học VBA chắc chắn 99% là đang đi làm. Họ đã nhìn thấy VBA ở các ví dụ trên mạng, ở đúng phần nào công việc của mình. Rất thích thú... Và bắt đầu sai lầm... đi học các code xử lý tình huống trên mạng, đọc mãi, bắt trước rồi cũng chả tự làm được cái khác hoặc phải nhiều tháng, nhiều năm mới làm được. Vì các code giải quyết trên mạng phần lớn là họ giải quyết các tính huống từ các câu hỏi của người khác chứ không phải đi giải thích căn cơ từ "BÀI 1".
Kiến thức trên mạng rất có giá trị để tham khảo, tra cứu với người đã có ccăn bản. Còn để học thì còn gian nan (như đã nói ý trên), trừ các diễn đàn hay có loạt bài viết có tính học thuật thực sự. Vậy tôi khuyên hãy tìm tài liệu (là ebook, là sách ở trên mạng hay mua ở GPR hay ở đâu đó...) để học cái căn cơ, nếu khó hiểu thì đến trường lớp mà học. GPE cũng có lớp hay các công ty khác cũng có lớp dạy VBA. Chỉ mất một -> hai tháng là bạn đã có căn cơ, sau đó tham khảo tư liệu quý trên mạng như GPE là không muộn. Bạn sẽ đạt được những kiến thức nền tảng và từ đây hòa nhập cùng diễn đàn học các kinh nghiệm code, các tình huống khác nhau thì sẽ sớm làm chủ được phần nào VBA.
Đi học có hai nhóm học cơ bản:
1- Học sinh, sinh viên đối tượng này đến trường và học theo thầy rất nhanh vì họ là tờ giấy trằng, họ tuân thủ và làm theo đúng bài, nhưng lại yếu về kinh nghiệm thực tế để đưa vấn đề học kết nối vào thực tiễn.
2- Người đi làm rồi đi học: đối tượng này thường chăm chăm học đúng cái mình đang cần, đối tượng này rất thực tế nhưng nhiều người trong đó mắc phải sai lầm, chỉ chú ý tới cái mình cần mà không biết răng để làm cái đó người ta phải học từ BÀI SỐ 1. Ví lẽ đó mà nhòm người này đi học lại rất khó khăn và dễ nản vì "không thấy thực tế", hoặc "không phải cái mong chờ". Đây là sai lầm trong việc học. Đối tượng này chỉ học thành công khi gặp thầy có kinh nghiệm phát hiện ra bệnh tâm lý, ép theo bài bản và định hướng ghép thực tế nhanh.
Quay lại vấn đề học VBA. Người tìm học VBA chắc chắn 99% là đang đi làm. Họ đã nhìn thấy VBA ở các ví dụ trên mạng, ở đúng phần nào công việc của mình. Rất thích thú... Và bắt đầu sai lầm... đi học các code xử lý tình huống trên mạng, đọc mãi, bắt trước rồi cũng chả tự làm được cái khác hoặc phải nhiều tháng, nhiều năm mới làm được. Vì các code giải quyết trên mạng phần lớn là họ giải quyết các tính huống từ các câu hỏi của người khác chứ không phải đi giải thích căn cơ từ "BÀI 1".
Kiến thức trên mạng rất có giá trị để tham khảo, tra cứu với người đã có ccăn bản. Còn để học thì còn gian nan (như đã nói ý trên), trừ các diễn đàn hay có loạt bài viết có tính học thuật thực sự. Vậy tôi khuyên hãy tìm tài liệu (là ebook, là sách ở trên mạng hay mua ở GPR hay ở đâu đó...) để học cái căn cơ, nếu khó hiểu thì đến trường lớp mà học. GPE cũng có lớp hay các công ty khác cũng có lớp dạy VBA. Chỉ mất một -> hai tháng là bạn đã có căn cơ, sau đó tham khảo tư liệu quý trên mạng như GPE là không muộn. Bạn sẽ đạt được những kiến thức nền tảng và từ đây hòa nhập cùng diễn đàn học các kinh nghiệm code, các tình huống khác nhau thì sẽ sớm làm chủ được phần nào VBA.
cảm ơn bạn, mình thuộc nhóm người thứ 2 đã đi làm, mình có xem và áp dụng các code tìm được trên mạng nhưng do chưa nắm được những phần cơ bản của VBA nên đôi khi trong vài trường hợp không thể tùy biến được vào vấn đề thực tế của mình, nên mình muốn học cơ bản để có thể chỉnh sửa hoặc tạo những code đơn giản phục vụ nhu cầu công việc thường ngày.
cảm ơn bạn, mình thuộc nhóm người thứ 2 đã đi làm, mình có xem và áp dụng các code tìm được trên mạng nhưng do chưa nắm được những phần cơ bản của VBA nên đôi khi trong vài trường hợp không thể tùy biến được vào vấn đề thực tế của mình, nên mình muốn học cơ bản để có thể chỉnh sửa hoặc tạo những code đơn giản phục vụ nhu cầu công việc thường ngày.
Về ngôn ngữ lập trình thì đều giống nhau chung ở các cú pháp: vòng lặp, rẽ nhánh, bộ thử viện xử lý string, number, date,.... Điều khác nhau khi ta ứng dụng váo các đối tượng nào. Ở đây là VBA & Excel nên ngoài ngôn ngữ thì lại phải biết về các Object để điều khiển nó như: Workbook, worksheet, Range,.... Tôi nghĩ ai cũng có thể học và làm được cái cơ bản nếu quyết tâm học!
Tôi vấn tâm đắc trong nghệ thuật sác tác nhạc. Âm nhạc chỉ có 7 loại nốt nhạc (Đồ .. Si), chỉ thay đổi chút tốc độ, tần số âm thanh là mỗi nhạc sỹ lại có một tá các tác phẩm. Vậy căn bản ta học luật đi âm của các nốt nhạc, phong cách sáng tác ... Có thể không là siêu phẩm với nhiều người nhưng với bản thân chắc là có kết quả!
Đi học có hai nhóm học cơ bản:
1- Học sinh, sinh viên đối tượng này đến trường và học theo thầy rất nhanh vì họ là tờ giấy trằng, họ tuân thủ và làm theo đúng bài, nhưng lại yếu về kinh nghiệm thực tế để đưa vấn đề học kết nối vào thực tiễn.
2- Người đi làm rồi đi học: đối tượng này thường chăm chăm học đúng cái mình đang cần, đối tượng này rất thực tế nhưng nhiều người trong đó mắc phải sai lầm, chỉ chú ý tới cái mình cần mà không biết răng để làm cái đó người ta phải học từ BÀI SỐ 1. Ví lẽ đó mà nhòm người này đi học lại rất khó khăn và dễ nản vì "không thấy thực tế", hoặc "không phải cái mong chờ". Đây là sai lầm trong việc học. Đối tượng này chỉ học thành công khi gặp thầy có kinh nghiệm phát hiện ra bệnh tâm lý, ép theo bài bản và định hướng ghép thực tế nhanh.
Quay lại vấn đề học VBA. Người tìm học VBA chắc chắn 99% là đang đi làm. Họ đã nhìn thấy VBA ở các ví dụ trên mạng, ở đúng phần nào công việc của mình. Rất thích thú... Và bắt đầu sai lầm... đi học các code xử lý tình huống trên mạng, đọc mãi, bắt trước rồi cũng chả tự làm được cái khác hoặc phải nhiều tháng, nhiều năm mới làm được. Vì các code giải quyết trên mạng phần lớn là họ giải quyết các tính huống từ các câu hỏi của người khác chứ không phải đi giải thích căn cơ từ "BÀI 1".
Kiến thức trên mạng rất có giá trị để tham khảo, tra cứu với người đã có ccăn bản. Còn để học thì còn gian nan (như đã nói ý trên), trừ các diễn đàn hay có loạt bài viết có tính học thuật thực sự. Vậy tôi khuyên hãy tìm tài liệu (là ebook, là sách ở trên mạng hay mua ở GPR hay ở đâu đó...) để học cái căn cơ, nếu khó hiểu thì đến trường lớp mà học. GPE cũng có lớp hay các công ty khác cũng có lớp dạy VBA. Chỉ mất một -> hai tháng là bạn đã có căn cơ, sau đó tham khảo tư liệu quý trên mạng như GPE là không muộn. Bạn sẽ đạt được những kiến thức nền tảng và từ đây hòa nhập cùng diễn đàn học các kinh nghiệm code, các tình huống khác nhau thì sẽ sớm làm chủ được phần nào VBA.
Bạn Nguyễn Duy Tuân
nói rất chuẩn, mình cũng đam mê VBA, nhưng thật sự là đã nghiên cứu và cố gắng học hỏi mấy năm nhưng không thể viết code được, mặc dù có rất nhiều bạn, "và các anh chị trên diễn đàn GPE rất nhiệt tình hướng dẫn". Đôi khi mình tự hỏi "Hay là mình không còn đầu óc để tư duy nữa". Cái khó khăn nhất của mình là dùng vòng lặp cho các tình huống.
* lim(sin(x) / x) (x -> 0) phải được chứng minh bằng định nghĩa của đạo hàm theo delta Y và delta X, còn quy tắc lopital cũng được chứng minh dựa vào định nghĩa luôn.
Mà nghe thiên hạ đồn hình như mấy quy tắc này Lopital mua của nhà Bernuli thì phải
Người "bạn" này của bác sẽ gặp nhiều vấn đề khi bước vào toán xác suất thống kê.
Chú thêm: hồi đó tôi có 1 học trò, người (tôi tránh dùng cô hay cậu) này tỉnh queo bảo là theo luật góc nhỏ thì sin(x) = x cho nên giới hạn là 1.
Lý luận hơi nực cười chứng minh ngược chiều nhưng tôi vẫn chấm cho 10 bởi vì ngừoi này biết sử dụng một đặc điểm rất quan trọng của toán vi tích phân. Nắm vững được quy tắc này sẽ giải được rất nhiều vấn đề về hình dạng tròn và cong trong Vật lý (Physics) và Kỹ thuật (Engineering).
cảm ơn bạn, mình thuộc nhóm người thứ 2 đã đi làm, mình có xem và áp dụng các code tìm được trên mạng nhưng do chưa nắm được những phần cơ bản của VBA nên đôi khi trong vài trường hợp không thể tùy biến được vào vấn đề thực tế của mình, nên mình muốn học cơ bản để có thể chỉnh sửa hoặc tạo những code đơn giản phục vụ nhu cầu công việc thường ngày.
Tôi nghĩ ai muốn giỏi cũng phải đọc từ sách ra hết: có những người được cơ hội người trước giới thiệu đọc từ đọc học từ cơ bản; Có những người tiếp xúc nhiều nguồn sau hiểu sơ sơ, rồi muốn hiểu sâu thì lại phải quy lại tìm sách đọc.
Tóm lại bạn nên tìm sách cơ bản, đọc , học, thực hành theo từng ví dụ, cố tự ngẫm... không hiểu thì hỏi thầy, hỏi bạn, hỏi trên diễn đàn internet, tìm câu trả lời với bác Google... sớm là có cơ bản khá thôi... giỏi thì cần bước nâng và căn cơ của riêng bạn nữa.
Khi h -> 0 thì h/2 -> 0, sin(h/2) / (h/2) -> 1 ***, và do hàm cos(x) liên tục nên cos(x+h/2) -> cos(x)
Vậy khi h -> 0 thì [f(x+h) - f(x)] / h -> cos(x), tức theo định nghĩa thì [sin(x)]' = cos(x)
Cái không ổn trong cách chứng minh của người bạn tôi là khi tính giới hạn của sin(x) / x khi x -> 0 bạn đó đã dùng [sin(x)]' = cos(x)
Nếu khi chứng minh B ([sin(x)]' = cos(x)) ta dùng A (lim(sin(x) / x) (x -> 0) = 1) thì khi chứng minh A ta không thể dùng B được. Một cái phải được chứng minh theo cách không phụ thuộc vào cái kia.
Theo bài #51 thì là con toán tính theo lượng giác.
Theo toán phân giải đinh lượng (finite elements) thì sin(x) được tính theo chuỗi Taylor là:
sin(x) = x - x^3/3! + x^5/5! -...
Như vậy giữa x và sin(x) chỉ khác nhau cái đoạn - x^3/3! + x^5/5! -...
Khi x càng nhỏ thì đoạn trên càng tiến nhanh về 0; lưu ý từ nhanh ở đây, khi x nhỏ hơn 1 thì x^3 tiến về 0 nhanh hơn x nhiều.
Như vậy, với x rất nhỏ, sin(x) sẽ gần bằng x
Điểm quan trọng: luôn luôn nhớ rằng công thức Taylor trên được tính bằng Radian, không phải độ.
Điểm quan trọng 2: công thức Taylor là khái niệm có sau khái niệm giới hạn. Vì vậy tôi mới bảo lý luận hơi nực cười vì nó ngược ngạo.
Theo bài #51 thì là con toán tính theo lượng giác.
Theo toán phân giải đinh lượng (finite elements) thì sin(x) được tính theo chuỗi Taylor là:
sin(x) = x - x^3/3! + x^5/5! -...
Như vậy giữa x và sin(x) chỉ khác nhau cái đoạn - x^3/3! + x^5/5! -...
Khi x càng nhỏ thì đoạn trên càng tiến nhanh về 0; lưu ý từ nhanh ở đây, khi x nhỏ hơn 1 thì x^3 tiến về 0 nhanh hơn x nhiều.
Như vậy, với x rất nhỏ, sin(x) sẽ gần bằng x
Điểm quan trọng: luôn luôn nhớ rằng công thức Taylor trên được tính bằng Radian, không phải độ.
Điểm quan trọng 2: công thức Taylor là khái niệm có sau khái niệm giới hạn. Vì vậy tôi mới bảo lý luận hơi nực cười vì nó ngược ngạo.
Cái tôi viết và cái bác viết là 2 vấn đề khác nhau. Bác muốn đánh giá sin(x) và x có xấp xỉ nhau hay không, còn vấn đề của bạn tôi là tính cụ thể giới hạn sin(x / x khi x -> 0.
Về vấn đề của bác thì theo tôi
Như vậy giữa x và sin(x) chỉ khác nhau cái đoạn - x^3/3! + x^5/5! -...
Khi x càng nhỏ thì đoạn trên càng tiến nhanh về 0; lưu ý từ nhanh ở đây, khi x nhỏ hơn 1 thì x^3 tiến về 0 nhanh hơn x nhiều.
Như vậy, với x rất nhỏ, sin(x) sẽ gần bằng x
Khi h -> 0 thì h/2 -> 0, sin(h/2) / (h/2) -> 1 ***, và do hàm cos(x) liên tục nên cos(x+h/2) -> cos(x)
Vậy khi h -> 0 thì [f(x+h) - f(x)] / h -> cos(x), tức theo định nghĩa thì [sin(x)]' = cos(x)
Cái không ổn trong cách chứng minh của người bạn tôi là khi tính giới hạn của sin(x) / x khi x -> 0 bạn đó đã dùng [sin(x)]' = cos(x)
Nếu khi chứng minh B ([sin(x)]' = cos(x)) ta dùng A (lim(sin(x) / x) (x -> 0) = 1) thì khi chứng minh A ta không thể dùng B được. Một cái phải được chứng minh theo cách không phụ thuộc vào cái kia.
Đúng rồi anh, em nhầm về tên gọi. Cám ơn anh nhiều.Đa phần các sách đều thừa nhận công thức này và cả nhiều công thức khác nữa cũng vậy. Em nhớ có một sách cũ giải tích đã chứng minh như anh đã làm .
Do bây giờ thi trắc nghiệm nên học sinh cũng không có biết các công thức được chứng minh như thế nào. Cũng kém vui cho những người yêu toán