Những bài tập VBA đơn giản dành cho những người mới bắt đầu (1 người xem)

  • Thread starter Thread starter SA_DQ
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
14,602
Được thích
22,922
Nghề nghiệp
U80

Bài 01

Macro to merge values from one column into one cell and retain source formatting.
Example:

Source:
A1= "It is going to cost "
A2= "$1000.00" (A2 is formatted to underline value)

Destination: (desired result)
B2= "It is going to cost $1000.00" (A2 value is still underlined)

Đề bài có thể tóm gọn lại như sau:

Trên cột [A:A] ta có những dòng thuyết minh & dưới nó là những con số đã được định dạng bằng nhiều cách khác nhau để fân biệt như chữ in nghiên, chữ số được tô đậm hay Font có màu đỏ,. . . .

Macro có nhiệm vụ: Hễ dòng nào có số thì ô bên fải liền kề cần được mang nội dung cũa ô trên ô có số & bản thân số của ô đang xét; Mặt khác định dạng ô giống với ô mang số liệu

Chúc thành công
--=0
--=0

Bảng liệt kê:

TT | Tên bài | Tại | Diễn giải
01|Bài tập 01|#1|Nối chuỗi & định dạng
02|Bài tập 02 | #11|Thống kê số lần lặp
03|Bài tập 03|#19|Trích lọc danh sách theo năm
04|Bài tập 04|#27|Thêm dòng theo số liệu tháng - năm
05|Bài tập 05|#31|Tổng hợp số liệu hoạt động theo từng kỳ (tháng)
06|Bài tập 06|#73|Ghí chú ngày có chi fí lớn nhất trong từng tháng khảo sát
07|Bài tập 07|#84|Thêm dòng tính tổng, sau khi đã thống kê số liệu
08|Bài tập 08|#103|Kẻ dòng, viền khung & format báo cáo hoàn chỉnh
09| BT Fần B | #206 | (Ở đây có bảng liệt kê riêng)


Rất mong các bạn ủng hộ & hỗ trợ tối đa.

! --=0 --=0 --=0
 
Chỉnh sửa lần cuối bởi điều hành viên:
Phía trên mình cũng có đề nghị dùng các thuật toán cơ bản để những người còn yếu như mình theo cho kip. Thấy bài ADO mình sững sờ rơi lệ luôn đó.
 
Upvote 0
Ngay chính công thức trên sheet, dùng hàm SUM, SUMIF, SUBTOTAL, SUMPRODUCT... thậm chí cộng từng mục cũng đều cho ra kết quả như nhau, vậy sao ta không chọn hàm SUM để làm cái rẹt cho xong nhỉ?

Huống chi tiêu đề của topic này là "dành cho người mới bắt đầu", sao mình phải đưa trường hợp dùng ADO vào trong đây?
Bạn nói như thế sao được, nếu trên sheet có các hàm này và có cả những công cụ để mà thực hiện ý đồ của bạn thì tội gì bạn dùng VBA? Cũng như bạn nói dùng ADO là dao mổ trâu? Vậy VBA so với công cụ sẵn có và Hàm thì sẽ như thế nào?
ADO và cả VBA thì tôi mới bắt đầu học. Việc mới bắt đầu học như tôi thì đâu có vi phạm phải không bạn?
 
Upvote 0
Tiếp tục bài 8 (Hic, em chỉ kẻ vẽ khung viền được như thế này thôi)

Mã:
Sub Xuan5()
Worksheets("Sheet1").Activate
With Range([B8], [B1000].End(xlUp)).Offset(, -1).Resize(, 4)
.Borders.LineStyle = xlContinuous
 End With
With Range("B1000").End(xlUp)
 .Offset(1, 1) = "Ngay        thang          nam"
 .Offset(2) = "Nguoi Lap Bang"
 .Offset(2, 2) = "Nguoi Kiem Soat"
 End With
 End Sub

Tiến bộ rồi đấy, mình góp ý một tí nhé! Trước tiên về định dạng và cách đặt giá trị vào cell thì code này đã thực hiện tốt. Tuy nhiên, như tôi đã nói ở bài trước:

tại phần này:

Mã:
With Range([B8], [B1000].End(xlUp)).Offset(, -1).Resize(, 4)
.Borders.LineStyle = xlContinuous
 End With

