Dữ liệu bạn ghép ô vậy rất khó cài công thức, bạn có thể sử dụng cột phụ để làm.Tôi có File excel (đính kèm). Mục đích tìm những người có đánh dấu (x) ở cột G của sheet Data để điền vào cột E của sheet T1; rất cần nhờ mọi người chỉ giúp dữ liệu nhiều tôi chỉ minh hoạ một cột.
Dữ liệu như Bạn thì tự làm khó mình, từ đó người muốn giúp bạn cũng "oải".Tôi có File excel (đính kèm). Mục đích tìm những người có đánh dấu (x) ở cột G của sheet Data để điền vào cột E của sheet T1; rất cần nhờ mọi người chỉ giúp dữ liệu nhiều tôi chỉ minh hoạ một cột.
Mượn ý tưởng của Anh giaiphap, mình dùng cột phụ, bạn tham khảo nhé.Tôi có File excel (đính kèm). Mục đích tìm những người có đánh dấu (x) ở cột G của sheet Data để điền vào cột E của sheet T1; rất cần nhờ mọi người chỉ giúp dữ liệu nhiều tôi chỉ minh hoạ một cột.
Mình tham gia một cách không cần cột phụ như sau =IFERROR(OFFSET(Data!B8;SMALL(IF(Data!G9:G77="x";ROW(Data!$B$9:$B$77)-8);ROW(1:1))-2;0);"") công thức mảngMượn ý tưởng của Anh giaiphap, mình dùng cột phụ, bạn tham khảo nhé.
Bạn có làm thế nào để không dùng cột phụ mà tích dấu "x" vào hai ô sáng hoặc chiều thì bên Sheet T1 cũng hiện tên nhỉ, mình cảm ơn.Mình tham gia một cách không cần cột phụ như sau =IFERROR(OFFSET(Data!B8;SMALL(IF(Data!G9:G77="x";ROW(Data!$B$9:$B$77)-8);ROW(1:1))-2;0);"") công thức mảng
Góp ý cho bạn:Tôi có File excel (đính kèm). Mục đích tìm những người có đánh dấu (x) ở cột G của sheet Data để điền vào cột E của sheet T1; rất cần nhờ mọi người chỉ giúp dữ liệu nhiều tôi chỉ minh hoạ một cột.
cho thêm cái điều kiện vào cái phần -2 ý, kiểu như này cho tổng quát =IFERROR(OFFSET(Data!$B$8;SMALL(IF(Data!$G$9:$G$77="x";ROW(Data!$B$9:$B$77)-8);ROW(1:1))-ROUND(MOD(SMALL(IF(Data!$G$9:$G$77="x";ROW(Data!$B$9:$B$77)-8);ROW(1:1));3,000001);0)+1;0);"")Bạn có làm thế nào để không dùng cột phụ mà tích dấu "x" vào hai ô sáng hoặc chiều thì bên Sheet T1 cũng hiện tên nhỉ, mình cảm ơn.
Cảm ơn bạn nhé.cho thêm cái điều kiện vào cái phần -2 ý, kiểu như này cho tổng quát =IFERROR(OFFSET(Data!$B$8;SMALL(IF(Data!$G$9:$G$77="x";ROW(Data!$B$9:$B$77)-8);ROW(1:1))-ROUND(MOD(SMALL(IF(Data!$G$9:$G$77="x";ROW(Data!$B$9:$B$77)-8);ROW(1:1));3,000001);0)+1;0);"")
nhưng nếu tích cả 3 ô sáng chiều tối nó sẽ hiện 3 lần. Gộp ô chỉ làm khi in báo cáo cho đẹp chứ trong sửa lý dữ liệu như bài của bạn này oải ghê
Sub tim_dukieu()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim ArrT1()
Dim eR As Long, i As Long, m As Long, Name, DonVI, Mon, Thu
With ThisWorkbook.Sheets("Data")
eR = .Range("G" & Rows.Count).End(xlUp).Row - 2
ReDim ArrT1(1 To eR, 1 To 4)
For i = 9 To eR
If .Range("G" & i) <> "" Then
m = m + 1
If m > 0 Then
If .Range("G" & i).Offset(0, -1).Value Like "S*" Then Mon = .Range("G" & i).Offset(0, -4).Value: _
Thu = .Range("G" & i).Offset(0, -1).Value: Name = .Range("G" & i).Offset(0, -5).Value: DonVI = .Range("G" & i).Offset(0, -3).Value
If .Range("G" & i).Offset(0, -1).Value Like "C*" Then Mon = .Range("G" & i - 1).Offset(0, -4).Value: _
Thu = .Range("G" & i).Offset(0, -1).Value: Name = .Range("G" & i - 1).Offset(0, -5).Value: DonVI = .Range("G" & i - 1).Offset(0, -3).Value
If .Range("G" & i).Offset(0, -1).Value Like "T*" Then Mon = .Range("G" & i - 2).Offset(0, -4).Value: _
Thu = .Range("G" & i).Offset(0, -1).Value: Name = .Range("G" & i - 2).Offset(0, -5).Value: DonVI = .Range("G" & i - 2).Offset(0, -3).Value
ArrT1(m, 1) = Mon: ArrT1(m, 2) = Thu
ArrT1(m, 3) = Name: ArrT1(m, 4) = DonVI
End If
End If
Next
End With
On Error GoTo Thoat
ThisWorkbook.Sheets("T1").Range("C6:F10000") = ""
ThisWorkbook.Sheets("T1").Range("C6").Resize(m, 4) = ArrT1
msg = MsgBox("Finish Data", vbSystemModal, "Thông báo")
If msg Then
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Else
Thoat: MsgBox "Hoc Sinh Quá gioi nên không cân hoc thêm ", vbSystemModal, "Thông báo"
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End If
End Sub
Thiệt là quá tốt.Tham khảo 1 cách khác.
Thiệt là quá tốt.
Người hỏi từ thứ Hai (10:01) đến giờ không quay lại mà có rất nhiều người tham gia giải giúp, mỗi người mỗi kiểu.
Tôi đã có gợi ý tác giả bố trí lại dữ liệu như bài #3 nhưng không có ý kiến gì nên tôi không tham gia trả lời.HIện em đang có 1 chút vấn đề mong anh giúp đỡ em. Như bài #1 e đã hỗ trợ người ra đề viết 1 đoạn code VBA để lọc ra những người có ô khác " trống" . nhưng trong đoạn code phần Resize mảng nếu mảng bằng trống lúc Resize mảng sẽ báo lỗi. Anh có câu lệnh nào khắc phục được không ạ.
Em gửi File bị lỗi để ví dụ. Mong anh giúp đỡ. Em cảm ơn.
Tôi đã có gợi ý tác giả bố trí lại dữ liệu như bài #3 nhưng không có ý kiến gì nên tôi không tham gia trả lời.
Trường hợp của bạn, khi biến m=0 thì dòng lệnh ThisWorkbook.Sheets("T1").Range("C6").Resize(m, 4) = ArrT1 sẽ lỗi.
Có thể bẫy lỗi bằng cách:
If m>0 then ThisWorkbook.Sheets("T1").Range("C6").Resize(m, 4) = ArrT1
Ngộ quá!Em đã thử và code không báo lỗi nữa rồi. tại vì em không muốn dùng On Error Goto để tránh những lỗi mình bị bỏ sót. Em cảm ơn anh rất nhiều.
Em vừa mới đổi tên anh ạ | ||||||||
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2