Tìm kiểu màu trong danh sách.

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ữ
20210208_144454.jpg
Bài này em làm mãi không được ạ. Các thầy và anh chị giúp em với.
 

File đính kèm

  • Dammau1.xlsx
    9.9 KB · Đọc: 18
Lần chỉnh sửa cuối:
Này thì chỉ:
- Không dùng Dict
- Dùng 1 vòng lặp duyệt qua các dòng của Range Data: nếu color1 = color2 thì tăng biến MN lên, nếu color2 = color3 thì tăng biến NQ lên
- gán 2 biến xuống 2 ô kết quả
Sub thay "chỉ" bằng "viết". Buồn quá chú Mỹ ạ, cháu ngẫm nghĩ mãi không được. Bí bách kiểu như là trên bảo dưới không nghe ấy ạ. Vì ít vốn vba quá, hay dùng chính là excel, cháu mới tự học được dăm bữa vba. Chú làm ơn " run sub viết" cho cháu với.
 
Upvote 0
Sub thay "chỉ" bằng "viết". Buồn quá chú Mỹ ạ, cháu ngẫm nghĩ mãi không được. Bí bách kiểu như là trên bảo dưới không nghe ấy ạ.
Lại dùng từ ngữ gợi cảm ...xúc. Nhỏ này sao sao á.
PHP:
Sub SumSameColor()
Dim DataRng As Range
Dim LastRw As Long, MN As Long, NQ As Long
With Sheet1
    LastRw = .Cells(1000, 3).End(xlUp).Row
    Set DataRng = .Range("D23:G" & LastRw)
    For i = 1 To DataRng.Rows.Count
        If DataRng.Cells(i, 1).Interior.Color = _
            DataRng.Cells(i, 2).Interior.Color Then _
            MN = MN + DataRng.Cells(i, 4)
        If DataRng.Cells(i, 2).Interior.Color = _
            DataRng.Cells(i, 3).Interior.Color Then _
            NQ = NQ + DataRng.Cells(i, 4)
    Next
    .[I23].Value = MN
    .[J23].Value = NQ
End With
End Sub
 
Upvote 0
Này thì chỉ:
- Không dùng Dict
- Dùng 1 vòng lặp duyệt qua các dòng của Range Data: nếu color1 = color2 thì tăng biến MN lên, nếu color2 = color3 thì tăng biến NQ lên
- gán 2 biến xuống 2 ô kết quả
Anh đọc hướng dẫn ở bài #4 rồi xem người ta thực hiện ở bài #5 như thế nào. Nhìn kỹ hình *** thì tôi biết là trình độ của người ta có thể ở mức mà gợi ý của anh không đủ đâu. Tôi mà gặp những người như thế thì bỏ qua hoặc cầy hộ từ A đến Z. Không gợi ý nào đủ khi mà người ta còn không biết tự thêm Sub ... End Sub. Chưa kể là có thể phải thêm chút mắm muối (vd. tạo đít sần). :D

***: nhìn một khúc code chỏng chơ mà tôi thấy buồn cười quá.
 
Upvote 0
Anh đọc hướng dẫn ở bài #4 rồi xem người ta thực hiện ở bài #5 như thế nào.
***: nhìn một khúc code chỏng chơ mà tôi thấy buồn cười quá.
Tôi có xem hình bài 5, vì bài 4 của lão kia nên tôi đợi lão ấy vào mắng, nhưng lão ấy không thích "em gái mưa ... rào" hay sao ấy. Tuy nhiên khi tải file bài 19 tôi thấy đã bớt chỏng chơ, chỉ thiếu khai báo biến. Không chạy được là do lão kia viết chay nên lỗi.
 
Upvote 0
Anh đọc hướng dẫn ở bài #4 rồi xem người ta thực hiện ở bài #5 như thế nào. Nhìn kỹ hình *** thì tôi biết là trình độ của người ta có thể ở mức mà gợi ý của anh không đủ đâu. Tôi mà gặp những người như thế thì bỏ qua hoặc cầy hộ từ A đến Z. Không gợi ý nào đủ khi mà người ta còn không biết tự thêm Sub ... End Sub. Chưa kể là có thể phải thêm chút mắm muối (vd. tạo đít sần). :D

