Dùng code copy và dán dữ liệu vào sheets khác, bỏ qua cột, dòng đang ẩn của sheets được dán

Liên hệ QC

myhoanmy

Thành viên mới
Tham gia
2/11/16
Bài viết
14
Được thích
3
Chào các bạn !, tôi đã tham khảo trên diễn đàn, nhưng chưa tìm ra giải pháp, mong mọi người dành thời gian xem qua và hỗ trợ.
các yêu cầu của bài: GLV sẽ cập nhật điểm của lớp mình trong sheets("Data"), sau đó chuyển vào Sheets(Updat_tunguon").
1. Sau khi lọc có điều kiện từ sheet("Updat_tunguon"), copy (có bỏ qua dòng, cột ẩn) qua sheet("Data") - phần này tôi đã làm được.
1. sau khi chỉnh sửa, cập nhật điểm từ các sheet ("Dữ liệu"), tôi muốn đưa các dữ liệu đã sửa vào sheet ("Updat_tunguon"), lấy ID cột điều kiện, dòng nào trong
sheet ("Data") đã được sửa, ghi đè lên ID đó trong sheet (Updat_tunguon ")
Còn lại dữ liệu đưa ra từ sheet ("Updat_tunguon") vào một tập tin khác, tôi cũng đã làm rồi.
Có gửi fil đính kèm.
Xin giúp tôi viết mã này, cảm ơn các bạn đã xem qua!
 

File đính kèm

  • khaitam1A.xlsm
    1.8 MB · Đọc: 19
Bạn ghi mục trùng chỉ số (hai mục đều là 1) và hình như có 1 mục không đánh số. Diễn giải cũng lan man, vậy bạn muốn làm mục nào, nói cho rõ ràng coi!?
 
Upvote 0
Bạn ghi mục trùng chỉ số (hai mục đều là 1) và hình như có 1 mục không đánh số. Diễn giải cũng lan man, vậy bạn muốn làm mục nào, nói cho rõ ràng coi!?
Vâng. Cảm ơn bạn đã góp ý. Tôi đã lọc dữ liệu từ sheets("Updat_tunguon") sang sheets("Data") để gán điểm, sửa dữ liệu trong sheets("Data"),.. ; sau đó, tôi muốn chuyển dữ liệu đã sửa từ sheets("Data") về lại sheets("Updat_tunguon"); sheets("Updat_tunguon") đang ẩn cột, dòng,. tôi không biết phải viết code chuyển dữ liệu đã sửa về lại thế nào. Sở dĩ làm vậy vì tôi muốn, mỗi giáo lý viên chỉ được sửa, xem lớp của mình. sheets("Updat_tunguon") là sheet chung cho các lớp. Cảm ơn bạn !
 
Upvote 0
Vâng. Cảm ơn bạn đã góp ý. Tôi đã lọc dữ liệu từ sheets("Updat_tunguon") sang sheets("Data") để gán điểm, sửa dữ liệu trong sheets("Data"),.. ; sau đó, tôi muốn chuyển dữ liệu đã sửa từ sheets("Data") về lại sheets("Updat_tunguon"); sheets("Updat_tunguon") đang ẩn cột, dòng,. tôi không biết phải viết code chuyển dữ liệu đã sửa về lại thế nào. Sở dĩ làm vậy vì tôi muốn, mỗi giáo lý viên chỉ được sửa, xem lớp của mình. sheets("Updat_tunguon") là sheet chung cho các lớp. Cảm ơn bạn !
Vậy để mai rảnh tôi sẽ xem trường hợp của bạn.
 
Upvote 0
Bạn chạy thủ tục này để cập nhật:
Rich (BB code):
Sub Update_Data()
Dim DataArr
Dim i As Long, j As Long, r As Long

DataArr = Sheets("Data").Range("B6:Z" & Sheets("Data").Range("B" & Rows.Count).End(xlUp).Row).Value    '
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = 1 To UBound(DataArr)
    With Sheets("Updat_tunguon")
        r = .Range("B1:B10000").Find(Trim(DataArr(i, 1)), .Range("B1"), xlFormulas, xlWhole).Row
        For j = 1 To 5
            .Cells(r, j + 1) = DataArr(i, j)
        Next
        For j = 6 To 7
            .Cells(r, j + 26) = DataArr(i, j)
        Next
        For j = 8 To 14
            .Cells(r, j + 33) = DataArr(i, j)
        Next
        .Cells(r, 50) = DataArr(i, 15)
        For j = 16 To 20
            .Cells(r, j + 38) = DataArr(i, j)
        Next
        For j = 21 To 25
            .Cells(r, j + 44) = DataArr(i, j)
        Next
    End With
NextApplication.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub
 
Upvote 0
Bạn chạy thủ tục này để cập nhật:
Rich (BB code):
Sub Update_Data()
Dim DataArr
Dim i As Long, j As Long, r As Long

DataArr = Sheets("Data").Range("B6:Z" & Sheets("Data").Range("B" & Rows.Count).End(xlUp).Row).Value    '
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = 1 To UBound(DataArr)
    With Sheets("Updat_tunguon")
        r = .Range("B1:B10000").Find(Trim(DataArr(i, 1)), .Range("B1"), xlFormulas, xlWhole).Row
        For j = 1 To 5
            .Cells(r, j + 1) = DataArr(i, j)
        Next
        For j = 6 To 7
            .Cells(r, j + 26) = DataArr(i, j)
        Next
        For j = 8 To 14
            .Cells(r, j + 33) = DataArr(i, j)
        Next
        .Cells(r, 50) = DataArr(i, 15)
        For j = 16 To 20
            .Cells(r, j + 38) = DataArr(i, j)
        Next
        For j = 21 To 25
            .Cells(r, j + 44) = DataArr(i, j)
        Next
    End With
NextApplication.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub
Cản ơn bạn nhiều! chạy chuẩn, và nhanh. chổ "Next", cuối code, chắc do lỗi bàn phím nên bạn gõ trùng hàng, mình mò mãi mới thấy để enter nó xuống. hi. Mình chỉ thêm Msgbox để thông báo "đã xong". chúc bạn và các bạn trên diễn đàn có ngày nghỉ vui vẻ!
 
Upvote 0
Cản ơn bạn nhiều! chạy chuẩn, và nhanh. chổ "Next", cuối code, chắc do lỗi bàn phím nên bạn gõ trùng hàng, mình mò mãi mới thấy để enter nó xuống. hi. Mình chỉ thêm Msgbox để thông báo "đã xong". chúc bạn và các bạn trên diễn đàn có ngày nghỉ vui vẻ!
Xin lỗi bạn! Quả thực là dòng lệnh thế này thì quá khó để nhầm rồi chép cho bạn: NextApplication.ScreenUpdating = True, không hiểu vì sao lại thế được.

Nhưng cũng chúc mừng bạn là đã tích lũy thêm được nhiều điều!
 
Upvote 0
Xin lỗi bạn! Quả thực là dòng lệnh thế này thì quá khó để nhầm rồi chép cho bạn: NextApplication.ScreenUpdating = True, không hiểu vì sao lại thế được.

Nhưng cũng chúc mừng bạn là đã tích lũy thêm được nhiều điều!
Vâng! làm phiền bạn thêm..
Có một việc, muốn hỏi bạn để học hỏi thêm, để biết áp dụng cho những file khác.
Đoạn code "For... next" trong bài:
Mình gán "for j = 1 to xx.. " , j là chỉ số cột của sheets("Updat_tunguon") từ 1 đến xx..?
2. gán ".Cells(r, j + 26) = DataArr(i, j)" , chỉ số +26 là tính cách nào ạ? tính trong sheets("Updat_tunguon") hay sheets("Data")? có phải là chỉ số J cộng thêm 26 cột? hay thế nào ạ?
Cảm ơn bạn!
 
Upvote 0
Vâng! làm phiền bạn thêm..
Có một việc, muốn hỏi bạn để học hỏi thêm, để biết áp dụng cho những file khác.
Đoạn code "For... next" trong bài:
Mình gán "for j = 1 to xx.. " , j là chỉ số cột của sheets("Updat_tunguon") từ 1 đến xx..?
2. gán ".Cells(r, j + 26) = DataArr(i, j)" , chỉ số +26 là tính cách nào ạ? tính trong sheets("Updat_tunguon") hay sheets("Data")? có phải là chỉ số J cộng thêm 26 cột? hay thế nào ạ?
Cảm ơn bạn

Cập nhật dữ liệu từ "Data" đến " Updat_tunguon" đơn thuần là việc trỏ ra cột nào của "Data" chép vào cột nào của "Updat_tunguon" mà thôi (tất nhiên là phải kèm theo là dòng nào, tức là tham số i).

Có 24 cột phải cập nhật thì thay vì cứ mỗi cột 1 dòng thế này:
.Cells(r, 32) = DataArr(i, 6) '32 = 6 + 26 'j = 6 'Cột 32 là AF của sheet "Updat_tunguon" do tôi đếm chắc như vậy.
.Cells(r, 33) = DataArr(i, 7) '33 = 7 + 26 'j = 7 'tương tự như trên

Thì tôi viết:
For j = 6 To 7
.Cells(r, j + 26) = DataArr(i, j)
Next
Do 2 cột đó liền nhau

Rõ ràng là cách trước (phải dùng 24 dòng code cho 24 cột) dài dòng hơn cách sau chứ 2 cách đều cùng 1 kết quả.

Các vòng For ... Next khác đều là vậy cả, tôi chỉ tận dụng các cột liền nhau để đặt ra vòng lặp vì lý do như trên.
 
Lần chỉnh sửa cuối:
Upvote 0
Cập nhật dữ liệu từ "Data" đến " Updat_tunguon" đơn thuần là việc trỏ ra cột nào của "Data" chép vào cột nào của "Updat_tunguon" mà thôi (tất nhiên là phải kèm theo là dòng nào, tức là tham số i).

Có 24 cột phải cập nhật thì thay vì cứ mỗi cột 1 dòng thế này:
.Cells(r, 32) = DataArr(i, 6) '32 = 6 + 26 'j = 6 'Cột 32 là AF của sheet "Updat_tunguon" do tôi đếm chắc như vậy.
.Cells(r, 33) = DataArr(i, 7) '33 = 7 + 26 'j = 7 'tương tự như trên

Thì tôi viết:
For j = 6 To 7
.Cells(r, j + 26) = DataArr(i, j)
Next
Do 2 cột đó liền nhau

Rõ ràng là cách trước (phải dùng 24 dòng code cho 24 cột) dài dòng hơn cách sau chứ 2 cách đều cùng 1 kết quả.

Các vòng For ... Next khác đều là vậy cả, tôi chỉ tận dụng các cột liền nhau để đặt ra vòng lặp vì lý do như trên.
Hiểu rồi, bạn thu gọn code cho sáng và nhanh hơn. cảm ơn bạn nhiều!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom