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:
Khi tách 2 mảng thì mảng nào mảng nấy có ý nghĩa riêng: mã và số lượng. Chứ không phải cột đầu và cột cuối của 1 mảng
ColumnArr phải là = Array(2, 4, 7, 3, 5, 8, 2)
chứ không phải = Array(2, 4, 7, 3, 4, 6, 2)
---------
Phải chú ý khai báo biến, gán giá trị biến, ... khi sửa code chứ? Biến mới không khai báo thêm, biến cũ không dùng thì lại cứ gán giá trị. (ResizeArr)
------
Value và Value2: Trong 1 số trường hợp của kiểu dữ liệu, Value2 nhanh hơn Value 1 tẹo nhất là khi dữ liệu trên 50 ngàn dòng. Thôi đừng cố, tôi còn quên mất rồi chứ đừng nói là con vịt tắm nước sôi
Vịt hóa thiên nga ạ.
Vâng cháu sửa lại phần code bonus.
PHP:
Sub Dict_Episode_6_bonus()
Dim DataRw As Long, i As Long
Dim ColumnArr, sKey As String, RowArr, SheetArr, ResizeArr
Dim Dict, SArr(), RArr()
Set Dict = CreateObject("Scripting.Dictionary")
ResizeArr = Array(3, 5, 7, 2, 2, 3, 3)
ItemArr = Array(4, 8, 13, 4, 4, 6, 4)
ShArr = Array(2, 3, 4, 5, 6, 7, 8)
ColumnArr = Array(2, 4, 7, 3, 5, 8, 2)
RowArr = Array(7, 19, 10, 12, 17, 13, 6)
For Seq = 0 To 6
    With Sheets(ShArr(Seq))
        DataRw = .Cells(100000, ColumnArr(Seq)).End(xlUp).Row
        StoreCode = .Range(.Cells(RowArr(Seq), ColumnArr(Seq)), _
        .Cells(DataRw, ColumnArr(Seq))).Value2
        StoreQty = .Range(.Cells(RowArr(Seq), ItemArr(Seq)), _
        .Cells(DataRw, ItemArr(Seq))).Value2
        For i = 1 To UBound(StoreCode, 1)
            sKey = StoreCode(i, 1)
            If Not Dict.exists(sKey) Then
                Dict.Add sKey, StoreQty(i, 1)
            Else
                Dict.Item(sKey) = Dict.Item(sKey) + StoreQty(i, 1)
            End If
        Next
    End With
Next Seq
With Sheets("Data")
SArr = .Range(.Cells(3, 2), .Cells(1000000, 2).End(xlUp)).Value
ReDim RArr(1 To UBound(SArr, 1), 1 To 1)
For i = 1 To UBound(SArr, 1)
    If Dict.exists(SArr(i, 1)) Then
        RArr(i, 1) = Dict.Item(SArr(i, 1))
    Else
        RArr(i, 1) = 0
    End If
Next
.Range("D3:D1000").ClearContents
.Range("D3").Resize(UBound(SArr, 1), 1) = RArr
End With
End Sub
Kết quả 2 code: Dict_Episode_6 và Dict_Episode_6_bonus(với dữ liệu văng lung tung) đã giống kết quả của bác @Ba Tê (bài của bác đã sửa lại cấu trúc dữ liệu bằng tay)
Thêm bài nữa đi chú. Có dòng so le nhau nữa là đủ bộ "Dictionary VBA Bí Truyền"
 