***: nhìn một khúc code chỏng chơ mà tôi thấy buồn cười quá.
Thêm sub và end sub vẫn đỏ. Lúc đó em nghĩ thầy VPE chỉ gợi ý nên cố tình viết thiếu. Mà bài 1 bài 2 với vốn ít ỏi bọn em hay gặp kiểu lỗi biên dịch dạng thừa thiếu dấu cách, dấu phảy, cách thể hiện 1 câu lệnh... mỗi cái nho nhỏ khiến tự biên tự diễn rất khó. Nên em hay xin bài mẫu để tự học từng câu.
Em nghĩ em ham học, xin bài mẫu có làm mệt các thầy 1 chút và cùng các bạn khác nữa cũng được biết thêm cái mới.
Chỉ vì chút đỏ cắt bài mẫu của em thì em buồn quá thầy ơi.
Bài đã được tự động gộp:

Tôi có xem hình bài 5, vì bài 4 của lão kia nên tôi đợi lão ấy vào mắng, nhưng lão ấy không thích "em gái mưa ... rào" hay sao ấy. Tuy nhiên khi tải file bài 19 tôi thấy đã bớt chỏng chơ, chỉ thiếu khai báo biến. Không chạy được là do lão kia viết chay nên lỗi.
Cháu cảm ơn chú ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Thêm sub và end sub vẫn đỏ.
Chuyện đỏ đỏ là chuyện sai, nhầm lẫn, tôi không bàn. Lý do? Vì lỗi và nhầm lẫn thì ai cũng có thể mắc phải, kể cả "cao thủ", chỉ cần một phút không tập trung. Còn chuyện không có Sub ... End Sub mới đáng nói, vì lần đầu tôi mới nhìn thấy. Nó không phải là một dấu phẩy, dấu cách để mà nhấn nhầm trong vô thức. Bỏ Sub và End Sub là phải chủ ý, hoặc không biết là nó phải có. Không thể bỏ Sub ... End Sub do sơ ý được. :D
 
Upvote 0
Chỉ vì chút đỏ cắt bài mẫu của em thì em buồn quá thầy ơi.
Có ai cắt đâu à? Code đầy đủ sửa từ gợi ý bài 4, so sánh để biết đã sửa gì, ở đâu.
PHP:
Sub testdemsomau()
Dim ditSan, ki
Set ditSan = CreateObject("Scripting.Dictionary")
For Each rg In Range("B5:E14").Rows
    ki = CStr(rg.Cells(1, 2).Interior.Color) & "|" & CStr(rg.Cells(1, 3).Interior.Color) & "|" & CStr(rg.Cells(1, 4).Interior.Color)
    ditSan(ki) = ditSan(ki) + 1
Next rg
Set rg = Range("G5:K5").Resize(ditSan.Count, 5)
For i = 1 To ditSan.Count
    ki = Split(ditSan.keys()(i - 1), "|")
    rg.Cells(i, 1).Value = i
    rg.Cells(i, 2).Interior.Color = CLng(ki(0))
    rg.Cells(i, 3).Interior.Color = CLng(ki(1))
    rg.Cells(i, 4).Interior.Color = CLng(ki(2))
    rg.Cells(i, 5).Value = ditSan.items()(i - 1)
    Next i
End Sub
 
Upvote 0
Chuyện đỏ đỏ là chuyện sai, nhầm lẫn, tôi không bàn. Lý do? Vì lỗi và nhầm lẫn thì ai cũng có thể mắc phải, kể cả "cao thủ", chỉ cần một phút không tập trung. Còn chuyện không có Sub ... End Sub mới đáng nói, vì lần đầu tôi mới nhìn thấy. Nó không phải là một dấu phẩy, dấu cách để mà nhấn nhầm trong vô thức. Bỏ Sub và End Sub là phải chủ ý, hoặc không biết là nó phải có. Không thể bỏ Sub ... End Sub do sơ ý được. :D
Vâng. Đầu tiên cũng phải làm cho hết báo lỡi mới kích run, em chủ ý không động 1 tý gì. Để xin full code. Vì em trọng chữ, trọng thầy, không đủ trình thêm những chỗ còn thiếu.
Đang cần thầy bạn chỉ cho mà bị ghét thì hết đường để học.
Có gì bỏ qua cho em nhé
 
Lần chỉnh sửa cuối:
Upvote 0
Lại dùng từ ngữ gợi cảm ...xúc. Nhỏ này sao sao á.
PHP:
Sub SumSameColor()
Dim DataRng As Range
Dim LastRw As Long, MN As Long, NQ As Long
With Sheet1
    LastRw = .Cells(1000, 3).End(xlUp).Row
    Set DataRng = .Range("D23:G" & LastRw)
    For i = 1 To DataRng.Rows.Count
        If DataRng.Cells(i, 1).Interior.Color = _
            DataRng.Cells(i, 2).Interior.Color Then _
            MN = MN + DataRng.Cells(i, 4)
        If DataRng.Cells(i, 2).Interior.Color = _
            DataRng.Cells(i, 3).Interior.Color Then _
            NQ = NQ + DataRng.Cells(i, 4)
    Next
    .[I23].Value = MN
    .[J23].Value = NQ
