quá tuyệt vời. cảm ơn bạn HieuCD và bạn Cá Ngừ F1.Dữ liệu nhiều cần tăng tốc độ xử lý nên code qua nhiều bước loại dần dữ liệu, sort trước xử lý sau code sẽ gọn hơn
quá tuyệt vời. cảm ơn bạn HieuCD và bạn Cá Ngừ F1.Dữ liệu nhiều cần tăng tốc độ xử lý nên code qua nhiều bước loại dần dữ liệu, sort trước xử lý sau code sẽ gọn hơn
Thử với code củ chuối này xem saoEm có một file có tô màu liên tiếp theo hàng ngang. mong muốn của e là viết code lấy 01 con số nằm ở ô cuối cùng của hàng đã được tô màu và tách sang cột riêng biệt. Em đã ghi nội dung cần trong file. Kính mong các Anh giúp đỡ.
Option Explicit
Sub Mau()
Dim i&, j&, t&, Lr, Col&
Dim Rng As Range, Sh As Worksheet
Dim KQ()
Set Sh = Sheet1
Set Rng = Sh.Range("A2").CurrentRegion
Lr = Rng.Rows.Count: Col = Rng.Columns.Count
ReDim KQ(1 To Lr, 1 To Col)
For i = 1 To Lr
t = 0: k = 0
For j = 1 To Col
If Rng(i, j) <> Empty Then
k = k + 1: If Rng(i, j).Interior.Color = vbYellow Then t = t + 1
Else: Exit For
End If
Next j
If t = 0 Then KQ(i, Col) = Rng(i, k) Else KQ(i, Col - t) = Rng(i, k)
Next i
Sh.[H2].Resize(i - 1, Col) = KQ
End Sub
Cám ơn Các anh! em đã thử chạy code tuy nhiên code báo lỗi ak. Mong các Anh/Chị bớt chút thời gian giúp sửa lại giùm em. nội dung mong muốn e ghi ở trong file ak. Một lần nữa xin chân thành cám ơn các Anh/Chị và xin chúc Anh/ Chị có ngày nghỉ cuối tuần vui vẻ hạnh phúc bên gia đình!Thử với code củ chuối này xem sao
Mã:Option Explicit Sub Mau() Dim i&, j&, t&, Lr, Col& Dim Rng As Range, Sh As Worksheet Dim KQ() Set Sh = Sheet1 Set Rng = Sh.Range("A2").CurrentRegion Lr = Rng.Rows.Count: Col = Rng.Columns.Count ReDim KQ(1 To Lr, 1 To Col) For i = 1 To Lr t = 0: k = 0 For j = 1 To Col If Rng(i, j) <> Empty Then k = k + 1: If Rng(i, j).Interior.Color = vbYellow Then t = t + 1 Else: Exit For End If Next j If t = 0 Then KQ(i, Col) = Rng(i, k) Else KQ(i, Col - t) = Rng(i, k) Next i Sh.[H2].Resize(i - 1, Col) = KQ End Sub
Bị lỗi ở k=0 đúng không? Do thiếu khai báo biến kCám ơn Các anh! em đã thử chạy code tuy nhiên code báo lỗi ak. Mong các Anh/Chị bớt chút thời gian giúp sửa lại giùm em. nội dung mong muốn e ghi ở trong file ak. Một lần nữa xin chân thành cám ơn các Anh/Chị và xin chúc Anh/ Chị có ngày nghỉ cuối tuần vui vẻ hạnh phúc bên gia đình!
Trân trọng/
thực sự không biết nói gì hơn ngoài lời cảm ơn chân thành tới Anh. Một lần nữa cảm ơn AnhBị lỗi ở k=0 đúng không? Do thiếu khai báo biến k
Bạn thêm k&, vào Dòng Dim.... như vầy Dim i&, j&, t&, k&, Lr, Col&
Và chạy thử.
Bạn có thể thêm nhiều dòng, cột nữa cho Dữ liệu (và nhớ là có khoảng trống là 1 cột, 1 dòng với vùng dữ liệu khác) , sau đó nhập vào Ô L1 địa chỉ ô muốn kết quả trả về. và nhấn nút==> xem và kiểm tra kết quả
Xem file đính kèm
Em đã sửa code và chạy, tuy nhiên có thêm vấn đề là tại ô A8 không có bôi màu code vẫn sắp xếp và không đếm được số lần mà ô có màu có dữ liệu. Em muốn Anh giúp em code thêm với nội dung e đã ghi trong file gửi đó ak!thực sự không biết nói gì hơn ngoài lời cảm ơn chân thành tới Anh. Một lần nữa cảm ơn Anh
Sao mình thấy số 32 nằm ở chô khoanh đỏ này có đúng không nhỉ?Em đã sửa code và chạy, tuy nhiên có thêm vấn đề là tại ô A8 không có bôi màu code vẫn sắp xếp và không đếm được số lần mà ô có màu có dữ liệu. Em muốn Anh giúp em code thêm với nội dung e đã ghi trong file gửi đó ak!
Trân trọng/
Tôi không được tinh anh như người khác. Bạn trình bày rõ hơn được không?Em đã sửa code và chạy, tuy nhiên có thêm vấn đề là tại ô A8 không có bôi màu code vẫn sắp xếp và không đếm được số lần mà ô có màu có dữ liệu. Em muốn Anh giúp em code thêm với nội dung e đã ghi trong file gửi đó ak!
Trân trọng/
Anh lại khiêm tốn quá rồiTôi không được tinh anh như người khác
Sao mình thấy số 32 nằm ở chô khoanh đỏ này có đúng không nhỉ?
Có khi nào có trường hợp ở giữa không bôi màu không nhỉ
View attachment 272760
Nhìn chung là mặc dù chưa hiểu hết ý bạn ấy ở đề bài ở #23 tuy nhiên cứ code theo ý hiểu của mình.Sao mình thấy số 32 nằm ở chô khoanh đỏ này có đúng không nhỉ?
Có khi nào có trường hợp ở giữa không bôi màu không nhỉ
View attachment 272760
Tôi nói thật lòng mình mà. nhiều bài tôi cứ ngỡ là mình hiểu ý chủ thớt và nghĩ là làm được. đến khi làm xong định đăng lên trả bài, thì thấy đã có người trả lời, đọc bài và chạy code của họ mới biết mình đã đi sai hướng ==>thuật toán sai==> kết chưa được toàn vẹn.Anh lại khiêm tốn quá rồi
Hihi. Em biết gì đâu anhBạn giúp bạn ấy đi, có gí đăng lên cho mình học hỏi thêm
Sub ABC()
Dim i&, j&, iR&, iC&, K&
With Sheet1
.Range("I2:N10000").ClearContents
iR = .Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To iR
K = 0
iC = .Cells(i, Columns.Count).End(1).Column
For j = 1 To iC
If .Cells(i, j) <> Empty Then
If .Cells(i, j).Interior.Color <> vbYellow Then
.Cells(i, 14 - K).Value = .Cells(i, iC).Value
Else
K = K + 1
End If
End If
Next
Next
End With
End Sub
Dạ thành thật mong hai Anh bỏ qua cho. Do cách hành văn lủng củng nên khó diễn đạt làm phiền đến các Anh nhiều lần. Mong hai Anh giúp thêm lần này ak! Nội dung cụ thể em đã ghi trong file đính kèm ak!Nhìn chung là mặc dù chưa hiểu hết ý bạn ấy ở đề bài ở #23 tuy nhiên cứ code theo ý hiểu của mình.
Bạn giúp bạn ấy đi, có gí đăng lên cho mình học hỏi thêm
Bài đã được tự động gộp:
Tôi nói thật lòng mình mà. nhiều bài tôi cứ ngỡ là mình hiểu ý chủ thớt và nghĩ là làm được. đến khi làm xong định đăng lên trả bài, thì thấy đã có người trả lời, đọc bài và chạy code của họ mới biết mình đã đi sai hướng ==>thuật toán sai==> kết chưa được toàn vẹn.
Giải thích lòng vòng thêm rối, dựa vào dữ liệu và kết quả trong fileDạ thành thật mong hai Anh bỏ qua cho. Do cách hành văn lủng củng nên khó diễn đạt làm phiền đến các Anh nhiều lần. Mong hai Anh giúp thêm lần này ak! Nội dung cụ thể em đã ghi trong file đính kèm ak!
Rất mong sự giúp đỡ của các Anh!
Sub ABC()
Dim a$(), b$(1 To 1, 1 To 6), rng As Range, sRow&, i&, j&, C&
Set rng = Sheet1.Range("A4:I" & Sheet1.Range("A" & Rows.Count).End(xlUp).Row)
sRow = rng.Rows.Count
ReDim a(1 To sRow, 1 To 6)
For i = 1 To sRow
C = 6
For j = 1 To 8
If rng(i, j).Interior.Color = vbYellow Then C = C - 1
If rng(i, j + 1) = Empty Then
a(i, C) = rng(i, j)
If InStr(1, b(1, C), a(i, C)) = 0 Then
If Len(b(1, C)) Then b(1, C) = b(1, C) & "," & a(i, C) Else b(1, C) = a(i, C)
End If
Exit For
End If
Next j
Next i
Range("I2:T10000").Clear
Sheet1.Range("I4").Resize(sRow, 6) = a
Sheet1.Range("P2").Resize(, 5) = b
End Sub
Kính nể, code vùa ngắn mà kết quả như ý.Giải thích lòng vòng thêm rối, dựa vào dữ liệu và kết quả trong file
Dữ liệu khác có thể tèoMã:Sub ABC() Dim a$(), b$(1 To 1, 1 To 6), rng As Range, sRow&, i&, j&, C& Set rng = Sheet1.Range("A4:I" & Sheet1.Range("A" & Rows.Count).End(xlUp).Row) sRow = rng.Rows.Count ReDim a(1 To sRow, 1 To 6) For i = 1 To sRow C = 6 For j = 1 To 8 If rng(i, j).Interior.Color = vbYellow Then C = C - 1 If rng(i, j + 1) = Empty Then a(i, C) = rng(i, j) If InStr(1, b(1, C), a(i, C)) = 0 Then If Len(b(1, C)) Then b(1, C) = b(1, C) & "," & a(i, C) Else b(1, C) = a(i, C) End If Exit For End If Next j Next i Range("I2:T10000").Clear Sheet1.Range("I4").Resize(sRow, 6) = a Sheet1.Range("P2").Resize(, 5) = b End Sub
Bạn thử xem code củ chuối này nhé.Dạ thành thật mong hai Anh bỏ qua cho. Do cách hành văn lủng củng nên khó diễn đạt làm phiền đến các Anh nhiều lần. Mong hai Anh giúp thêm lần này ak! Nội dung cụ thể em đã ghi trong file đính kèm ak!
Rất mong sự giúp đỡ của các Anh!
Option Explicit
Sub Mau()
Dim i&, j&, t&, k&, tt&, Lr, Col&
Dim rng As Range, Sh As Worksheet, Ketqua As Range
Dim KQ(), SoLan(), NOI As String
Dim Dic As Object, Key
Set Sh = Sheet1
'Set Ketqua = Sh.[U1]
Set rng = Sh.Range("A4").CurrentRegion
Lr = rng.Rows.Count: Col = rng.Columns.Count
ReDim KQ(1 To Lr, 1 To Col)
For i = 1 To Lr
t = 0: k = 0: NOI = Empty
For j = 1 To Col
If rng(i, j) <> Empty Then
k = k + 1:
If rng(i, j).Interior.Color = vbYellow Then t = t + 1
If rng(i, j).Interior.Color <> vbYellow Then
If NOI = Empty Then NOI = rng(i, j) Else NOI = NOI & ";" & rng(i, j)
End If
Else: Exit For
End If
Next j
If t = 0 Then KQ(i, Col) = NOI Else KQ(i, Col - t) = rng(i, k)
Next i
ReDim SoLan(1 To 1, 1 To UBound(KQ))
For i = 1 To UBound(KQ, 2) - 1
Set Dic = CreateObject("Scripting.Dictionary")
For j = 1 To UBound(KQ, 1)
If KQ(j, i) <> Empty Then
Key = KQ(j, i)
If Not Dic.Exists(Key) Then
tt = tt + 1: Dic.Add (Key), tt
If SoLan(1, i) = Empty Then SoLan(1, i) = Key Else SoLan(1, i) = SoLan(1, i) & ";" & Key
End If
End If
Next j
Set Dic = Nothing
Next i
Sh.[I2].Resize(1, i) = SoLan
Sh.[I4].Resize(Lr, Col) = KQ
End Sub
Thật là kết quả thật ngoài mong đợi, một lần nữa xin được Cám ơn Anh Hiếu CD và Anh HuongTCKT cũng như All mọi người đã giúp đỡ. Code anh Hiếu em cũng hay vọc trên diễn đàn. Bác hay có sở thích đặt tên sub là ABC. Chúc các Anh một ngày nghỉ cuối tuần vui vẻ bên người thân và gia đình!Giải thích lòng vòng thêm rối, dựa vào dữ liệu và kết quả trong file
Dữ liệu khác có thể tèoMã:Sub ABC() Dim a$(), b$(1 To 1, 1 To 6), rng As Range, sRow&, i&, j&, C& Set rng = Sheet1.Range("A4:I" & Sheet1.Range("A" & Rows.Count).End(xlUp).Row) sRow = rng.Rows.Count ReDim a(1 To sRow, 1 To 6) For i = 1 To sRow C = 6 For j = 1 To 8 If rng(i, j).Interior.Color = vbYellow Then C = C - 1 If rng(i, j + 1) = Empty Then a(i, C) = rng(i, j) If InStr(1, b(1, C), a(i, C)) = 0 Then If Len(b(1, C)) Then b(1, C) = b(1, C) & "," & a(i, C) Else b(1, C) = a(i, C) End If Exit For End If Next j Next i Range("I2:T10000").Clear Sheet1.Range("I4").Resize(sRow, 6) = a Sheet1.Range("P2").Resize(, 5) = b End Sub
code này em sử dụng thấy nó bị sai anh ak? nhảy với cộng số lần saiKính nể, code vùa ngắn mà kết quả như ý.
Tôi cũng đã làm lại cho bạn ấy cũng ra kết quả nhung code hơi dài.
Bạn thử xem code củ chuối này nhé.
Khuyên bạn nên sử dụng code của Anh @HieuCDMã:Option Explicit Sub Mau() Dim i&, j&, t&, k&, tt&, Lr, Col& Dim rng As Range, Sh As Worksheet, Ketqua As Range Dim KQ(), SoLan(), NOI As String Dim Dic As Object, Key Set Sh = Sheet1 'Set Ketqua = Sh.[U1] Set rng = Sh.Range("A4").CurrentRegion Lr = rng.Rows.Count: Col = rng.Columns.Count ReDim KQ(1 To Lr, 1 To Col) For i = 1 To Lr t = 0: k = 0: NOI = Empty For j = 1 To Col If rng(i, j) <> Empty Then k = k + 1: If rng(i, j).Interior.Color = vbYellow Then t = t + 1 If rng(i, j).Interior.Color <> vbYellow Then If NOI = Empty Then NOI = rng(i, j) Else NOI = NOI & ";" & rng(i, j) End If Else: Exit For End If Next j If t = 0 Then KQ(i, Col) = NOI Else KQ(i, Col - t) = rng(i, k) Next i ReDim SoLan(1 To 1, 1 To UBound(KQ)) For i = 1 To UBound(KQ, 2) - 1 Set Dic = CreateObject("Scripting.Dictionary") For j = 1 To UBound(KQ, 1) If KQ(j, i) <> Empty Then Key = KQ(j, i) If Not Dic.Exists(Key) Then tt = tt + 1: Dic.Add (Key), tt If SoLan(1, i) = Empty Then SoLan(1, i) = Key Else SoLan(1, i) = SoLan(1, i) & ";" & Key End If End If Next j Set Dic = Nothing Next i Sh.[I2].Resize(1, i) = SoLan Sh.[I4].Resize(Lr, Col) = KQ End Sub
Dạ em xin gửi lại file anh check ak! em comment ở trong file đó ak!Mình vẫn khuyên bạn sử dụng code của Anh @HieuCD. Tuy nhiên nếu có thể bạn gửi cho mình cái ảnh chay code ra kết quả sai ở dòng nào được không?
Đó là nó xếp không đúng với cột tiêu đề thôi. (do số cột lớn nhất là 8 mà số ô có màu trong các dòng lớn nhất là 5. Do vậy Cột lớn nhất - (số ô có màu liên tiếp là 5 +1 Ô không có màu cuối cùng=8) =2 .do vậy khi dán kết quả xuống sheet nó bị chệch 2 cột.Dạ em xin gửi lại file anh check ak! em comment ở trong file đó ak!
Trân trọng!