Lần chỉnh sửa cuối:
Upvote 0
- Đặt tên theo quy định: Kiểu bài tập áp dụng Dictionary thứ 7
- (Tức thức thứ 7 trong "Dictionary Bí Truyền" kiểu này em đặt)
- Thức thứ 7 là cách gọi vui, nhằm đánh dấu rằng có một trường hợp: Các bảng nằm rải rác ở các Sheets, sau đó các cột trong bảng lại giãn ra đổi chiều thứ tự trước sau, sau đó các cột trong bản lại so le nhau. Nhưng vẫn sử dụng Dic được với hình ảnh xiên thịt nướng, xiên 1 nhát được 5 miếng thịt (ý nói 1 vòng For Seq = 0 to 6)
PHP:
Sub Dict_Episode_7()
Dim DataRw As Long, i As Long
Dim ColumnArr, sKey As String, RowArr, ShArr
Dim Dict, SArr(), RArr()
Set Dict = CreateObject("Scripting.Dictionary")
ShArr = Array(2, 3, 4, 5, 6, 7, 8)
ColumnArrCode = Array(2, 4, 7, 3, 12, 12, 2)
RowArrCode = Array(7, 19, 10, 12, 11, 8, 6)
ColumnArrQty = Array(8, 14, 20, 7, 4, 6, 7)
RowArrQty = Array(9, 7, 15, 4, 17, 13, 13)
For Seq = 0 To 6
    With Sheets(ShArr(Seq))
        DataRwCode = .Cells(1000000, ColumnArrCode(Seq)).End(xlUp).Row
        DataRwQty = .Cells(1000000, ColumnArrQty(Seq)).End(xlUp).Row
        StoreCode = .Range(.Cells(RowArrCode(Seq), ColumnArrCode(Seq)), _
        .Cells(DataRwCode, ColumnArrCode(Seq))).Value2
        StoreQty = .Range(.Cells(RowArrQty(Seq), ColumnArrQty(Seq)), _
        .Cells(DataRwQty, ColumnArrQty(Seq))).Value2
        For i = 1 To UBound(StoreCode, 1)
            sKey = StoreCode(i, 1)
            If Not Dict.exists(sKey) Then
                Dict.Add sKey, StoreQty(i, 1)
            Else
                Dict.Item(sKey) = Dict.Item(sKey) + StoreQty(i, 1)
            End If
        Next
    End With
Next Seq
With Sheets("Data")
SArr = .Range(.Cells(3, 2), .Cells(1000000, 2).End(xlUp)).Value
ReDim RArr(1 To UBound(SArr, 1), 1 To 1)
For i = 1 To UBound(SArr, 1)
    If Dict.exists(SArr(i, 1)) Then
        RArr(i, 1) = Dict.Item(SArr(i, 1))
    Else
        RArr(i, 1) = 0
    End If
Next
.Range("D3:D1000").ClearContents
.Range("D3").Resize(UBound(SArr, 1), 1) = RArr
End With
End Sub
- Từ người không biết về VBA với thời gian thực sự có học và đọc là 2 tuần,bảng tính Excel các hàm thì làm gì cũng Seach google là chính( nghĩa là chẳng nhớ gì, nói chung cũng gà gà). Nhưng cơ duyên thế nào mà gặp được chú Mỹ @ptm0412. Được người thầy là chuyên gia thiết kế phân tích phần mềm, lại là Smod của diễn đàn hàng đầu về lập trình VBA đã chỉ cho. Mình học từ chú mà không có một sự chuẩn bị lý thuyết nào, chỉ dựa vào các từ khóa trong code để tra ngược và tìm lý thuyết đó để đọc. Quá may mắn khi được là thành viên của diễn đàn và được chú chỉ cho.
- Với phần mềm Excel này khi nào bạn ngộ ra rằng: 1 Cells --> biến thành 1 đoạn thẳng --> biến thành hình chữ nhật --> thành đoạn thẳng --> thành 1 Cells thì lúc đó bạn mới có khả năng tự học và đọc hiểu tài liệu và bài tập(VBA), khi hiểu mới chế cháo tốt và có sáng tạo được.
- Nói vui theo phim chưởng thì. Dictionary như là ngoại công, còn Array như là nội công, còn ra được đòn Oánh người thì phải do cái hoạt động não bộ từng người!
- Dự báo rằng TOP này sẽ đặt 1 triệu Views trong vòng 1 năm và cùng với đó là diễn đàn có thêm nhiều thành viên mới. Các anh chị Youtuber rất thích những cái là lạ như này để ra video, xin hãy nghi rõ nguồn là từ trang này nhé!
 

File đính kèm

  • Dict_Exercise_7.xlsm
    1.4 MB · Đọc: 7