End With
End Sub
Code này thích thế. Dễ chế cháo cho nhiều bài tập.
 
Upvote 0
... vì bài 4 của lão kia nên tôi đợi lão ấy vào mắng, ...
Tôi vốn làm việc với con số, và giải trí bằng văn (hoặc đôi khi, nghệ thuật). Ít khi tôi trộn lẫn hai thứ.
Tô màu mè trong Excel là chuyện cực chẳng đã cho nên tôi không muốn nhúng vào sâu hơn. Tôi có mấy người bạn bệnh mù màu cho nên tôi biết tô màu không có ý thức là làm khó cho những người này. Đối với họ, chỉ có trắng đen và xám, các màu có độ xám gần nhau sẽ không phân biệt được.
 
Upvote 0
Code nào cũng hay, cũng chế cháo được. Biết đọc code là được rồi, sau đó sẽ tự viết
Vâng. Với bài #30 này cháu làm theo chế được nhiều bài tập. Có bài cháu chế đến 20 biến mà vẫn gọn gàng. Chế được chạy đúng, mà vẫn mơ màng chỗ vòng For sao không "Next i" mà lại Next range = MN(NQ).
 
Upvote 0
Upvote 0
Vậy cho tôi xem code cháo cho biến thứ 3 là MQ.

Đừng mơ, thắc mắc thì hỏi và hỏi cho rõ ràng
bienmq.jpg
Mã:
Sub SumSameColor()
Dim DataRng As Range
Dim LastRw As Long, MN As Long, NQ As Long, MQ As Long
With Sheet1
    LastRw = .Cells(1000, 3).End(xlUp).Row
    Set DataRng = .Range("D23:G" & LastRw)
    For i = 1 To DataRng.Rows.Count
        If DataRng.Cells(i, 1).Interior.Color = _
            DataRng.Cells(i, 2).Interior.Color Then _
            MN = MN + DataRng.Cells(i, 4)
        If DataRng.Cells(i, 2).Interior.Color = _
            DataRng.Cells(i, 3).Interior.Color Then _
            NQ = NQ + DataRng.Cells(i, 4)
        If DataRng.Cells(i, 1).Interior.Color = _
            DataRng.Cells(i, 3).Interior.Color Then _
            MQ = MQ + DataRng.Cells(i, 4)
    Next
    .[I23].Value = MN
    .[J23].Value = NQ
    .[K23].Value = MQ
End With
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Mã:
    .[K23].Value = MQ
Cháo ngon đấy bé. Còn Next không có i là viết tắt, VBA hiểu là Next của For đầu tiên nhìn thấy từ dưới lên. Nếu nhiều vòng for lồng nhau thì không nên viết tắt, nhưng nếu tắt thì VBA vẫn hiểu Next theo thứ tự từ trong ra ngoài
 
Upvote 0
Cháo ngon đấy bé. Còn Next không có i là viết tắt, VBA hiểu là Next của For đầu tiên nhìn thấy từ dưới lên. Nếu nhiều vòng for lồng nhau thì không nên viết tắt, nhưng nếu tắt thì VBA vẫn hiểu Next theo thứ tự từ trong ra ngoài
Vâng.Giống như dùng "If - End If" thì có thể viết tắt để bỏ "End if" như trong bài #30.
 
Upvote 0
Upvote 0
Thử code với điều kiện khác: cộng các trường hợp M và N đảo ngược nhau, N và Q đảo ngược nhau, M và Q đảo ngược nhau.
Code hay ở bảng bao nhiêu cột, dòng cũng dc, muốn trích cái gì ra cũng đc. Cháu chẻ nhỏ MN, NQ, MQ:
MN = MN1 + MN2 + ...+ MNn (n thuộc Z)
...
MQ = MQ1 + MQ2 +...+ MQn
Với mỗi số hạng của tổng trên là 1 biến. Mỗi biến đó được gắn với giá trị của cell. Thì vẫn gọn gàng tường minh.
Phải nói là trích lọc rất "cưng". Với rất nhiều điều kiện.
 
Upvote 0
Web KT
Back
Top Bottom