Người mới học VBA, gặp khó khăn: Cú pháp, lý luận, thuật toán trong VBA thì vào đây cùng học!

Liên hệ QC

Cô Bé Dễ Thương

Thành viên thường trực
Tham gia
30/9/16
Bài viết
223
Được thích
48
Giới tính
Nữ
Các bạn cùng giống vấn đề như mình, xin hãy chỉ post bài tóm lược và trọng tâm nhất có thể (ngán nhất nhưng phải trọng tâm, xin cảm ơn)
Xin phép ban điều hành GPE cho cháu lập chủ đề này! Khi học VBA cháu thấy khó tìm và không tự nghĩ ra được cú pháp và lý luận dùng trong lập trình VBA.
Chăm đọc code cũng chỉ tìm hiểu được cú pháp và lý luận trong code nhưng đa phần là 50-50 không tìm thấy và nghĩ ra được. Vấn đề này quả là khó với người mới học code.
Mong chủ đề này được các bậc tiền bối chỉ dạy cho cháu(em) để có chút vốn để mày mò học code. Xin cảm ơn tất cả thật nhiều ạ!
(các bạn cùng giồng vấn đề như mình xin hãy post bài theo kiểu như mình ở dưới)
PHP:
Xin mở đầu bằng câu hỏi mà cháu(em) tìm kiếm mãi không thấy để bắt chước:
===================================================
Dim Rng1 as Range, Rng2 as Range, Rng4 as Range, Rng5 as Range
Dim rg as Range ,Rng as Range
===================================================
Cháu muốn gộp các bảng dữ liệu có cùng cấu trúc: Rng1, Rng2 , Rng3, Rng4, Rng5 thành 1 bảng. Mục đích để có thể dùng biến rg dùng vòng lặp For Each
duyệt từ Rng1 rồi đến Rng2 rồi đến Rng3 rồi đến Rng4 rồi đến Rng5. Hậu quả là phải viết ra 5 Sud để duyệt từng cái 1,nếu không gộp được các
Rng1,Rng2,Rng3,Rng4,Rng5 thành 1 bảng.
For Each rg In (Tất cả Rng1 và Rng2  và Rng3  và Rng4 và Rng5).Rows
................................................
Next rg
===================================================
Vậy cú pháp để cho biến rg duyệt "Tất cả các Rng1 và Rng2  và Rng3  và Rng4 và Rng5" trong một vòng lặp này là gì ạ?[CODE]
 
Lần chỉnh sửa cuối:
Nhưng anh phải cùng ăn roi nữa chớ...post bài về array nhé.
Để mai tôi tập post bài hỏi về việc lọc duy nhất trên nhiều sheet va không trùng cấu trúc bảng có thể được không. Tôi cũng đang nhức đầu tìm chưa ra hichic, chứ lập trình tôi có biết chi mô
 
Upvote 0
Để mai tôi tập post bài hỏi về việc lọc duy nhất trên nhiều sheet va không trùng cấu trúc bảng có thể được không. Tôi cũng đang nhức đầu tìm chưa ra hichic
Làm 1 Sub bắt nó phải trùng cấu trúc, hoặc lọc lần lượt ra 1 sheets, rồi dùng Dict táng nó tiếp , xử lý trên sheets " ảo" xong việc auto xóa nó đi. Kiểu này anh post vào đây nó đúng chỗ.
 
Lần chỉnh sửa cuối:
Upvote 0
Làm 1 Sub bắt nó phải trùng cấu trúc, hoặc lọc lần lượt ra 1 sheets, rồi dùng Dict táng nó tiếp , xử lý trên sheets " ảo" xong việc auto xóa nó đi. Kiểu này anh post vào đây nó đúng chỗ.
Không cần, cứ dùng code bài 26 phăng ra thêm
 
Upvote 0
Upvote 0
Cũng không có gì đặt trưng, mình có 4 sheet mỗi sheet điều có 2 cột mã đơn và mã hàng tuy nhiên 2 cột này nó không nằm cố định ví dụ sheet 1 mã đơn nằm cột A và mã hàng cột B, sheet 2 mã đơn nằm cột D và mã hàng cột G. Mình chỉ muốn tổng hợp (mã đơn) & (mã hàng) có duy nhất trên 4 sheet gộp lại.
Máy Công ty không có nối mạng ra ngoài bạn nên mình toàn dùng điện thoại không
 