Lần chỉnh sửa cuối:
Upvote 0
1 nhát được 5 miếng thịt (ý nói 1 vòng For Seq = 0 to 6
0 tới 6 có 7 giá trị (step = 1), sao ra 5 cục hay vậy?

.Cells(1000000, ColumnArrCode(Seq)).End(xlUp).Row
Nếu >1000000 thì thuộc con rơi à?

StoreCode là giá trị đơn thì tèo ngay.

.Range("D3").Resize(UBound(SArr, 1), 1) = RArr
Dùng thuộc tính nào thì ghi rõ ràng.

Thức thứ 7 trong "Dictionary Bí Truyền" (phải có duyên lắm mới được học đấy nhá)
Không nên viết như thế, thành viên khác, mới tìm hiểu nhầm tưởng là cái gì ghê gớm, bắt chước theo.

Dẫn chứng cái mình đã nói từ đầu:
1615789776656.png

1615789811227.png

---
Cái căn bản chưa rành, mình cứ bày đặt mấy cái trên làm gì.
Nên bắt đầu ngay từ đầu, từ chỗ khai báo biến rồi mới tính cái tiếp (trên đúng tinh thần mình nói là học tập, không phải làm cho xong việc).

Dim ColumnArr, sKey As String, RowArr, ShArr
Dim Dict, SArr(), RArr()
 
Upvote 0
- Thức thứ 7 trong "Dictionary Bí Truyền" (phải có duyên lắm mới được học đấy nhá)
- Thức thứ 7 là cách gọi vui, nhằm đánh dấu rằng có một trường hợp: Các bảng nằm rải rác ở các Sheets, sau đó các cột trong bảng lại giãn ra đổi chiều thứ tự trước sau, sau đó các cột trong bản lại so le nhau. Nhưng vẫn sử dụng Dic được với hình ảnh xiên thịt nướng, xiên 1 nhát được 5 miếng thịt (ý nói 1 vòng For Seq = 0 to 6)
PHP:
Sub Dict_Episode_7()
Dim DataRw As Long, i As Long
Dim ColumnArr, sKey As String, RowArr, ShArr
Dim Dict, SArr(), RArr()
Set Dict = CreateObject("Scripting.Dictionary")
ShArr = Array(2, 3, 4, 5, 6, 7, 8)
ColumnArrCode = Array(2, 4, 7, 3, 12, 12, 2)
RowArrCode = Array(7, 19, 10, 12, 11, 8, 6)
ColumnArrQty = Array(8, 14, 20, 7, 4, 6, 7)
RowArrQty = Array(9, 7, 15, 4, 17, 13, 13)
For Seq = 0 To 6
    With Sheets(ShArr(Seq))
        DataRwCode = .Cells(1000000, ColumnArrCode(Seq)).End(xlUp).Row
        DataRwQty = .Cells(1000000, ColumnArrQty(Seq)).End(xlUp).Row
        StoreCode = .Range(.Cells(RowArrCode(Seq), ColumnArrCode(Seq)), _
        .Cells(DataRwCode, ColumnArrCode(Seq))).Value2
        StoreQty = .Range(.Cells(RowArrQty(Seq), ColumnArrQty(Seq)), _
        .Cells(DataRwQty, ColumnArrQty(Seq))).Value2
        For i = 1 To UBound(StoreCode, 1)
            sKey = StoreCode(i, 1)
            If Not Dict.exists(sKey) Then
                Dict.Add sKey, StoreQty(i, 1)
            Else
                Dict.Item(sKey) = Dict.Item(sKey) + StoreQty(i, 1)
            End If
        Next
    End With
Next Seq
With Sheets("Data")
SArr = .Range(.Cells(3, 2), .Cells(1000000, 2).End(xlUp)).Value
ReDim RArr(1 To UBound(SArr, 1), 1 To 1)
For i = 1 To UBound(SArr, 1)
    If Dict.exists(SArr(i, 1)) Then
        RArr(i, 1) = Dict.Item(SArr(i, 1))
    Else
        RArr(i, 1) = 0
    End If
Next
.Range("D3:D1000").ClearContents
.Range("D3").Resize(UBound(SArr, 1), 1) = RArr
End With
End Sub
- Từ người không biết về VBA với thời gian thực sự có học và đọc là 2 tuần,bảng tính Excel các hàm thì làm gì cũng Seach google là chính( nghĩa là chẳng nhớ gì, nói chung cũng gà gà). Nhưng cơ duyên thế nào mà gặp được chú Mỹ @ptm0412. Được người thầy là chuyên gia thiết kế phân tích phần mềm, lại là Smod của diễn đàn hàng đầu về lập trình VBA đã chỉ cho. Mình học từ chú mà không có một sự chuẩn bị lý thuyết nào, chỉ dựa vào các từ khóa trong code để tra ngược và tìm lý thuyết đó để đọc. Quá may mắn khi được là thành viên của diễn đàn và được chú chỉ cho.
- Với phần mềm Excel này khi nào ngộ ra rằng: 1 Cells --> biến thành 1 đoạn thẳng --> biến thành hình chữ nhật --> thành đoạn thẳng --> thành 1 Cells thì lúc đó bạn mới có khả năng tự học và đọc hiểu tài liệu và bài tập(VBA), khi hiểu mới chế cháo tốt và có sáng tạo được.
- Nói vui theo phim chưởng thì. Dictionary như là ngoại công, còn Array như là nội công, còn ra được đòn Oánh người thì phải do cái não của bạn!
- Dự báo rằng TOP này sẽ đặt 1 triệu Views trong vòng 1 năm và cùng với đó là diễn đàn có thêm nhiều thành viên mới. Các anh chị Youtuber rất thích những cái là lạ như này để ra video, xin hãy nghi rõ nguồn là từ trang này nhé!
Mình ngưỡng mộ nhiệt huyết của bạn. Tuy nhiên, khi kỹ năng code của bạn vượt qua được ngưỡng cơ bản thì bạn sẽ mĩm cười khi xem lại các bài tập trong chủ đề này. Lúc đó bạn sẽ nói: "Đuổi việc ngay người nào đã tạo ra cái mẫu báo cáo thống kê như thế này"
 
Upvote 0
0 tới 6 có 7 giá trị (step = 1), sao ra 5 cục hay vậy?


Nếu >1000000 thì thuộc con rơi à?


StoreCode là giá trị đơn thì tèo ngay.


Dùng thuộc tính nào thì ghi rõ ràng.


Không nên viết như thế, thành viên khác, mới tìm hiểu nhầm tưởng là cái gì ghê gớm, bắt chước theo.

Dẫn chứng cái mình đã nói từ đầu:
View attachment 255443

View attachment 255446

---
Cái căn bản chưa rành, mình cứ bày đặt mấy cái trên làm gì.
Nên bắt đầu ngay từ đầu, từ chỗ khai báo biến rồi mới tính cái tiếp (trên đúng tinh thần mình nói là học tập, không phải làm cho xong việc).
- 0 tới 6 có 7 giá trị (step = 1), sao ra 5 cục hay vậy? TL: Cháu xiên 1 xiên được 5 các Array ấy ạ
- Nếu >1000000 thì thuộc con rơi à? TL: Khi học đến bài này rồi người học sẽ hiểu 1000000 là cái gì ạ!
- StoreCode là giá trị đơn thì tèo ngay TL: Ngay từ đầu lấy nó làm Key rồi ạ!
*** Những đúng là cháu học như này được nhiều mà hiểu mà!
Bài đã được tự động gộp:

Mình ngưỡng mộ nhiệt huyết của bạn. Tuy nhiên, khi kỹ năng code của bạn vượt qua được ngưỡng cơ bản thì bạn sẽ mĩm cười khi xem lại các bài tập trong chủ đề này. Lúc đó bạn sẽ nói: "Đuổi việc ngay người nào đã tạo ra cái mẫu báo cáo thống kê như thế này"
Vâng! Chắc chắn nó không có khả năng xảy ra trong thực tế. Nhưng sẽ giúp cho người học có thể tự học và biết tra từ khóa ở đâu phải không thầy. Em rất ngưỡng mộ các bài viết của thầy, của bác V, bác b...
Do không biết công cụ gì ở bài #17, ngồi nghĩ mối liên hệ giữa i của vòng lặp và thứ tự trong các bảng. Code ghep_bang bài #17 nó thức tỉnh và thôi thúc yêu VBA ghê gớm!
Các từ khóa để tra ngược lý thuyết rất quan trọng phải không thầy? Em cảm ơn thầy đã ghi nhân, nếu không thì buồn lắm ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
- 0 tới 6 có 7 giá trị (step = 1), sao ra 5 cục hay vậy? TL: Cháu xiên 1 xiên được 5 các Array ấy ạ
- Nếu >1000000 thì thuộc con rơi à? TL: Khi học đến bài này rồi người học sẽ hiểu 1000000 là cái gì ạ!
- StoreCode là giá trị đơn thì tèo ngay TL: Ngay từ đầu lấy nó làm Key rồi ạ!
*** Những đúng là cháu học như này được nhiều mà hiểu mà!
Bài đã được tự động gộp:


Vâng! Chắc chắn nó không có khả năng xảy ra trong thực tế. Nhưng sẽ giúp cho người học có thể tự học và biết tra từ khóa ở đâu phải không thầy. Em rất ngưỡng mộ các bài viết của thầy, của bác V, bác b...
Các từ khóa để tra ngược lý thuyết rất quan trọng phải không thầy? Em cảm ơn thầy đã ghi nhân, nếu không thì buồn lắm ạ!
1. Khi cài nút chiếc áo sơ mi thì cái nút đầu tiên rất quan trọng, theo mình thì cái nút đầu tiên đang không ổn
2. Nên thay số 1000000 bằng Rows.Count
3. Tạo một sheet bảng tra, chỉ cần thêm thông tin cho bảng tra nếu muốn thêm sheet, không cần sửa code, đại loại như thế này

Sheet
2​
3​
4​
5​
6​
7​
8​
Column
2​
4​
7​
3​
12​
12​
2​
Row Code
7​
19​
10​
12​
11​
8​
6​
Column Qty
8​
14​
20​
7​
4​
6​
7​
Row Qty
9​
7​
15​
4​
17​
13​
13​
 
Upvote 0
- Nếu >1000000 thì thuộc con rơi à? TL: Khi học đến bài này rồi người học sẽ hiểu 1000000 là cái gì ạ!
Tới đây mới biết thì lại sinh một bé xinh xinh nữa à?

- StoreCode là giá trị đơn thì tèo ngay TL: Ngay từ đầu lấy nó làm Key rồi ạ!
Không đúng. Bạn chưa nắm được liên hệ Range và Array.
 
Upvote 0
1. Khi cài nút chiếc áo sơ mi thì cái nút đầu tiên rất quan trọng, theo mình thì cái nút đầu tiên đang không ổn
2. Nên thay số 1000000 bằng Rows.Count
3. Tạo một sheet bảng tra, chỉ cần thêm thông tin cho bảng tra nếu muốn thêm sheet, không cần sửa code, đại loại như thế này

Sheet
2​
3​
4​
5​
6​
7​
8​
Column
2​
4​
7​
3​
12​
12​
2​
Row Code
7​
19​
10​
12​
11​
8​
6​
Column Qty
8​
14​
20​
7​
4​
6​
7​
Row Qty
9​
7​
15​
4​
17​
13​
13​
Vâng thầy. Thay 1000000 bằng Rows.Count sẽ tránh được cái lỗi" bỏ con rơi". Em cảm ơn thầy. Mong được thầy chỉ cho những chỗ sai sót và sẻ chia chút vốn kiến thức vba ạ.
Bài đã được tự động gộp:

Tới đây mới biết thì lại sinh một bé xinh xinh nữa à?


Không đúng. Bạn chưa nắm được liên hệ Range và Array.
Nếu được bác giúp cho là bài tập thì chúng cháu sẽ hiểu và học rất nhanh ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Sau này ai hỏi thì nói học tập toẹ, bập bõm, ti toe trên GPE thôi nhé, đừng nói học cụ thể của lão ct hay của ai nhé, xấu hổ cho mấy người đó lắm. Xấu hổ ở chỗ nói 5 lần 7 lượt mà không nhớ khai báo biến, đặt tên biến, không nhớ chấm mắm châm tương, không biết with end with để làm gì, không phân biệt If và Select case, không biết giá trị đơn giá trị mảng, thậm chí không biết thuộc tính và phương thức, .... tỷ thứ không biết. Lại còn ngoan cố cứ 1 giá trị đơn cũng gắn vô mảng
 
Upvote 0
Sau này ai hỏi thì nói học tập toẹ, bập bõm, ti toe trên GPE thôi nhé, đừng nói học cụ thể của lão ct hay của ai nhé, xấu hổ cho mấy người đó lắm. Xấu hổ ở chỗ nói 5 lần 7 lượt mà không nhớ khai báo biến, đặt tên biến, không nhớ chấm mắm châm tương, không biết with end with để làm gì, không phân biệt If và Select case, không biết giá trị đơn giá trị mảng, thậm chí không biết thuộc tính và phương thức, .... tỷ thứ không biết. Lại còn ngoan cố cứ 1 giá trị đơn cũng gắn vô mảng
- Dạ. Bảo là được ông bụt cho quyển sách học gì cũng cũng có.
Xót chú không có thời gian mà dạy thôi. Cháu bảo họ:"tôi không biết đầu cua tai ngheo vba ra làm sao mà sau 2 tuần tôi cảm thấy tự học, tự đọc code vba được". Khi ấy họ cứ bám theo chú mà cầu học ấy chứ.
- Thời điểm trước đó là cứ chạy được ra kết quả là ăn tiền, vì lấy code trc để sửa. Vừa tra ngược từ khóa trên code, vừa đọc lý thuyết, vừa sửa cho nó chạy. Chips nó nóng quá lên hơi đơ tý ạ!
Khi ngộ ra ý nghĩa của 1 Cells, mọi thứ bừng sáng chú ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Sau này ai hỏi thì nói học tập toẹ, bập bõm, ti toe trên GPE thôi nhé, đừng nói học cụ thể của lão ct hay của ai nhé, xấu hổ cho mấy người đó lắm. Xấu hổ ở chỗ nói 5 lần 7 lượt mà không nhớ khai báo biến, đặt tên biến, không nhớ chấm mắm châm tương, không biết with end with để làm gì, không phân biệt If và Select case, không biết giá trị đơn giá trị mảng, thậm chí không biết thuộc tính và phương thức, .... tỷ thứ không biết. Lại còn ngoan cố cứ 1 giá trị đơn cũng gắn vô mảng
Ơ, giống cháu nè, thủa mới học xong, ổng thầy của cháu cũng nói thẳng trước lớp: "Mày đừng bao giờ mở miệng ra nói rằng học tao". Lúc học cũng bị nói suốt, lúc nghe ổng thầy nói vậy cháu mừng rơi nước mắt, mới hiểu ra là mình quá tài năng, ông thầy sợ điều đó sẽ mang họa cho ổng. Từ đó cháu toàn nhận là mình không biết vba. trình vba từ đó nó cứ lẹt đẹt ở mức đi copy code của người khác...hihihi
Bài đã được tự động gộp:

Khi ngộ ra ý nghĩa của 1 Cells
bạn này giỏi thế, tôi rời xa thầy của mình mấy năm mà chưa ngộ được cái gì về cuộc đời. Mới có 2 tuần đã chế code được, tôi toàn phải đi trôm code của mấy lão, rồi oàn mình ra sửa cho nó hợp với file của mình, mỗi lần vậy là nhớ hoài ổng thầy
 
Lần chỉnh sửa cuối:
Upvote 0
Ơ, giống cháu nè, thủa mới học xong, ổng thầy của cháu cũng nói thẳng trước lớp: "Mày đừng bao giờ mở miệng ra nói rằng học tao". Lúc học cũng bị nói suốt, lúc nghe ổng thầy nói vậy cháu mừng rơi nước mắt, mới hiểu ra là mình quá tài năng, ông thầy sợ điều đó sẽ mang họa cho ổng. Từ đó cháu toàn nhận là mình không biết vba. trình vba từ đó nó cứ lẹt đẹt ở mức đi copy code của người khác...hihihi
Chị em thôi, em mới 18+. Gọi chị là tỷ tỷ rồi.
- Hồi đi học đại học cả lớp không ai làm thêm tải trong động đất trong đồ án tốt nghiệp. Mỗi mình muội vì yêu thích nên lao vào làm. Hội bạn thì cứ file excel cũ, bản vẽ cũ để sửa lại. Còn muội phải tự thiết kế file excel cho riêng mình và bản vẽ cực kỳ mất công
- Nhưng đến giáp năm mới năm nay thời điểm đó quay lại diễn đàn còn không nhớ được gì Excel ấy. Nhân covi covit mới thấy cái các cái file ngày xưa mình viết sao nặng quá thể. Nên mới học VBA. Mà tính em đã học là phải học kỳ được. Rồi giờ cảm thấy hiểu được code và tự kiếm tài liệu được. Cực nhưng vui thật!
 
Lần chỉnh sửa cuối:
Upvote 0
Thấy thớt cũng khá tự tin nên tôi chỉ gợi ý bằng hình ảnh. Nếu thực sự biết mình viết cái gì trong "thức bí truyền" thì tự khắc sẽ biết cách khắc phục.
1615799156740.png
 
Upvote 0
Thấy thớt cũng khá tự tin nên tôi chỉ gợi ý bằng hình ảnh. Nếu thực sự biết mình viết cái gì trong "thức bí truyền" thì tự khắc sẽ biết cách khắc phục.
View attachment 255470
Đẳng cấp cao nhất vẫn là chữ Nhẫn phải không ạ?.
Cháu nói vui với các bạn đồng trang lứa thôi. Với lại cháu trân quý những gì cháu được nhận thì cháu gọi vậy, quý vì nó hiếm, mấy ai chia sẻ cho đâu, đọc sách nào mà có được ạ. Xin phép bác ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Tại vì bạn học kiểu học vẹt nên mới thấy quý hiếm (vì sát với bài toán của bạn) chứ tài liệu chia sẻ thì đầy nhé.
Tôi không cà khịa bạn làm gì. Cái hình tôi gợi ý chỉ ra 3 lỗi sai trong code của bạn, nếu bạn không nhìn ra thì rõ ràng là thiếu kiến thức cơ bản.
 
Upvote 0
Tại vì bạn học kiểu học vẹt nên mới thấy quý hiếm (vì sát với bài toán của bạn) chứ tài liệu chia sẻ thì đầy nhé.
Tôi không cà khịa bạn làm gì. Cái hình tôi gợi ý chỉ ra 3 lỗi sai trong code của bạn, nếu bạn không nhìn ra thì rõ ràng là thiếu kiến thức cơ bản.
Cháu hiểu code. Ý bác có dòng dữ liệu không theo định dạng chung chứ gì.
Việc gì cũng vậy thôi. Trước khi thực hiện phải khảo sát.
1. Loại dữ liệu hay làm sao đó để cùng cấu trúc. Bắt nó phải cùng cấu truc mới gọi là xử lý chứ ạ. Việc này hoàn toàn làm đc bằng code hoặc bằng tay.
2. Code không sai, ý muốn chủ quan con người đến đâu thì tìm cách bổ xung đến đấy tùy thời điểm đó khi khảo sát đc dữ liệu ra sao
Cháu rất muốn đc các bác chỉ cho chỗ sai, nhưng đúng như anh thợ đục mộc các cạc mốc cứ kỳ cạch một mình vậy vì cháu tin học Dict thì đồng nghĩa với cháu đang xiên trúng anh Array, trăm mối như vậy cũng phải chọn ra cách mà đi mà học chứ ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Nếu quan điểm của bạn như vậy thì cần gì tranh luận nữa :D
Với cháu bác lại không nhẫn cho cháu.
Cái thiếu của code thì bác là sai, còn cái bác bảo cho là thiếu thì cháu lại bảo nó là đúng trong trường hợp dữ liệu hiện có.Dù có rất nhiều ý kiến trái chiều thì cháu rất kiên nhất 1 điều dạ, 2 điều vâng để nghe. Nhưng vâng xong cái thì " mày tự học một mình đi" rất có thể sa vào áp đặt mà thiếu đi sự chỉ bảo.
 
Lần chỉnh sửa cuối:
Upvote 0
Với cháu bác lại không nhẫn cho cháu.
Cái thiếu của code thì bác là sai, còn cái bác bảo cho là thiếu thì cháu lại bảo nó là đúng trong trường hợp dữ liệu hiện có.Dù có rất nhiều ý kiến trái chiều thì cháu rất kiên nhất 1 điều dạ, 2 điều vâng để nghe. Nhưng vâng xong cái thì " mày tự học một mình đi" rất có thể sa vào áp đặt mà thiếu đi sự chỉ bảo.
Ý của anh @huuthang_bd là phải tự test trường hợp trong hình bài 113. Hình đó nếu bỏ vào dữ liệu chạy code chắc chắn sẽ lỗi ít nhất 3 việc.
 
Upvote 0
Ý của anh @huuthang_bd là phải tự test trường hợp trong hình bài 113. Hình đó nếu bỏ vào dữ liệu chạy code chắc chắn sẽ lỗi ít nhất 3 việc.
Vâng ạ.sẽ có thêm add bonus 7.
"Ít nhất" đó là những việc:
- Có dòng dữ liệu trống trong xen vào bảng
- Cột làm Key có ô không thuộc cấu trúc
- Cột làm Item có ô không phải là số
Xử lý thì:
- Phân tích cấu trúc cột làm key, chia đôi ra đc 2 ký tự text và 1 số có 2 chữ số. Nếu ông nào không phải cấu trúc này thì không lấy làm key. Không lấy làm key thì không cần phân tích cấu trúc của Item. Bỏ qua Key đó không add vào dict
- Còn phải phân tích cấu trúc Item trong trường hợp Item đó có Key thuộc cấu trúc nhưng Item đó không phải là số thì cũng hủy Key đó.
Chiều cháu chạy thử ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom