Đây là định dạng bình thường hay định dạng có điều kiện vậy bạn? Bạn cần gửi file lên đi.View attachment 265060
em có hình như trên. Em muốn gộp những ô với điều kiện như sau : nếu có một ô xanh và ô xanh tiếp sau mà cách nó ít hơn 3 ô đỏ thì sẽ gộp chúng lại thành union . Xin các anh chị giúp . địa chỉ bắt đầu và kết thúc union ta điền vào hai dòng trên cùng ạ. Em cảm ơn .
vâng ,em gửi file đính kèm ạ.Đây là định dạng bình thường hay định dạng có điều kiện vậy bạn? Bạn cần gửi file lên đi.
Hình như ở cột cuối chưa thỏa điều kiện ít hơn 3 ô mà?!View attachment 265060
Em muốn gộp những ô với điều kiện như sau : nếu có một ô xanh và ô xanh tiếp sau mà cách nó ít hơn 3 ô đỏ thì sẽ gộp chúng lại thành union . Xin các anh chị giúp . địa chỉ bắt đầu và kết thúc union ta điền vào hai dòng trên cùng ạ. Em cảm ơn .
Bạn dùng từ "Gộp", "Union" có nghĩa là Merge cells phải không?vâng ,em gửi file đính kèm ạ.
Dạ ở giữa 2 ô xanh nối tiếp mà có ít hơn 4 ô đỏ là méc đc ạ !!!Hình như ở cột cuối chưa thỏa điều kiện ít hơn 3 ô mà?!
Hôm bữa tui làm bài này tìm địa chỉ gì đó rồi mà nhỉvâng ,em gửi file đính kèm ạ.
Dạ anh. Hôm đó em vẫn lưu bài ạ. Nay em gặp bài toán muốn gộp cả xanh đỏ vào một cụm ạ.Hôm bữa tui làm bài này tìm địa chỉ gì đó rồi mà nhỉ
Code vậy phải không?Dạ anh. Hôm đó em vẫn lưu bài ạ. Nay em gặp bài toán muốn gộp cả xanh đỏ vào một cụm ạ.
Option Explicit
Sub MergeCell()
Dim MyColor As Long, iCol As Long, iRw As Long, Rng As Range, RngTmp As Range
Const NumCol = 4 'Toi da o giua la 3 o do
MyColor = RGB(0, 176, 80)
With Sheets("Sheet1")
Set Rng = .Range("H3:K38")
For iCol = 1 To Rng.Columns.Count
Set RngTmp = Nothing
For iRw = 1 To Rng.Rows.Count
If Rng(iRw, iCol).Interior.Color = MyColor Then
If RngTmp Is Nothing Then
Set RngTmp = Rng(iRw, iCol)
Else
If Rng(iRw, iCol).Row - RngTmp.Row <= NumCol Then
.Range(RngTmp, Rng(iRw, iCol)).Merge
End If
Set RngTmp = Rng(iRw, iCol)
End If
End If
Next
Next
End With
End Sub
em muốn lấy vị trí của "cụm" rồi ghi vị trí lên hai dòng trên chứ ko phải gộp và biến thành cụm xanh hết cả anh ạ.Code vậy phải không?
Mã:Option Explicit Sub MergeCell() Dim MyColor As Long, iCol As Long, iRw As Long, Rng As Range, RngTmp As Range Const NumCol = 4 'Toi da o giua la 3 o do MyColor = RGB(0, 176, 80) With Sheets("Sheet1") Set Rng = .Range("H3:K38") For iCol = 1 To Rng.Columns.Count Set RngTmp = Nothing For iRw = 1 To Rng.Rows.Count If Rng(iRw, iCol).Interior.Color = MyColor Then If RngTmp Is Nothing Then Set RngTmp = Rng(iRw, iCol) Else If Rng(iRw, iCol).Row - RngTmp.Row <= NumCol Then .Range(RngTmp, Rng(iRw, iCol)).Merge End If Set RngTmp = Rng(iRw, iCol) End If End If Next Next End With End Sub
Giả sử nó có nhiều vùng thì ghi cái nàoem muốn lấy vị trí của "cụm" rồi ghi vị trí lên hai dòng trên chứ ko phải gộp và biến thành cụm xanh hết cả anh ạ.
Bạn hỏi mả tiết kiệm lời giải thích, đồng thời cũng không cho biết tại sao có con số ở trên, trong khi bên dưới nó chẳng có chữ số nào? vậy thì gộp cái gì vào các con số ở dòng 1,2 ở trên?em có hình như trên. Em muốn gộp những ô với điều kiện như sau : nếu có một ô xanh và ô xanh tiếp sau mà cách nó ít hơn 3 ô đỏ thì sẽ gộp chúng lại thành union . Xin các anh chị giúp . địa chỉ bắt đầu và kết thúc union ta điền vào hai dòng trên cùng ạ. Em cảm ơn .
Có lẽ đây là đáp án mong đợivâng ,em gửi file đính kèm ạ.
Option Explicit
Sub LTDN()
Dim Nguon As Range
Dim Dau, Cuoi, Gioihan
Dim Kq
Dim rws, cls
Dim i, j, k
Gioihan = 3
With Sheet1
Set Nguon = .Range("H3:K38")
rws = Nguon.Rows.Count
cls = Nguon.Columns.Count
ReDim Kq(1 To 3, 1 To cls)
For j = 1 To cls
k = 0
For i = 1 To rws
If Nguon(i, j).Interior.Color = 255 Then
If k = 0 Then Dau = Nguon(i, j).Row
k = k + 1
Else
If k > Gioihan Then
If k > Kq(3, j) Then
Kq(3, j) = k
Kq(1, j) = Dau
Kq(2, j) = Nguon(i, j).Row - 1
End If
End If
k = 0
End If
Next i
Next j
.Range("H1").Resize(2, cls) = Kq
End With
End Sub
Cái trường hợp í em sẽ duyệt for từng cụm một anh ạ. Nên em mới đơn giản hoá bài toán. Dữ liệu sẽ hàng ngàn cột và hàng ngàn dòng ạ,em chỉ chưa làm được trong một mảng dữ liệu tối giản nên phải hỏi ạ. Em cảm ơn anh và anh em 4room !Giả sử nó có nhiều vùng thì ghi cái nào
Đề tài rất hay, bạn gửi thử file có vài ngàn dòng cột lên để tăng tốc code nhéCái trường hợp í em sẽ duyệt for từng cụm một anh ạ. Nên em mới đơn giản hoá bài toán. Dữ liệu sẽ hàng ngàn cột và hàng ngàn dòng ạ,em chỉ chưa làm được trong một mảng dữ liệu tối giản nên phải hỏi ạ. Em cảm ơn anh và anh em 4room !
Đến bài #15 rồi mình vẫn chưa rõ ý muốn của bạn là gì.Cái trường hợp í em sẽ duyệt for từng cụm một anh ạ. Nên em mới đơn giản hoá bài toán. Dữ liệu sẽ hàng ngàn cột và hàng ngàn dòng ạ,em chỉ chưa làm được trong một mảng dữ liệu tối giản nên phải hỏi ạ. Em cảm ơn anh và anh em 4room !
Đọc bài 12 tôi đã góp ý nhưng chủ Topic đâu có quan tâm. Ít ra họ cho 1 sheet kết quả để còn nhìn so sanh.Đến bài #15 rồi mình vẫn chưa rõ ý muốn của bạn là gì.
Lần trước lấy địa chỉ dòng của vùng màu đỏ lớn nhất => Cái này ok xong rồi mà đúng không?
Bây giờ có phải là muốn lấy địa chỉ của dòng màu xanh (đầu và cuối) mà ở giữa nó không quá 3 ô đỏ đúng không? => Nếu là đúng thì mình đã hỏi thêm: giả sử trong một cột có nhiều vùng thỏa mãn không quá 3 ô đỏ nhưng nó không liên tiếp => Lúc này ghi địa chỉ của vùng nào lên trên cùng? vì trên đó chỉ có 2 ô
Còn nếu không đúng thì bạn diễn giải cho chi tiết
dạ ý em đúng là sẽ định muốn lấy địa chỉ của dòng màu xanh (đầu và cuối) mà ở giữa nó không quá 3 ô đỏ. Trong file này mỗi cột cũng có duy nhất một cụm như vậy nên sẽ ghi đầu cuối lên hai dòng trên như ghi đầu cuối đoạn đỏ . Còn nếu bài toán dữ liệu lớn , phát sinh thêm nhiều cái đó em sẽ tìm cách duyệt một biến đếm cụm ạ . Vì em mới đang nghĩ cách giải quyết trong một bài toán đơn giản ngắn gọn này nên cũng chưa lường được ,sorry các anh !Đến bài #15 rồi mình vẫn chưa rõ ý muốn của bạn là gì.
Lần trước lấy địa chỉ dòng của vùng màu đỏ lớn nhất => Cái này ok xong rồi mà đúng không?
Bây giờ có phải là muốn lấy địa chỉ của dòng màu xanh (đầu và cuối) mà ở giữa nó không quá 3 ô đỏ đúng không? => Nếu là đúng thì mình đã hỏi thêm: giả sử trong một cột có nhiều vùng thỏa mãn không quá 3 ô đỏ nhưng nó không liên tiếp => Lúc này ghi địa chỉ của vùng nào lên trên cùng? vì trên đó chỉ có 2 ô
Còn nếu không đúng thì bạn diễn giải cho chi tiết