Upvote 0
Cũng không có gì đặt trưng, mình có 4 sheet mỗi sheet điều có 2 cột mã đơn và mã hàng tuy nhiên 2 cột này nó không nằm cố định ví dụ sheet 1 mã đơn nằm cột A và mã hàng cột B, sheet 2 mã đơn nằm cột D và mã hàng cột G. Mình chỉ muốn tổng hợp (mã đơn) & (mã hàng) có duy nhất trên 4 sheet gộp lại.
Máy Công ty không có nối mạng ra ngoài bạn nên mình toàn dùng điện thoại không
Nếu dùng Dictionary, hiện khá đã đủ chất liệu để chế cháo rồi đó.
 
Upvote 0
Cách 4:
- Toàn bộ dùng mảng
Bước 1: Do dữ liệu trên cùng sheet nên tạo 1 mảng là các cột đầu của các bảng dữ liệu: ColumnArr = Array(6, 10, 14, 18, 24, 30)
Bước 2: Dùng vòng lặp 6 vòng, mỗi vòng:
- Lấy dữ liệu 1 khối vào mảng
- Duyệt dữ liệu mảng, add vào Dict, tính SL bán (dữ liệu mới cho chuẩn, không làm dữ liệu và báo cáo ngu ngơ)
Bước 3:
Duyệt dữ liệu cột B: mặt hàng nào có bán thì điền tổng số lượng bán
Với cách 4 ở bài #26. Chú thương trò không tiếc công, đã cho 1 ví dụ và đặc sắc nhất của Dictionary đó là lọc trùng và cộng dồn.
Ở đây cháu lấy cách duyệt các bảng(6 bảng) của bài #24 tương tự như cách 3 theo hướng dẫn của bác @batman1 để có cách 4 của riêng bài #17 ( bài #17 là lấy tên thầy làm Key tên môn dạy là Item, bài #26 lấy mã hàng làm Key và lấy giá trị để cộng dồn là Item). Để trả bài và các bạn nào mới học VBA cũng có mà mày mò, và có cách 4 với bài #17(tên biến hơi ngồ ngộ do copy để sửa chứ chưa chỉnh chu) như sau:
PHP:
Sub DictExercise_trabaitap()
Dim MaxRw As Long, DataRw As Long, i As Long
Dim DataStore(), ColumnArr, sKey As String, SData As Range
Dim Dict, RArr()
Set Dict = CreateObject("Scripting.Dictionary")
ColumnArr = Array(6, 10, 14, 18, 22, 26)
With Sheets("cach3")
'==========================================
    For col = 0 To 5
        DataRw = .Cells(1000, ColumnArr(col)).End(xlUp).Row
        DataStore = .Range(.Cells(10, ColumnArr(col)), _
        .Cells(DataRw, ColumnArr(col))).Resize(, 3).Value
        For i = 1 To UBound(DataStore, 1)
            sKey = DataStore(i, 2)
            Dict.Add sKey, Array(DataStore(i, 3))
        Next
    Next
'Phần này là tương đương với cách duyệt theo hướng dẫn bài #24
'==========================================
Set SData = .Range("b10:d38")
DataRows = SData.Rows.Count
ReDim RArr(1 To DataRows, 1 To 1)
    For i = 1 To DataRows
        sKey = SData(i, 2)
        If Dict.exists(sKey) Then
        RArr(i, 1) = Dict.Item(sKey)(0)
    End If
    Next
.Range("d10").Resize(UBound(RArr, 1), 1).Value = RArr
End With
End Sub
Bài đã được tự động gộp:

Hết làm em gái mưa rồi à?
em gái mưa còn kém duyên quá nên giờ bày hết duyên ra ngoài luôn ạ :p
 
Lần chỉnh sửa cuối:
Upvote 0
Với cách 4 ở bài #26. Chú thương trò không tiếc công, đã cho 1 ví dụ và đặc sắc nhất của Dictionary đó là lọc trùng và cộng dồn.

'Phần này là tương đương với cách duyệt theo hướng dẫn bài #24
...
Chả có cái gì giống với bài 24. Bài 24 là cách sử dụng Union và xử lý Union. Ngoài ra, item chỉ 1 giá trị đơn cũng nhét vào mảng.
batman1 bài 33 đã viết:
Ngoài ra bạn nên thêm vào từ điển 1 GIÁ TRỊ với tư cách ITEM chứ sao lại thêm 1 MẢNG với chỉ 1 GIÁ TRỊ với tư cách ITEM? Tại sao lại làm phức tạp vấn đề vậy?
ptm bài 28 đã viết:
Sao vẫn cứ sử dụng Array cho mỗi 1 phần tử vậy?
Xem ra phải tưới nước sôi chứ không tưới hương hoa gì cả.
 
Upvote 0
Chả có cái gì giống với bài 24. Bài 24 là cách sử dụng Union và xử lý Union. Ngoài ra, item chỉ 1 giá trị đơn cũng nhét vào mảng.