Nếu chỉ dùng địa chỉ ô, khối ô đó cho một hành động là Borders thì ta không cần dùng đến with để code ngắn gọn hơn. Với thủ tục trên ta chỉ cần như thế này:

Mã:
Range([B8], [B1000].End(xlUp)).Offset(, -1).Resize(, 4).Borders.LineStyle = xlContinuous

Nhưng bạn sẽ nói nhìn nó dài thòn khó coi quá, không sao đâu, VBA có "cửa" để cho bạn xuống hàng một cách hợp lý, chỉ cần cách khoảng một ký tự, rồi thêm một dấu gạch chân (_) là ta có thể xuống hàng để câu lệnh được tiếp tục:

Mã:
    Range([B8], [B1000].End(xlUp)).Offset(, -1)[COLOR=#ff0000] _[/COLOR]
    .Resize(, 4).Borders.LineStyle = xlContinuous

Với thủ tục của XN, tôi hướng dẫn các bạn sử dụng biến để lấy giá trị dòng kiểu LONG như sau:

Mã:
Sub Xuan5_2()
    Worksheets("Sheet1").Activate
    [COLOR=#008000]'khai báo biến dạng Long (tham khảo Data Type trong Help của VBA)[/COLOR]
    [COLOR=#0000cd]Dim [/COLOR][COLOR=#ff0000]iRow [/COLOR][COLOR=#0000cd]As Long[/COLOR]
   [COLOR=#008000] 'lấy giá trị hàng của Range tìm được và gán cho biến[/COLOR]
    iRow = Range("B1000").End(xlUp).Row
    [COLOR=#008000]'Ghép biến đó cho "khối" cell    [/COLOR]
    Range("A8:D" & [COLOR=#ff0000]iRow[/COLOR]).Borders.LineStyle = xlContinuous
   [COLOR=#008000] 'cũng biến đó ghép vào 1 cell[/COLOR]
    With Range("B" & [COLOR=#ff0000]iRow[/COLOR])
        .Offset(1, 1) = "Ngay        thang          nam"
        .Offset(2) = "Nguoi Lap Bang"
        .Offset(2, 2) = "Nguoi Kiem Soat"
    End With
End Sub

Như thủ tục trên, bạn sẽ bớt đi 1 công đoạn Range("B1000").End(xlUp).

Đó cũng là một cách bạn tư duy để làm cho code hoạt động hiệu quả.

Hi Hi , cái code này bấm 2 lần sao nhỉ
---------------
Spam 1 tý, mình cũng đang học hỏi đó!

Đây là bài bạn XN thực hành thôi, mà thực hành nào cũng khó trọn vẹn, bản thân tôi khi thực hành còn treo máy, mất dữ liệu tùm lum đấy thôi! Từ những kinh nghiệm "đau thương" đó mình sẽ tự biết cột nào, vùng nào là "bất khả xâm phạm", làm vùng chính để mình thực thi code, còn không thì lỗi có thể xảy ra một cách đáng tiếc.

Hy vọng các bạn mới bước vào môi trường VBA sẽ tự biết tư duy, tùy biến để code của mình đạt được tối ưu nhất.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Hi Hi , cái code này bấm 2 lần sao nhỉ
---------------
Spam 1 tý, mình cũng đang học hỏi đó!

Hic, mình mới chỉ "nhập môn" VBA thôi, trình còn non lắm. Thậm chí mới chỉ biết từ A phải đi tới B rồi mới tới C chứ chưa biết rút ngọn, đi tắt thế nào cho nhanh. Và chưa thể nào hoàn chỉnh được với code của mình.
Nếu ai đó có nhã ý và thấy code của mình chưa hoàn chỉnh, xin nêu lên góp ý, còn nói chung chung, mình cũng hổng hiểu luôn.
Thầy giáo mình chưa cho mình tốt nghiệp lớp mẫu giáo VBA, nên mình còn phải học hỏi nhiều.
Cảm ơn các thầy và các bạn!
 
Lần chỉnh sửa cuối:
Upvote 0
Việc kết nối hay truy vấn thì ai mà chẳng biết nhưng bạn dùng từ "Bản chất" tôi chưa hiểu cái "Bản chất" mà bạn diễn tả. Còn việc dùng dao mổ trâu để giết gà thì mình cho rằng là bạn dùng cảm quan của bạn để mà phán đoán 1 cách phiếm diện. Việc kết nối và truy vấn với tốc độ nhanh như thế thì tội gì mà chẳng dùng nó, điều này chắc bạn hiểu nhỉ. Bạn lấy ví dụ về căn phòng tôi thấy tức cười quá, nó đâu ăn nhập gì đến cái này, cái chìa khóa của 2 căn phòng đó bạn đang giữ mà chìa khóa đó có nhiều loại, chìa khóa của chính nó hay là chìa khóa vạn năng... Cho dù là chìa khóa nào đi nữa thì mục đích cuối cùng là mở được cửa phòng đó nhanh gọn lẹ là được. Bạn hiểu ý tôi muốn nói gì chư?

Tôi không muốn lý sự với bạn ở đây, nếu muốn về ADO thì vào mà thảo luận tại bài đó và bạn muốn bắt đầu từ đó thì Hai Lúa Miền Tây hoặc những người giỏi về CSDL như Levanduyet sẽ hướng dẫn bạn một cách cụ thể, khái quát, còn ở đây là topic VBA cho người mới bắt đầu.

Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")

Thế bạn biết bản chất của 2 câu này như thế nào chưa? Nó ở đâu và nó từ thư viện nào hay không? Bản chất là ở chỗ bạn hiểu nó như thế nào để bạn ứng dụng vào, chứ không phải người ta đặt code sẳn, sau đó bạn điền vào chỗ trống những range, những số liệu vô đó đâu bạn!
 
Upvote 0
Đây là bài bạn XN thực hành thôi, mà thực hành nào cũng khó trọn vẹn, bản thân tôi khi thực hành còn treo máy, mất dữ liệu tùm lum đấy thôi! Từ những kinh nghiệm "đau thương" đó mình sẽ tự biết cột nào, vùng nào là "bất khả xâm phạm", làm vùng chính để mình thực thi code, còn không thì lỗi có thể xảy ra một cách đáng tiếc.

Hy vọng các bạn mới bước vào môi trường VBA sẽ tự biết tư duy, tùy biến để code của mình đạt được tối ưu nhất.
xuan.nguyen82

Hic, mình mới chỉ "nhập môn" VBA thôi, trình còn non lắm. Thậm chí mới chỉ biết từ A phải đi tới B rồi mới tới C chứ chưa biết rút ngọn, đi tắt thế nào cho nhanh. Và chưa thể nào hoàn chỉnh được với code của mình.
Nếu ai đó có nhã ý và thấy code của mình chưa hoàn chỉnh, xin nêu lên góp ý, còn nói chung chung, mình cũng hổng hiểu luôn.
Thầy giáo mình chưa cho mình tốt nghiệp lớp mẫu giáo VBA, nên mình còn phải học hỏi nhiều.
Cảm ơn các thầy và các bạn!
Hi, cái này em kg có ý gì! chỉ đang muốn học thôi mà, em có biết code kiết gì đâu!
Chỉ thấy bấm code từ 2 lần trở lên Thì thấy mấy tiêu đề "Ngay tháng"... nó lập lại nữa mà. Chỉ mong các thầy & anh chị chỉ dẫn để nó khỏi lập lại thôi
Em cảm ơn!
 
Upvote 0
Tôi không muốn lý sự với bạn ở đây, nếu muốn về ADO thì vào mà thảo luận tại bài đó và bạn muốn bắt đầu từ đó thì Hai Lúa Miền Tây hoặc những người giỏi về CSDL như Levanduyet sẽ hướng dẫn bạn một cách cụ thể, khái quát, còn ở đây là topic VBA cho người mới bắt đầu.

Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")

Thế bạn biết bản chất của 2 câu này như thế nào chưa? Nó ở đâu và nó từ thư viện nào hay không? Bản chất là ở chỗ bạn hiểu nó như thế nào để bạn ứng dụng vào, chứ không phải người ta đặt code sẳn, sau đó bạn điền vào chỗ trống những range, những số liệu vô đó đâu bạn!

Một thành viên mới mà có kiến thức về ADO cũng rất đáng nể. Mỗi người có 1 cách giải quyết vấn đề và cách nhìn nhận vấn đề khác nhau. Bạn ấy cũng chỉ là đưa ra 1 phương pháp giải quyết cùng 1 đề bài. Em nghĩ nên để thành viên mới thoải mái đưa ra ý kiến của mình, có thể mở rộng kiến thức hoặc đưa ra những cách giải quyết khác nhau.
 
Upvote 0
Hi, cái này em kg có ý gì! chỉ đang muốn học thôi mà, em có biết code kiết gì đâu!
Chỉ thấy bấm code từ 2 lần trở lên Thì thấy mấy tiêu đề "Ngay tháng"... nó lập lại nữa mà. Chỉ mong các thầy & anh chị chỉ dẫn để nó khỏi lập lại thôi
Em cảm ơn!

Trời ơi, nói "không có biết code kiết gì đâu" là không đúng, mình đọc nhiều bài của bạn về code rồi. Tuy nhiên vì mình mới học nên sẽ có nhiều lỗi khi chạy code. Cảm ơn sự góp ý của bạn. Mỗi một lời góp ý của các bạn là kiến thức bổ ích cho những người như mình.
 
Upvote 0
Tôi không muốn lý sự với bạn ở đây, nếu muốn về ADO thì vào mà thảo luận tại bài đó và bạn muốn bắt đầu từ đó thì Hai Lúa Miền Tây hoặc những người giỏi về CSDL như Levanduyet sẽ hướng dẫn bạn một cách cụ thể, khái quát, còn ở đây là topic VBA cho người mới bắt đầu.

Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")


Thế bạn biết bản chất của 2 câu này như thế nào chưa? Nó ở đâu và nó từ thư viện nào hay không? Bản chất là ở chỗ bạn hiểu nó như thế nào để bạn ứng dụng vào, chứ không phải người ta đặt code sẳn, sau đó bạn điền vào chỗ trống những range, những số liệu vô đó đâu bạn!
Đúng ra nếu 2 dòng trên không có cũng được, bạn đừng cho rằng là chỉ mình biết còn người mới tham gia như mình chẳng biết tí gì về nó. 2 câu trên nếu không khai báo thì sẽ mất công tham chiếu trong thư viện của Microsoft ActiveX Data Objects x.x Library. Nếu tham chiếu như thế này thì sẽ dể cho người lập trình nhưng ngược lại sẽ gây khó cho người sử dụng. Điều này là căn bản cho người dùng ADO sao bạn lại hỏi tôi câu này?
 
Upvote 0
Hi, cái này em kg có ý gì! chỉ đang muốn học thôi mà, em có biết code kiết gì đâu!
Chỉ thấy bấm code từ 2 lần trở lên Thì thấy mấy tiêu đề "Ngay tháng"... nó lập lại nữa mà. Chỉ mong các thầy & anh chị chỉ dẫn để nó khỏi lập lại thôi
Em cảm ơn!
Thêm điều kiện củ chuối này vậy:
If Range("B" & iRow) <> "Nguoi Lap Bang" Then
PHP:
Sub Xuan5_2()    
Worksheets("Sheet1").Activate  
  'khai báo bi?n d?ng Long (tham kh?o Data Type trong Help c?a VBA)   
 Dim iRow As Long  
  'l?y giá tr? hàng c?a Range tìm du?c và gán cho bi?n
    iRow = Range("B1000").End(xlUp).Row  
  If Range("B" & iRow) <> "Nguoi Lap Bang" Then  
  'Ghép bi?n dó cho "kh?i" cell  
  Range("A8:D" & iRow).Borders.LineStyle = xlContinuous 
   'cung bi?n dó ghép vào 1 cell    
    With Range("B" & iRow)    
    .Offset(1, 1) = "Ngay        thang          nam"      
  .Offset(2) = "Nguoi Lap Bang"      
  .Offset(2, 2) = "Nguoi Kiem Soat"  
  End With   
 End If
End Sub
 
Upvote 0
Như thủ tục trên, bạn sẽ bớt đi 1 công đoạn Range("B1000").End(xlUp).

Đó cũng là một cách bạn tư duy để làm cho code hoạt động hiệu quả.
Có thể dùng SpecialCells để xác định dòng cuối cùng của dữ liệu, tuy nhiên mỗi cách đều có ưu và khuyết khác nhau, quan trọng là biết cách vận dụng cho phù hợp với csdl.
 
Upvote 0
Tiếp tục bài 8 (Hic, em chỉ kẻ vẽ khung viền được như thế này thôi)

Mã:
Sub Xuan5()
Worksheets("Sheet1").Activate
With Range([B8], [B1000].End(xlUp)).Offset(, -1).Resize(, 4)
.Borders.LineStyle = xlContinuous
 End With
With Range("B1000").End(xlUp)
 .Offset(1, 1) = "Ngay        thang          nam"
 .Offset(2) = "Nguoi Lap Bang"
 .Offset(2, 2) = "Nguoi Kiem Soat"
 End With
 End Sub
Tôi thấy dòng thứ 3 With Range([B8], [B1000].End(xlUp)).Offset(, -1).Resize(, 4)
nên sửa thành With Range([B7], [B1000].End(xlUp)).Offset(, -1).Resize(, 4)
để đóng khung cả tiêu đề .
và Public Sub Xuan4()
dòng thứ 10 .[A8:D1000].ClearContents
nên sửa thành .[A8:D1000].Clear
vì nếu dữ liệu lần lọc sau nhỏ hơn lần lọc trước, Boder sẽ không được xóa , vì dòng lệnh trên chỉ xóa nội dung.
 
Upvote 0
Tôi thấy dòng thứ 3 With Range([B8], [B1000].End(xlUp)).Offset(, -1).Resize(, 4)
nên sửa thành With Range([B7], [B1000].End(xlUp)).Offset(, -1).Resize(, 4)
để đóng khung cả tiêu đề .
và Public Sub Xuan4()
dòng thứ 10 .[A8:D1000].ClearContents
nên sửa thành .[A8:D1000].Clear
vì nếu dữ liệu lần lọc sau nhỏ hơn lần lọc trước, Boder sẽ không được xóa , vì dòng lệnh trên chỉ xóa nội dung.
Còn 1 cách tuy nó mất công nhưng cũng khá hiệu quả về cách tạo tiêu đề cuối trang đó là phải thiết kế cái chân tiêu đề đó, lưu vào nơi nào đó, xong copy và dán phía dưới cuối cùng của bảng kết quả.
 
Upvote 0
Tôi thấy dòng thứ 3 With Range([B8], [B1000].End(xlUp)).Offset(, -1).Resize(, 4)
nên sửa thành With Range([B7], [B1000].End(xlUp)).Offset(, -1).Resize(, 4)
để đóng khung cả tiêu đề .
và Public Sub Xuan4()
dòng thứ 10 .[A8:D1000].ClearContents
nên sửa thành .[A8:D1000].Clear
vì nếu dữ liệu lần lọc sau nhỏ hơn lần lọc trước, Boder sẽ không được xóa , vì dòng lệnh trên chỉ xóa nội dung.

Mặc dù tùy vào dữ liệu mà đặt số dòng cuối cùng, nhưng các bạn cũng nên tập thói quen lấy dòng cuối cùng của sheet để chạy code. Với Excel 2003 thì các bạn chọn dòng cuối là 65536 để mình End(xlUp). Bây giờ, mặc dù tôi đang sử dụng cả 2 loại 2003-2007 nhưng dù viết bên nào tôi cũng chọn dòng cuối là 65536 vì khi đó mình có thể chuyển qua định dạng từ 2007 qua 2003 code cũng không bị lỗi. Với số dòng như thế thì cũng khó có CSDL trên excel nào lên được tới đó.

Mặt khác, nếu chỉ để áng dòng là 1000 thì có thể có một lỗi đáng tiếc là tràn dòng. Vì thế nên chọn dòng cuối cùng của sheet mà thực thi code.

Hi, cái này em kg có ý gì! chỉ đang muốn học thôi mà, em có biết code kiết gì đâu!
Chỉ thấy bấm code từ 2 lần trở lên Thì thấy mấy tiêu đề "Ngay tháng"... nó lập lại nữa mà. Chỉ mong các thầy & anh chị chỉ dẫn để nó khỏi lập lại thôi
Em cảm ơn!

Cái câu tô đậm là bạn đang khiêm tốn đấy, nhưng thiết nghĩ, đã bước vào lập trình thì mọi người luôn luôn nghĩ trong đầu phải học cách BẪY LỖI. Nếu lập trình mà không bẫy lỗi thì chỉ có VBA "thô" thôi. Cho nên câu hỏi của bạn cũng rất đáng được chú ý đối với các học viên mới.

Giả sử tôi có Sheet1 và một cơ sở dữ liệu, bắt đầu từ dòng 4 là dòng tiêu đề, tôi muốn các bạn xóa dữ liệu (ClearContents) từ dòng 5 trở đi, không xóa tiêu đề nha các bạn.

Điều kiện:

HÃY ĐỂ CÁC BẠN MỚI HỌC THỰC HIỆN, CÁC BẠN "LÃO LÀNG" XIN VUI LÒNG ĐỢI CÁC BẠN MỚI HỌC LÀM XONG VÀI BÀI RỒI HÃY GÓP Ý VÀ TRUYỀN ĐẠT THÊM SAU NHÉ.

- Lấy cột A làm chuẩn.

- Dùng phương thức End(xlUp) để dò hàng cuối cùng của cột A rồi từ cột A các bạn tính hay xác định đến các cột khác để xóa dữ liệu.

- Sau khi hoàn tất thủ tục, gán macro xóa đó vào nút lệnh có sẳn (Xóa hàng).

- Bấm nút lệnh đó để chạy thủ tục.

- Bấm nút đó lần 2 để kiểm tra.

Ý nghĩa của bài tập này: Tìm ra lỗi code của mình và bẫy lỗi như thế nào.

Các bạn có thể vận dụng kiến thức từ trong topic này để thực hiện, không cần phải tìm xa hơn trong diễn đàn này đâu!

Dĩ nhiên bẫy lỗi ta phải dùng hàm IF nhiều rồi!

CÁC BẠN MỚI HỌC VBA HÃY TỰ THỰC HÀNH, TỰ MÀY MÒ ĐỂ CÓ THÊM KINH NGHIỆM CHO CHÍNH BẢN THÂN, ĐỪNG HỎI NHỮNG NGƯỜI ĐÃ BIẾT NHÉ VÌ ĐÓ CHÍNH LÀ KIẾN THỨC CỦA BẢN THÂN MÌNH.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em nghĩ là khi xây dựng topic này thì chủ topic đã có ý đồ về hệ thống bài học cho người mới bắt đầu. Từ đơn giản đến phức tạp và chỉ nên 1 thầy ra đề. Rồi các thành viên muốn học sẽ tham gia giải bài tập theo cách của mình, kể cả cách theo ngôn ngữ ADO của Anh chàng ngốc. Vì mỗi người có phương pháp giải quyết vấn đề khác nhau. Kể cả ngôn ngữ ADO cũng là phương pháp hay.
Việc anh Nghĩa đưa ra câu hỏi để thách đố với Anh chàng Ngốc vậy e nghĩ là chưa phù hợp. Một thành viên mới thì hãy cứ để bạn ấy học theo cách của bạn ấy. Kiến thức mênh mông người mạnh mặt này hay yếu mặt khác đều phải tự bồi đắp kiến thức. Chẳng ai nói tài được tất cả các vấn đề cả. Rất nhiều thành viên dù là mới nhưng rất giỏi hoặc kiến thức rộng nhưng chưa thể hiện...
A Nghĩa là người vững về kiến thức thì có thể hỗ trợ topic này bằng cách góp ý cho "học sinh" về các lỗi mà họ mắc phải khi giải bài tập.
 
Lần chỉnh sửa cuối:
Upvote 0
Em nghĩ là khi xây dựng topic này thì chủ topic đã có ý đồ về hệ thống bài học cho người mới bắt đầu. Từ đơn giản đến phức tạp và chỉ nên 1 thầy ra đề. Rồi các thành viên muốn học sẽ tham gia giải bài tập theo cách của mình, kể cả cách theo ngôn ngữ ADO của Anh chàng ngốc. Vì mỗi người có phương pháp giải quyết vấn đề khác nhau. Kể cả ngôn ngữ ADO cũng là phương pháp hay.
Việc anh Nghĩa đưa ra câu hỏi để thách đố như vậy e nghĩ là chưa phù hợp. Một thành viên mới thì hãy cứ để bạn ấy học theo cách của bạn ấy.

Học thì cũng có chính khóa, phụ khóa, trong một lớp học chúng ta cũng tự chia nhóm ra để học, rồi học thêm ở các nơi khác nữa.

Đây không phải là một bài quá khó, nó còn dễ hơn rất nhiều so với bác Sa_DQ ra bài tập nữa. Và khẳng định với bạn đây không phải là "câu đố", qua theo dõi các bài mà các bạn đã thực hành trong topic này thì các bạn đã thành thạo việc End(xlup), Resize, Offset cả rồi nên đầu tư một tí để có thêm kinh nghiệm xử lý trên Range là một hành trang cần thiết cho việc bẫy lỗi cơ bản nhất (không muốn nói là sơ đẳng nhất) để các bạn tiếp tục bước đi một cách vững chắc trong việc học này.

Bạn có thể không trả lời bài này, nhưng bạn cứ thử nếu bạn thích.

Trân trọng.
 
Upvote 0
Tôi nghĩ không sao cả. Bạn "anh chàng ngốc" cứ giải, không giải được, ta nói không giải được, sợ gỉ ? ta đang học mà. Còn bạn Nghĩa ra đề vì thấy bạn "anh cháng ngốc" khá về ADo nên ra đề riêng thôi, cũng là để học. Mình chả biết Ado, không mình cũng thử .
 
Upvote 0
Tôi nghĩ không sao cả. Bạn "anh chàng ngốc" cứ giải, không giải được, ta nói không giải được, sợ gỉ ? ta đang học mà. Còn bạn Nghĩa ra đề vì thấy bạn "anh cháng ngốc" khá về ADo nên ra đề riêng thôi, cũng là để học. Mình chả biết Ado, không mình cũng thử .

Oh không, đây là dạng căn bản nhất, bạn thử hỏi bác ChanhTQ@ xem có phải vậy không? Còn việc thêm phần P/s là sau này thôi, không có gì là khó, gợi ý cho các bạn nè:

Mã:
Sub test()
    Range("VungDaXacDinh").ClearContents
End Sub

Quan trọng là bạn phải tìm cho được Vùng đã xác định như thế nào thôi. Quá đơn giản mà.
 
Upvote 0
Giả sử tôi có Sheet1 và một cơ sở dữ liệu, bắt đầu từ dòng 4 là dòng tiêu đề, tôi muốn các bạn xóa dữ liệu (ClearContents) từ dòng 5 trở đi, không xóa tiêu đề nha các bạn.

Bài này chắc chắn là 1 phần nhỏ trong 1 bài toán lớn nào đó
Đương nhiên các bạn có nhiều cách làm, nhưng nếu là tôi làm thì chả cần xlUp, xlDown gì ráo --> Cứ đơn giản là Range("A5:H60000").ClearContents cho khỏe thân
Đã "quét dọn" mà cũng tiết kiệm nữa sao?
Có thể ai đó sẽ nói rằng "vì sợ xóa nhầm "cái thứ gì đó" phía dưới dòng cuối cùng có dữ liệu của cột A" ---> Tôi sẽ trả lời rằng: "Dữ liệu kiểu đó là không thể chấp nhận!"
 
Upvote 0
Bài này chắc chắn là 1 phần nhỏ trong 1 bài toán lớn nào đó
Đương nhiên các bạn có nhiều cách làm, nhưng nếu là tôi làm thì chả cần xlUp, xlDown gì ráo --> Cứ đơn giản là Range("A5:H60000").ClearContents cho khỏe thân
Đã "quét dọn" mà cũng tiết kiệm nữa sao?
Có thể ai đó sẽ nói rằng "vì sợ xóa nhầm "cái thứ gì đó" phía dưới dòng cuối cùng có dữ liệu của cột A" ---> Tôi sẽ trả lời rằng: "Dữ liệu kiểu đó là không thể chấp nhận!"

Thầy ơi, đây chẳng là gì cả, đơn giản là một bài thực hành, giống như Bài làm thêm trong việc học mà thôi. Dùng xóa để đơn giản chứ biết đâu không phải là xóa mà là một thứ gì khác, copy paste hay chọn vùng đặt name chẳng hạn, sẽ làm sao xác định cho chính xác vùng và địa chỉ thật sự đây khi vùng dữ liệu chỉ là vùng rỗng chẳng có dữ liệu nào cả ngoài cái tiêu đề cột?

================================================

Với tất cả các bạn mới "vào nghề":

Nếu các bạn sau khi tự thực hành và đã gặp trường hợp như thế nào, bị lỗi ở đâu trền phần bài tập của mình, các bạn đưa cái lỗi ấy lên và chúng ta vừa gỡ rối để cùng nhau học tập nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom