nguyen6571gpex
Thành viên thường trực




- Tham gia
- 22/4/11
- Bài viết
- 279
- Được thích
- 80
- Nghề nghiệp
- Dạy học
Dữ liệu của bạn khá khoa học, nên việc dùng hàm là ổn rồi! Bạn xem file này nhé!!. Chọn tên lớp theo list trong sheet Tong hop.Chào ACE!
Tôi có một file trong đó có Sheet chứa dữ liệu muốn dò tìm dữ liẹu đó sang Sheet mới có cấu trúc khác. Vì không biết VBA nên dùng HLOOKUP từng cell sẽ rất lâu. Mong ACE giúp đỡ! Cảm ơn
Chào ACE!
Tôi có một file trong đó có Sheet chứa dữ liệu muốn dò tìm dữ liẹu đó sang Sheet mới có cấu trúc khác. Vì không biết VBA nên dùng HLOOKUP từng cell sẽ rất lâu. Mong ACE giúp đỡ! Cảm ơn
Muốn VBA thì có VBA đây. Không được xóa cột nhá
Đó là các biến do mình tự tạo ra, muốn tạo gì cũng được, không bắt buộc.Quá lợi hại! Nhưng bạn giải thích dùm mình đoạn này được không: Dim Lop(), i, j, C, R, RR. các chữ này có ý nghĩa gì và cho i = 1 to 5 để làm gì? mình chưa hiểu kịp mong bạn giải thích giúp
Theo a Hải thì code ngắn đi trông thấy, tốc độ cũng rầm rầm luôn..Đó là các biến do mình tự tạo ra, muốn tạo gì cũng được, không bắt buộc.
Đúng ra thì phải khai báo đàng hoàng là i as byte, j as long.... gì gì đó, nhưng mình lười lắm
Khi nào bạn hiểu hết mấy cái biến đó thì cũng lợi ít mà hại nhiều vậy đó
Code sửa lại thế này, thì bạn sẽ có thể định dạng mẫu tại H1:M12Chào cả nhà, Chào bạn quanghai1969
Bạn giúp mình file TKB có VBA rất tuyệt vời rồi (Bài #3), nay quay lại nhờ bạn hoặc các bạn trên diễn đàn chút nữa:
Khi mình chạy Buttom để tách TKB ra nhưng định dạng boder của TKB chưa được thẩm mĩ. Mình đã vào vùng H1:M12 để định dạng bản mẫu nhưng không được mà cứ đi sửa thủ công từng lớp thấy lâu. Mong các bạn sửa dùm code để được cả phần định dạng boder. Cảm ơn!
Sub TachTKB()
Application.ScreenUpdating = False
Dim Lop(), i, j, C, R, RR
With Sheet1
Lop = .Range(.[C3], .[V3]).Value
For j = 1 To UBound(Lop, 2)
Sheet2.[J3] = Lop(1, j)
C = 9: R = 5
For i = 1 To 5
.Cells(R, j + 2).Resize(8).Copy
Sheet2.Cells(5, C).PasteSpecial 3
R = R + 8: C = C + 1
Next
Sheet2.[H1:M12].Copy Sheet2.Cells(RR + 1, 1)
RR = RR + 14
Next
End With
Application.ScreenUpdating = True
End Sub
Vì "mù" VBA nên không xử lí được mong các bạn giúp tôi với. Trân trọng cảm ơn!
Cảm ơn bạn giangleloi đã quan tâm. Sheet gốc (sheet so7 luôn không thay đổi số cột, số dòng) GV tiểu học có thể dạy nhiều môn và có thể thay đổi môn mỗi khi xếp lại. Mình cần lọc theo tên GV (Toàn, Anh, Cương,...,A,B,C trong vùng W3 đến AK3 của sheet so7) chuyển về sheet Tung_GV chuyen mỗi người một TKB xem ở từng buổi, từng tiết học dạy tại lớp nào. Cái căn cứ để tìm là tên họ được kèm theo sau dấu gạch ngang của môn dạy (còn môn dạy có thể thay đổi hoặc một GV dạy nhiều môn. VD Toàn dạy: M.Thuật1-Toàn, M.Thuật 3-Toàn, T.Công3-Toàn, M.Thuật4-Toàn). Chỉ cần lọc những GV có tên trong vùng W3 đến AK3 thôi. Lưu ý các tên này có thể thay đổi. Mong bạn giúp nhé. Cảm ơn nhiều!
Tên GV ở bảng xếp & ở vùng [AN3:BB4] phải hoàn toàn giống nhau, hông thôi đừng nói Ba Tê chứ Bốn, Năm Tê tìm cũng hông ra đâu ( trong bài là GV Trang dạy nhạc)Rất tuyệt! Cảm ơn bạn Ba Tê rất rất rất nhiều nhé!
Nếu bạn thêm giúp vào nut Button cái lệnh xóa (Như ở sheet Tung_lop) thì càng tuyệt vời hơn.
Một lần nữa trân trọng cảm ơn Ba Tê, cảm ơn tất cả các bạn!
Theo tôi hiểu tên trong J1:J15 (sheet Tung_GVchuyen) mới là cái gốc để dò tìm thì nhất thiết phải thống nhất với tên trong bảng xếp có đúng không bạn?Tên GV ở bảng xếp & ở vùng [AN3:BB4] phải hoàn toàn giống nhau, hông thôi đừng nói Ba Tê chứ Bốn, Năm Tê tìm cũng hông ra đâu ( trong bài là GV Trang dạy nhạc)
Híc
Chính xác, lấy ở đâu cũng được, nhưng phải giống nhauTheo tôi hiểu tên trong J1:J15 (sheet Tung_GVchuyen) mới là cái gốc để dò tìm thì nhất thiết phải thống nhất với tên trong bảng xếp có đúng không bạn?
Theo tôi hiểu tên trong J1:J15 (sheet Tung_GVchuyen) mới là cái gốc để dò tìm thì nhất thiết phải thống nhất với tên trong bảng xếp có đúng không bạn?
Chào các ACE diễn đàn!- Đúng là chỉ tìm những tên sau dấu gạch (-) mà có y chang trong cột J (Kể cả chữ Hoa, Thường), không có tía tui "mò" cũng hổng "ga".
- Thêm cái Xóa để làm gì nhỉ? Mỗi lần bấm nút đã xóa cũ, làm mới rồi mà.
Mình không biết VBA nên không thể sửa được (mặc dù đã cố gắng sửa những vùng có thay đổi nhưng mấy cái biến thì chịu) mong các ACE giúp sửa hộ. Trân trọng cảm ơn!Chào các ACE diễn đàn!
COVID-19 hoành hành thành ra lại nhờ các ACE chút: Do phát sinh thời gian học vào ngày thứ bảy nên Code chạy không đúng nữa mong các bạn giúp đỡ. Trân trọng cám ơn! (Những vấn đề cần nhờ giúp mình đã ghi cụ thể trong từng Sheet: Tung_lop; Tung_GV chuyen)
Ý em ACE là Anh, Chị, Em trong diễn đàn. Mong các bạn giúp đỡ. Trân trọng!Các "ACE" là ai vậy?
Trân trọng cảm ơn thầy! Chúc thầy luôn mạnh khỏe!Hình như code trong bài này có "dính liếu" tới tôi.
Chào bạn, chào tất cả các bạn!Hình như code trong bài này có "dính liếu" tới tôi.
Mình có sửa lại code vị trí bôi đỏ, do không nắm tinh thần từ bài viết ngày xưa, nên sửa tạm, không chắc về kết quả, bạn chạy code, kiểm tra giúp nhé.Chào bạn, chào tất cả các bạn!
Nhờ các bạn giúp đỡ, mình sử dụng file này mấy năm rất hiệu quả. Hiện tại do mình xếp TKB bằng phần mềm nên dữ liệu gốc (sheet FET) có thay đổi một chút, từ đó có code chạy ra kết quả chưa thật chuẩn. Nhờ các bạn giúp:
1. Sửa code chạy kết quả ra sheet "Tung_GV chuyen"
2. Viết giúp code lấy kết quả từ sheet gốc "FET" vào sheet "NopPGD" như dữ liệu mẫu mình đã làm.
Chi teeits mình đã ghi trong file đính kèm. Trân trọng!
Option Explicit
Sub TachTKB()
Application.ScreenUpdating = False
Dim Lop(), i As Long, j As Long, C As Long, R As Long, RR As Long
With Sheets("FET")
Lop = .Range(.[C3], .[V3]).Value
For j = 1 To UBound(Lop, 2)
Sheet2.[K3] = Lop(1, j)
C = 10: R = 5
For i = 1 To 6
.Cells(R, j + 2).Resize(8).Copy
Sheet2.Cells(5, C).PasteSpecial 3
R = R + 8: C = C + 1
Next
Sheet2.[I1:O12].Copy Sheet2.Cells(RR + 1, 1)
RR = RR + 14
Next
End With
Application.ScreenUpdating = True
End Sub
Public Sub GPE()
Dim TenGV As String, sArr(), dArr(), tArr(), rng As Range, IRws As Long
Dim i As Long, j As Long, N As Long, iCll As Long, Col As Long, Rws As Long
Application.ScreenUpdating = False
Rws = 1
With Sheets("FET")
sArr = .Range("C3:V52").Value
End With
With Sheets("Tung_GV chuyen")
Set rng = .Range("K1:Q12")
tArr = .Range(.[J1], .[J1000].End(xlUp).Offset(1)).Value
For N = 1 To UBound(tArr, 1)
ReDim dArr(1 To 8, 1 To 6)
TenGV = tArr(N, 1)
Col = 0
For i = 3 To 43 Step 8
Col = Col + 1
For IRws = 0 To 7
For j = 1 To UBound(sArr, 2)
If sArr(i + IRws, j) Like "*-" & TenGV Then
dArr(IRws + 1, Col) = sArr(1, j) & "-" & Left(sArr(i + IRws, j), InStr(sArr(i + IRws, j), "-") - 1)
End If
Next j
Next IRws
Next i
.[M3] = TenGV
.[L5].Resize(8, 6) = dArr
rng.Copy .Range("A" & Rws)
Rws = Rws + 14
Next N
End With
End Sub
Cảm ơn bạn đã quan tâm, giúp đỡ. Vấn đề 1 đã được giải quyết, nhờ các bạn giúp tiếp vấn đề 2 (viết code cho sheet "NopPGD"). Trân trọng!Mình có sửa lại code vị trí bôi đỏ, do không nắm tinh thần từ bài viết ngày xưa, nên sửa tạm, không chắc về kết quả, bạn chạy code, kiểm tra giúp nhé.
Rich (BB code):Option Explicit Sub TachTKB() Application.ScreenUpdating = False Dim Lop(), i As Long, j As Long, C As Long, R As Long, RR As Long With Sheets("FET") Lop = .Range(.[C3], .[V3]).Value For j = 1 To UBound(Lop, 2) Sheet2.[K3] = Lop(1, j) C = 10: R = 5 For i = 1 To 6 .Cells(R, j + 2).Resize(8).Copy Sheet2.Cells(5, C).PasteSpecial 3 R = R + 8: C = C + 1 Next Sheet2.[I1:O12].Copy Sheet2.Cells(RR + 1, 1) RR = RR + 14 Next End With Application.ScreenUpdating = True End Sub Public Sub GPE() Dim TenGV As String, sArr(), dArr(), tArr(), rng As Range, IRws As Long Dim i As Long, j As Long, N As Long, iCll As Long, Col As Long, Rws As Long Application.ScreenUpdating = False Rws = 1 With Sheets("FET") sArr = .Range("C3:V52").Value End With With Sheets("Tung_GV chuyen") Set rng = .Range("K1:Q12") tArr = .Range(.[J1], .[J1000].End(xlUp).Offset(1)).Value For N = 1 To UBound(tArr, 1) ReDim dArr(1 To 8, 1 To 6) TenGV = tArr(N, 1) Col = 0 For i = 3 To 43 Step 8 Col = Col + 1 For IRws = 0 To 7 For j = 1 To UBound(sArr, 2) If sArr(i + IRws, j) Like "*-" & TenGV Then dArr(IRws + 1, Col) = sArr(1, j) & "-" & Left(sArr(i + IRws, j), InStr(sArr(i + IRws, j), "-") - 1) End If Next j Next IRws Next i .[M3] = TenGV .[L5].Resize(8, 6) = dArr rng.Copy .Range("A" & Rws) Rws = Rws + 14 Next N End With End Sub
Bạn chạy Sub GPE_NopPGD()Cảm ơn bạn đã quan tâm, giúp đỡ. Vấn đề 1 đã được giải quyết, nhờ các bạn giúp tiếp vấn đề 2 (viết code cho sheet "NopPGD"). Trân trọng!
Public Sub GPE_NopPGD()
Dim sArr()
Dim i As Long, j As Long, k As Long
Application.ScreenUpdating = False
With Sheets("FET")
sArr = .Range("C3:V52").Value
End With
With Sheets("NopPGD")
For i = 1 To UBound(sArr, 2)
For j = i * 2 To (UBound(sArr, 2) + 5) * 2
If sArr(1, i) = .Cells(3, j) Then
'Debug.Print .Cells(3, j)
For k = 3 To UBound(sArr)
.Cells(k + 2, j).Resize(1, 2) = Split(sArr(k, i), "-")
Next k
End If
Next j
Next i
End With
End Sub
Cảm ơn bạn rất nhiều, chúc bạn sức khỏe, hạnh phúc, thành công!Bạn chạy Sub GPE_NopPGD()
PHP:Public Sub GPE_NopPGD() Dim sArr() Dim i As Long, j As Long, k As Long Application.ScreenUpdating = False With Sheets("FET") sArr = .Range("C3:V52").Value End With With Sheets("NopPGD") For i = 1 To UBound(sArr, 2) For j = i * 2 To (UBound(sArr, 2) + 5) * 2 If sArr(1, i) = .Cells(3, j) Then 'Debug.Print .Cells(3, j) For k = 3 To UBound(sArr) .Cells(k + 2, j).Resize(1, 2) = Split(sArr(k, i), "-") Next k End If Next j Next i End With End Sub
Bạn bổ sung thêm giúp vào code: Xóa dữ liệu cũ trong vùng được điền (ở sheet NopPGD nếu có) trước khi thực thi lệnh. Cảm ơn bạn!Bạn chạy Sub GPE_NopPGD()
PHP:Public Sub GPE_NopPGD() Dim sArr() Dim i As Long, j As Long, k As Long Application.ScreenUpdating = False With Sheets("FET") sArr = .Range("C3:V52").Value End With With Sheets("NopPGD") For i = 1 To UBound(sArr, 2) For j = i * 2 To (UBound(sArr, 2) + 5) * 2 If sArr(1, i) = .Cells(3, j) Then 'Debug.Print .Cells(3, j) For k = 3 To UBound(sArr) .Cells(k + 2, j).Resize(1, 2) = Split(sArr(k, i), "-") Next k End If Next j Next i End With End Sub
Mình bổ sung đoạn xóa dữ liệu cũ.Bạn bổ sung thêm giúp vào code: Xóa dữ liệu cũ trong vùng được điền (ở sheet NopPGD nếu có) trước khi thực thi lệnh. Cảm ơn bạn!
Public Sub GPE_NopPGD()
Dim sArr()
Dim i As Long, j As Long, k As Long, l As Long
Application.ScreenUpdating = False
With Sheets("FET")
sArr = .Range("C3:V52").Value
End With
With Sheets("NopPGD")
For l = 3 To 50 Step 10
.Cells(5, l).Resize(48, 8).ClearContents
Next l
For i = 1 To UBound(sArr, 2)
For j = i * 2 To (UBound(sArr, 2) + 5) * 2
If sArr(1, i) = .Cells(3, j) Then
'Debug.Print .Cells(3, j)
For k = 3 To UBound(sArr)
.Cells(k + 2, j).Resize(1, 2) = Split(sArr(k, i), "-")
Next k
End If
Next j
Next i
End With
End Sub
Cảm ơn bạn nhiều! Xin lỗi vì sau khi nhờ, sáng nay mình có chút việc nên giờ mới mở diễn đàn ra xem!Mình bổ sung đoạn xóa dữ liệu cũ.
Code hơi chuối tý, hi vọng chạy đúng.
PHP:Public Sub GPE_NopPGD() Dim sArr() Dim i As Long, j As Long, k As Long, l As Long Application.ScreenUpdating = False With Sheets("FET") sArr = .Range("C3:V52").Value End With With Sheets("NopPGD") For l = 3 To 50 Step 10 .Cells(5, l).Resize(48, 8).ClearContents Next l For i = 1 To UBound(sArr, 2) For j = i * 2 To (UBound(sArr, 2) + 5) * 2 If sArr(1, i) = .Cells(3, j) Then 'Debug.Print .Cells(3, j) For k = 3 To UBound(sArr) .Cells(k + 2, j).Resize(1, 2) = Split(sArr(k, i), "-") Next k End If Next j Next i End With End Sub
Sub ABC()
Dim a(), b(), i&, d As Object, j&
Set d = CreateObject("scripting.dictionary")
a = Sheets("FET").Range("C3:V52").Value
b = Sheets("NopPGD").Range("A3:AX52").Value
For j = 3 To 50 Step 10
Sheets("NopPGD").Cells(5, j).Resize(48, 8).ClearContents
Next
For j = 1 To UBound(a, 2)
If a(1, j) <> Empty Then
d(a(1, j)) = j
End If
Next
For j = 1 To UBound(b, 2)
If d.exists(b(1, j)) = True Then
For i = 3 To UBound(b)
If UBound(Split(a(i, d.Item(b(1, j))), "-")) > 0 Then
b(i, j) = Split(a(i, d.Item(b(1, j))), "-")(0)
b(i, j + 1) = Split(a(i, d.Item(b(1, j))), "-")(1)
End If
Next
End If
Next
Sheets("NopPGD").Range("A3").Resize(UBound(b), UBound(b, 2)).Value = b
End Sub