Xem ra phải tưới nước sôi chứ không tưới hương hoa gì cả.
Hic cháu không ăn quen mì gói. Do tranh thủ có bài nên cứ chế vào nó chạy đc là úp ngay lên gpe.
Vài hôm nữa ngâm thêm về Array cháu sửa lại hết ạ.
 
Upvote 0
Lấy file và code bài 26, quăng lung tung dữ liệu 6 cửa hàng vào 6 sheet và chế đi nào

Quăng lung tung tức là quăng không cố định cột A hay B gì hết, mỗi sheet 1 cột khác nhau
 
Upvote 0
Lấy file và code bài 26, quăng lung tung dữ liệu 6 cửa hàng vào 6 sheet và chế đi nào

Quăng lung tung tức là quăng không cố định cột A hay B gì hết, mỗi sheet 1 cột khác nhau
Vâng ạ. Chắc sẽ sinh thêm cú pháp (nôm na như bài #24), cũng trường hợp duyệt nhiều bảng nhưng khác cái là mỗi bảng ở 1 Sheet. Giống bài anh @Phụ Hồ Lên Phú Hộ đang kêu đau đầu. Cháu thử xem sao có làm đươc không.
 
Lần chỉnh sửa cuối:
Upvote 0
Hình như mọi người đi sai chủ đề (có thể nhầm chăng, hay người hỏi nhầm)
Vì thấy chủ đề nói thuật toán, mà trong các bài viết toàn thấy code và lời minh họa giải thích, đâu có thấy nói chi thuật toán nào đâu.
 
Lần chỉnh sửa cuối:
Upvote 0
Hết làm em gái mưa rồi à?
Bây giờ muốn làm "Cô bé dễ thương" anh ạ. Chứ kiểu em gái mưa, em gái nuôi, em gái kết nghĩa thì hay bị ném đá lắm.
Mà ở Việt Nam cũng lạ. Nhưng tôi luôn thấy em gái mưa, em gái nuôi, em gái kết nghĩa chỉ là chuyện tào lao. Mà cái gì "nuôi" thì rồi cũng sẽ "thịt". Bầy đặt.
 
Upvote 0
Hình như mọi người đi sai chủ đề (có thể nhầm chăng, hay người hỏi nhầm)
Vì thấy chủ đề nói thuaạt toán, mà trong các bài viết toàn thấy code và lời minh họa giải thích, đâu có thấy nói chi thuật toán nào đâu.

Người mới học VBA, gặp khó khăn: Cú pháp, lý luận, thuật toán trong VBA thì vào đây cùng học!​

Có chứ bác, chưa đủ nhiều bài để phản ánh hết thôi! Em chủ quan suy từ em ra, muốn nói cho VBA nó hiểu câu "tôi có 5 bảng vba hãy duyệt 5 bảng dữ liệu cho tôi" để vba nó hiểu câu này thì là một kho kiến thức. Nhưng với bài #24 và #26 thì nói vba nó hiểu ngay. Người mới học gặp thớt này dễ học lắm chứ bác. Mong được bác chia sẻ thêm giúp cho việc học vba đỡ vất vả!
Bây giờ muốn làm "Cô bé dễ thương" anh ạ. Chứ kiểu em gái mưa, em gái nuôi, em gái kết nghĩa thì hay bị ném đá lắm.
Mà ở Việt Nam cũng lạ. Nhưng tôi luôn thấy em gái mưa, em gái nuôi, em gái kết nghĩa chỉ là chuyện tào lao. Mà cái gì "nuôi" thì rồi cũng sẽ "thịt". Bầy đặt.
Vâng! "Bố Đường" thịt thật ấy bác ạ.
Kém duyên quá! Nên cháu đổi biết đâu được nhiều thầy chỉ cho hơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Còn cháu để tên cũ thấy không hợp phong thủy và kém duyên quá! Nên đổi biết đâu được nhiều thầy chỉ cho hơn!
Phong thuỷ cũng là tào lao. Vô duyên thì nói thẳng là vô duyên, chứ kém gì. (Đọc trên mạng đầy, phát chán)
File dưới đây là đã quăng lung tung 6 sheet. Hiện tại là cùng bắt đầu dòng 4 chỉ khác cột, nếu khác dòng cũng vẫn được.
 

File đính kèm

  • DictExercise_2.xlsm
    1.1 MB · Đọc: 11
Upvote 0
Vô duyên thì nói thẳng là vô duyên, chứ kém gì. (Đọc trên mạng đầy, phát chán)
File dưới đây là đã quăng lung tung 6 sheet. Hiện tại là cùng bắt đầu dòng 4 chỉ khác cột, nếu khác dòng cũng vẫn được.
Nhưng mất code rồi chú ơi.
 
Upvote 0
Web KT

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

Back
Top Bottom