Sửa giúp code để lọc dữ liệu (1 người xem)

  • Thread starter Thread starter ditimdl
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

ditimdl

Thành viên thường trực
Tham gia
11/10/06
Bài viết
378
Được thích
107
Giới tính
Nam
Nghề nghiệp
Pharmacist
PHP:
Sub AutoFilterAndCopy()
Sheets("Data").[A1:A50].AutoFilter Field:=1, Criteria1:="A"
Sheets("Data").[A1].Select
Range(Selection, Selection.End(xlDown)).Select
''//Kiểm tra xem dữ liệu filter có rỗng hay không:
''//Nếu rỗng thì thoát khỏi thủ tục:
If Selection.Rows.Count >= 65536 Then
Exit Sub
Else
''//Nếu không rỗng mới copy:
Selection.Copy 
Sheets("Report").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End If
''//Phần này không hoạt động được
Sheets("Data").[A1:A50].AutoFilter Field:=1, Criteria1:="D"
Sheets("Data").[A1].Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy 
Sheets("Report2).select
range("A2").select
....
End Sub
</SPAN></SPAN>
Đoạn code trên mình dùng để lọc dữ liệu, anh ca_dafi thêm phần kiểm tra dữ liệu sau khi filter, nếu kết quả filter rỗng thì thoát khỏi thủ tục lọc và copy, ngược lại thì copy sang 1 sheet khác. Code hoạt động tốt nhưng nó lại làm cho các sub lọc tiếp theo không thể chạy được. Nhờ các bác giúp em sửa giúp code để sau khi lọc phần tử A xong thì đoạn code trên ko tiến hành lọc tiếp phần tử D.
(Phần này em post bên phần xử lý dữ liệu nhưng không đúng chủ đề nên ít nhận được sự hổ trợ nên em cắt qua bên này. Mong các bác giúp.)
 
Làm thế nào để gắn nó vào 1 command và khi cần lọc ta mới click command để lọc vậy anh NDU?
Chưa hiểu ý bạn về cái ComboBox này!
Tôi vẩn còn 1 thắc mắc: File của bạn có quá trời sheet luôn, vậy tại sao bạn không làm 3 sheet thôi: 1 sheet nhập, 1 sheet TRÍCH (trong này có ComboBox cho bạn chọn LOẠI) và sheet TỔNG HỢP
Tôi nghĩ chỉ có trường hợp bạn làm 3 sheet thì mới cần đến ComboBox để chọn chứ nhỉ...
 
Upvote 0
Dữ liệu ở sh total được trích ra từ 1file khác dùng để báo cáo, nhưng bên Bảo hiểm y tế họ bắt phải lọc ra từng loại để họ theo dõi từng nguồn quỹ cho họ thì phải.
Công việc này 1 quý mới làm 1 lần. Em muốn file này gắn 2 command: 1 cái dùng để copy dữ liệu từ file khác qua file lọc ở sh total(em đã làm được) Phần còn lại là lọc chia ra từng loại thẻ vào những sh cụ thể em đã tạo sẵn trong file lọc.
Em cần tạo ra 1command lọc, khi em cần lọc thì chọn command đó thì nó lọc còn ko thì ko được lọc.
 
Upvote 0
Dữ liệu ở sh total được trích ra từ 1file khác dùng để báo cáo, nhưng bên Bảo hiểm y tế họ bắt phải lọc ra từng loại để họ theo dõi từng nguồn quỹ cho họ thì phải.
Công việc này 1 quý mới làm 1 lần. Em muốn file này gắn 2 command: 1 cái dùng để copy dữ liệu từ file khác qua file lọc ở sh total(em đã làm được) Phần còn lại là lọc chia ra từng loại thẻ vào những sh cụ thể em đã tạo sẵn trong file lọc.
Em cần tạo ra 1command lọc, khi em cần lọc thì chọn command đó thì nó lọc còn ko thì ko được lọc.
Ah... xin lổi! Tôi đọc nhầm tưởng bạn nói ComboBox!
Nếu muốn thế cũng dể mà! Nhanh nhất là sửa lại code trên 1 tí (cho nó vào Sub và thêm 1 vòng lập For quét qua các sheet ---> Thay vì lúc trước ta chọn sheet thì code chạy)
Như thế này đây:
PHP:
Sub Locdulieu()
  Dim Rng As Range, Sh As Worksheet
  Application.ScreenUpdating = False
  For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "TOTAL" And Sh.Name <> "TONGHOP" Then
       Sh.[A5].CurrentRegion.ClearContents
       With Sheets("TOTAL")
         Set Rng = .[A5].CurrentRegion
         .[Q6:Q20].ClearContents
         Select Case Sh.Name
            Case Is = "JL", "T3", "GL", "IS", "FL", "VC"
               .[Q6] = Sh.Name
            Case Is = "T1TC"
               .[Q6] = "T1": .[Q7] = "TC"
            Case Is = "T2UC"
               .[Q6] = "T2": .[Q7] = "UC"
            Case Is = "HL"
               .[Q6] = "HL": .[Q7] = "IA": .[Q8] = "IB"
            Case Is = "AV"
               .[Q6] = "AV": .[Q7] = "A1": .[Q8] = "AL"
            Case Is = "BV"
               .[Q6] = "BV": .[Q7] = "B1": .[Q8] = "B2"
            Case Is = "EL"
               .[Q6] = "EL": .[Q7] = "ES"
            Case Is = "CV"
               .[Q6] = "CV": .[Q7] = "H3"
            Case Is = "DV"
               .[Q6] = "DV": .[Q7] = "H1"
         End Select
         Rng.AdvancedFilter Action:=1, CriteriaRange:=.[Q5].CurrentRegion
       End With
       Rng.SpecialCells(xlCellTypeVisible).Copy
       Sh.[A5].PasteSpecial xlPasteValues
       Sheets("TOTAL").ShowAllData
     End If
  Next Sh
  Application.CutCopyMode = False
  Application.ScreenUpdating = True
End Sub
Bạn hãy so sánh code này và code của bài trên để xem chúng khác nhau chổ nào nhé (gần như giống đến 99%)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh NDU nhiều nha. Code chạy nhanh ghê, 20.000dòng mà mất chưa tới 10s.
1. Với code trên nếu ta insert thêm 1 số sh vào (những sh này không liên quan gì đến quá trình lọc và copy/paste) thì chạy đoạn code trên nó báo lỗi ở dòng:
PHP:
Sheets("TOTAL").ShowAllData
(Nó tô màu vàng ở dòng này) và nó copy nguyên sh TOTAL qua những sh mới insert đó. Làm sao để nó không đụng chạm gì đến những sh đó?
2. Sau khi lọc copy qua những sh dựa theo điều kiện lọc thì phải làm sao để nó autofil loại bỏ những dòng rỗng để khi in em khỏi phải autofil từng sh. (Cái này em ghi macro lại cũng được nhưng như vậy thì tệ quá nên đành nhờ anh tiếp vậy).
Các sh về cấu trúc thì giống nhau nhưng số dòng thì khác nhau chắc khó cho anh rồi.

Vậy anh NDU viết code dùm em để bỏ qua những sh khác ngoài những sh đã có trong file lọc ở trên?
3. Trước khi chạy sub lọc phiếu nên xóa hết nhữg kết quả đã lọc lần trước để tránh sai sót. (Cái này em cũng ghi macro luôn rồi nhưng dài lê thê lắm, phải chỉ ra từng trường hợp để clearcontents nhìn oải luôn)
 
Upvote 0
Cảm ơn những bài viết bổ ích của bạn ndu!
Tôi đang tập với excel nên rất mong được chỉ giáo.
Tôi có một bảng lí lịch các giáo viên( STT, Họ tên, Ngày sinh, Chuyên môn đào tạo, năm vào ngành, bậc lương, ...) (Tạm gọi là sheet 1).
Bây giờ tôi muốn có một bảng tương tự nhưng chỉ có những giáo viên có chuyên môn đào tạo là Toán (gọi là sheet 2). Tôi phải làm như thế nào?
 
Upvote 0
Cảm ơn anh NDU nhiều nha. Code chạy nhanh ghê, 20.000dòng mà mất chưa tới 10s.
1. Với code trên nếu ta insert thêm 1 số sh vào (những sh này không liên quan gì đến quá trình lọc và copy/paste) thì chạy đoạn code trên nó báo lỗi ở dòng:
PHP:
Sheets("TOTAL").ShowAllData
(Nó tô màu vàng ở dòng này) và nó copy nguyên sh TOTAL qua những sh mới insert đó. Làm sao để nó không đụng chạm gì đến những sh đó?
Vậy anh NDU viết code dùm em để bỏ qua những sh khác ngoài những sh đã có trong file lọc ở trên?
Trong code có đoạn
If Sh.Name <> "TOTAL" And Sh.Name <> "TONGHOP" Then
dùng để bỏ qua sheet TOTAL và TONGHOP... Vậy nếu bạn muốn không đụng đến sheet nào đó thì thêm vào điều kiện này! Ví dụ bỏ qua sheet có tên là DITIMDL thi
If Sh.Name <> "TOTAL" And Sh.Name <> "TONGHOP" And Sh.Name <> "DITIMDL" Then
2. Sau khi lọc copy qua những sh dựa theo điều kiện lọc thì phải làm sao để nó autofil loại bỏ những dòng rỗng để khi in em khỏi phải autofil từng sh. (Cái này em ghi macro lại cũng được nhưng như vậy thì tệ quá nên đành nhờ anh tiếp vậy).
Các sh về cấu trúc thì giống nhau nhưng số dòng thì khác nhau chắc khó cho anh rồi.
Đoạn code này:
Sh.[A5].PasteSpecial xlPasteValues
là vừa copy và paste sang các sheet... Vậy sau đoạn này ta sẽ AutoFilter, chẳng hạn:
Sh.[A5:O10000].AutoFilter Field:=1, Criteria1:="<>"
Với số 10000 là số dòng lớn nhất trong các sheet (bạn sửa lại cho phù hợp)

3. Trước khi chạy sub lọc phiếu nên xóa hết nhữg kết quả đã lọc lần trước để tránh sai sót. (Cái này em cũng ghi macro luôn rồi nhưng dài lê thê lắm, phải chỉ ra từng trường hợp để clearcontents nhìn oải luôn)
Cái này tôi đã có làm rồi mà, nằm ở code này:
Sh.[A5].CurrentRegion.ClearContents
Kết luận: Code gợi ý cho bạn có thể là:
PHP:
Sub Locdulieu()
  Dim Rng As Range, Sh As Worksheet
  Application.ScreenUpdating = False
  For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "TOTAL" And Sh.Name <> "TONGHOP" Then 'chổ này thêm vào tên sheet nào đó bạn muốn bỏ qua nhé
       Sh.[A5].CurrentRegion.ClearContents
       With Sheets("TOTAL")
         Set Rng = .[A5].CurrentRegion
         .[Q6:Q20].ClearContents
         Select Case Sh.Name
            Case Is = "JL", "T3", "GL", "IS", "FL", "VC"
               .[Q6] = Sh.Name
            Case Is = "T1TC"
               .[Q6] = "T1": .[Q7] = "TC"
            Case Is = "T2UC"
               .[Q6] = "T2": .[Q7] = "UC"
            Case Is = "HL"
               .[Q6] = "HL": .[Q7] = "IA": .[Q8] = "IB"
            Case Is = "AV"
               .[Q6] = "AV": .[Q7] = "A1": .[Q8] = "AL"
            Case Is = "BV"
               .[Q6] = "BV": .[Q7] = "B1": .[Q8] = "B2"
            Case Is = "EL"
               .[Q6] = "EL": .[Q7] = "ES"
            Case Is = "CV"
               .[Q6] = "CV": .[Q7] = "H3"
            Case Is = "DV"
               .[Q6] = "DV": .[Q7] = "H1"
         End Select
         Rng.AdvancedFilter Action:=1, CriteriaRange:=.[Q5].CurrentRegion
       End With
       Rng.SpecialCells(xlCellTypeVisible).Copy
       Sh.[A5].PasteSpecial xlPasteValues
       Sh.[A5:O10000].AutoFilter Field:=1, Criteria1:="<>" 'Cái này để AutoFilter NonBlanks
       Sheets("TOTAL").ShowAllData
     End If
  Next Sh
  Application.CutCopyMode = False
  Application.ScreenUpdating = True
End Sub
 
Upvote 0
Cảm ơn những bài viết bổ ích của bạn ndu!
Tôi đang tập với excel nên rất mong được chỉ giáo.
Tôi có một bảng lí lịch các giáo viên( STT, Họ tên, Ngày sinh, Chuyên môn đào tạo, năm vào ngành, bậc lương, ...) (Tạm gọi là sheet 1).
Bây giờ tôi muốn có một bảng tương tự nhưng chỉ có những giáo viên có chuyên môn đào tạo là Toán (gọi là sheet 2). Tôi phải làm như thế nào?
Đơn giãn nhất là bạn AutoFiler theo cột "Chuyên môn đào tạo"... Lọc ra môn toán rồi copy sang sheet 2
Nếu khéo hơn thì có thể ghi lại macro quá trình này... Bấm nút 1 nhát nó làm luôn
Nếu có khó khăn thi đưa file lên, tôi mới làm cụ thể cho bạn được
 
Upvote 0
Chào bạn ditimdl
Tôi vẩn cãm thấy file trên cần phải cải tiến thêm:
1> Các sheet mà ta lọc ra bạn đang cho dòng TỔNG CỘNG nằm ở dòng thứ 4039... Như vậy nếu dử liệu chỉ có mấy dòng thì ta đang tốn gần 4000 dòng cho việc Format mà chẳng làm gì cả... Nó làm cho dung lượng file tăng đáng kể... (File bạn hiện có dung lượng trên 1M, tôi làm theo kiểu mới chỉ còn 150K)
2> Với cách bố trí dử liệu trên tuy rằng bạn gặp thuận lợi về công thức ở sheet TONGHOP nhưng lại mất công AutoFilter NonBlanks cho từng sheet... Tôi thấy không đẹp cho lắm
Vậy tôi có cách này, bạn sẽ không bạn tâm về vụ AutoFilter NonBlanks nữa... Mặc khác ở sheet TONGHOP cũng không cần công thức luôn (vì đã VBA rồi thì làm luôn 1 thể nhỉ)

Code đây:
PHP:
Sub Locdulieu()
  Dim Rng As Range, Temp As Range, Sh As Worksheet, i As Long, ShName
  Application.ScreenUpdating = False
  i = 6
  ShName = Array("T1TC", "T2UC", "HL", "EL", "JL", "AV", "DV", "T3", "BV", "IS", "GL", "FL", "VC", "CV")
  For Each Sh In ThisWorkbook.Worksheets
    DK = Application.HLookup(Sh.Name, ShName, 1, 0)
    If Not IsError(DK) Then
       Sh.Range("A5").CurrentRegion.EntireRow.Delete
       With Sheets("TOTAL")
          Set Rng = .[A5].CurrentRegion
          .[Q6:Q20].ClearContents
          Select Case Sh.Name
            Case Is = "JL", "T3", "GL", "IS", "FL", "VC": .[Q6] = Sh.Name
            Case Is = "T1TC": .[Q6] = "T1": .[Q7] = "TC"
            Case Is = "T2UC": .[Q6] = "T2": .[Q7] = "UC"
            Case Is = "HL": .[Q6] = "HL": .[Q7] = "IA": .[Q8] = "IB"
            Case Is = "AV": .[Q6] = "AV": .[Q7] = "A1": .[Q8] = "AL"
            Case Is = "BV": .[Q6] = "BV": .[Q7] = "B1": .[Q8] = "B2"
            Case Is = "EL": .[Q6] = "EL": .[Q7] = "ES"
            Case Is = "CV": .[Q6] = "CV": .[Q7] = "H3"
            Case Is = "DV": .[Q6] = "DV": .[Q7] = "H1"
          End Select
          Rng.AdvancedFilter Action:=1, CriteriaRange:=.[Q5].CurrentRegion
          Rng.SpecialCells(xlCellTypeVisible).Copy Destination:=.[A30000]
       End With
       With Sheets("TOTAL").[A30000].CurrentRegion
          .Copy: Sh.[A5].Insert Shift:=xlDown
          .ClearContents: .ClearFormats
       End With
       Set Temp = Sh.[A5].CurrentRegion
       Temp.Offset(Temp.Rows.Count + 1, 2).Resize(1, 13).SpecialCells(3, 23).Copy
       Sheets("TONGHOP").Cells(i, 3).PasteSpecial xlPasteValues
       If Temp.Rows.Count > 1 Then
          With Temp.Offset(1, 0).Resize(Temp.Rows.Count - 1, 1)
             .Formula = "=ROW() -5"
             .Value = .Value
          End With
       End If
       Sheets("TOTAL").ShowAllData
       i = i + 1
     End If
   Next Sh
   Application.CutCopyMode = False
   Application.ScreenUpdating = True
End Sub
Việc chèn 1 sheet có tên không nằm trong list cho trước sẽ không ảnh hưởng gì đến code cả
Xem file đính kèm và cho biết ý bạn thế nào nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn về những góp ý và thời gian anh đã dành cho em. Những ý anh nói ở trên em cũng đã nghĩ đến nhưng không ngờ anh lại cải tiến trước khi em đặt câu hỏi. Mong anh dành thêm chút thời gian nói sơ về những đoạn code trên cho em học hỏi thêm được không? Nói đến công thức excel may ra em còn biết đôi chút chứ để liên kết các code lại cho nó logic thì chỉ có tưởng tượng ra mà thôi.
Sắp tới em có thể nhờ anh xem qua file làm việc chính thức để giúp em sửa lại và có thể dùng code VBA để trợ giúp chứ dữ liệu ngày càng lớn ~20000 gây nên tình trạng rất chậm . (File lọc này thực hiện thêm 1 công việc nữa là copy những dữ liệu ở file làm việc ra sau khi chốt quý)
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn về những góp ý và thời gian anh đã dành cho em. Những ý anh nói ở trên em cũng đã nghĩ đến nhưng không ngờ anh lại cải tiến trước khi em đặt câu hỏi. Mong anh dành thêm chút thời gian nói sơ về những đoạn code trên cho em học hỏi thêm được không? Nói đến công thức excel may ra em còn biết đôi chút chứ để liên kết các code lại cho nó logic thì chỉ có tưởng tượng ra mà thôi.
Sắp tới em có thể nhờ anh xem qua file làm việc chính thức để giúp em sửa lại và có thể dùng code VBA để trợ giúp chứ dữ liệu ngày càng lớn ~20000 gây nên tình trạng rất chậm . (File lọc này thực hiện thêm 1 công việc nữa là copy những dữ liệu ở file làm việc ra sau khi chốt quý)
Cái này cũng dể thôi mà ---> gần giống với code của các bài trước!
Chỉ làm thêm mấy món:
- Đầu tiên tôi đặt dòng tổng cộng và mấy thứ linh tinh vào dòng 7 của các sheet... Đặt sẳn công thức (để cho chắc ăn tôi dùng INDIRECT... bạn xem kỹ lại nhé)
- Sau đó thì cứ copy ở TOTAL thì dùng Insert Copy cells (chứ không paste bình thường)... Bạn có thể record macro vụ Insert Copy cells này để tham khảo
- Tiếp theo xác định dòng THÀNH TIỀN ở từng sheet, chỉ lấy phần có công thức (Ctrl + G\Special\Formula) rồi paste vào từng dòng trong sheet TONGHOP
Có thể bạn nhìn vào nguyên đoạn code và cãm thấy ngợp, thật ra bạn có thể phân tích từng đoạn nhỏ, mỗi đoạn làm 1 nhiệm vụ (gần giống như khi ta lồng các công thức Excel vào với nhau)... Bạn hiểu từng đoạn 1 thì ráp chúng lại sẽ trở thành 1 quá trình hoàn chỉnh!
 
Upvote 0
Gửi anh NDU & các anh chị trên diễn đàn!

File em đính kèm theo dữ liệu khoảng 20.000 dòng (file này dùng để nhập dữ liệu) và khoảng 9column x2(Mặt hàng và số lượng).
Trước thì em dùng vlookup tính giá trong file luôn nên rất nặng, em nhờ anh viết code để tính giá:
- Tính giá luôn trong file đính kèm?
- Copy dữ liệu qua 1 file khác và áp giá vào>> copy/paste value lại?
Anh xem 2 phương án trên với dữ liệu em đưa ra ở trên cái nào hợp lý hơn?
Cảm ơn!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Ai dà... cái vụ này sư phụ Sa đã từng có ý kiến rằng: "Không nêu nêu đích danh 1 ai đó" ... như ở đây bạn gọi đích danh tôi... Lở như tôi làm không được thì người khác cũng ngại tham gia (có nhờ đâu mà giúp)
Tôi sẽ cố gắng xem yêu cầu của bạn, tuy nhiên bạn nên sửa lại nội dung bài viết 1 tí... Kẻo phiền (cho chính bạn)
 
Upvote 0
PHP:
Sub Locdulieu()
  Dim Rng As Range, Temp As Range, Sh As Worksheet, i As Long, ShName
  Application.ScreenUpdating = False
  i = 6
  ShName = Array("T1TC", "T2UC", "HL", "EL", "JL", "AV", "DV", "T3", "BV", "IS", "GL", "FL", "VC", "CV")
  For Each Sh In ThisWorkbook.Worksheets
    DK = Application.HLookup(Sh.Name, ShName, 1, 0)
    If Not IsError(DK) Then
       Sh.Range("A5").CurrentRegion.EntireRow.Delete
       With Sheets("TOTAL")
          Set Rng = .[A5].CurrentRegion
          .[Q6:Q20].ClearContents
          Select Case Sh.Name
            Case Is = "JL", "T3", "GL", "IS", "FL", "VC": .[Q6] = Sh.Name
            Case Is = "T1TC": .[Q6] = "T1": .[Q7] = "TC"
            Case Is = "T2UC": .[Q6] = "T2": .[Q7] = "UC"
            Case Is = "HL": .[Q6] = "HL": .[Q7] = "IA": .[Q8] = "IB"
            Case Is = "AV": .[Q6] = "AV": .[Q7] = "A1": .[Q8] = "AL"
            Case Is = "BV": .[Q6] = "BV": .[Q7] = "B1": .[Q8] = "B2"
            Case Is = "EL": .[Q6] = "EL": .[Q7] = "ES"
            Case Is = "CV": .[Q6] = "CV": .[Q7] = "H3"
            Case Is = "DV": .[Q6] = "DV": .[Q7] = "H1"
          End Select
          Rng.AdvancedFilter Action:=1, CriteriaRange:=.[Q5].CurrentRegion
          Rng.SpecialCells(xlCellTypeVisible).Copy Destination:=.[A30000]
       End With
       With Sheets("TOTAL").[A30000].CurrentRegion
          .Copy: Sh.[A5].Insert Shift:=xlDown
          .ClearContents: .ClearFormats
       End With
       Set Temp = Sh.[A5].CurrentRegion
       Temp.Offset(Temp.Rows.Count + 1, 2).Resize(1, 13).SpecialCells(3, 23).Copy
       Sheets("TONGHOP").Cells(i, 3).PasteSpecial xlPasteValues
       If Temp.Rows.Count > 1 Then
          With Temp.Offset(1, 0).Resize(Temp.Rows.Count - 1, 1)
             .Formula = "=ROW() -5"
             .Value = .Value
          End With
       End If
       Sheets("TOTAL").ShowAllData
       i = i + 1
     End If
   Next Sh
   Application.CutCopyMode = False
   Application.ScreenUpdating = True
End Sub
</SPAN></SPAN>Trong sub lọc và tách dữ liệu ra các sheet thì số thứ tự được đánh lại từ 1...chứ không lấy theo số thứ tự đã đánh sẵn trước. Vậy cho em hỏi phải sửa lại code như thế nào để nó lấy theo số thứ tự ban đầu?
 
Upvote 0
Trong sub lọc và tách dữ liệu ra các sheet thì số thứ tự được đánh lại từ 1...chứ không lấy theo số thứ tự đã đánh sẵn trước. Vậy cho em hỏi phải sửa lại code như thế nào để nó lấy theo số thứ tự ban đầu?
Thì file tôi gữi bạn, khi lọc ra các sheet đã đánh số thứ tự lại rồi còn gì (đánh STT từ 1 đến hết)
Bạn xem lại thừ
 
Upvote 0
Khi lọc ra các loại thẻ thì số thứ tự của các sheet phải khác nhau chứ anh?
Ví dụ số 1 em có loại thẻ AV, Số 2 em có loại thẻ TC
Vậy sau khi lọc ra và gán dữ liệu cho từng sheet tương ứng thì AV nằm ở sheet AV và nó là số 1, TC nằm qua sheet T1TC nhưng nó phải là số 2 như dữ liệu gốc? chứ ko phải đánh số bắt đầu từ 1.
 
Upvote 0
Khi lọc ra các loại thẻ thì số thứ tự của các sheet phải khác nhau chứ anh?
Ví dụ số 1 em có loại thẻ AV, Số 2 em có loại thẻ TC
Vậy sau khi lọc ra và gán dữ liệu cho từng sheet tương ứng thì AV nằm ở sheet AV và nó là số 1, TC nằm qua sheet T1TC nhưng nó phải là số 2 như dữ liệu gốc? chứ ko phải đánh số bắt đầu từ 1.
Có nghĩa là bạn muốn giữ nguyên STT theo bảng gốc? Vậy càng dể (làm tôi mất công viết thêm chổ này vì nghĩ phải đánh lại STT mới đẹp... Ẹc... Ẹc...)
Vậy thì xóa nguyên đoạn này nhé:
PHP:
       If Temp.Rows.Count > 1 Then
          With Temp.Offset(1, 0).Resize(Temp.Rows.Count - 1, 1)
             .Formula = "=ROW() -5"
             .Value = .Value
          End With
       End If
 
Upvote 0
Chào bạn, mình xem file nhưng có chổ cần hỏi bạn giúp vì mình cũng cần làm một file gần giống như vậy. Nếu có tên trùng trong một sheet nào đó thì số tiền khám chữa bệnh có cộng dồn vào sheet total không
 
Upvote 0
Trong file mẫu mình có chèn thêm 3 cột trong sheet TOTAL (Tổng chi phí KCB, Máu, Chi phí VC bệnh nhân) lúc này vùng điều kiện để lọc chuyển sang cột T chứ không còn nằm ở cột Q như file đính kèm ở bài 28, mình có sửa vùng điều kiện để lọc từ Q6:Q20... kết quả lọc ra như ý muốn nhưng mình không biết làm sao đưa kết quả các cột mới thêm vào sheet Tổng hợp.
Mình nghĩ nó nằm ở đoạn code này nhưng không hiểu nó nên chẳng sửa được nên nhờ các bạn giúp mình.
Mã:
Set Temp = Sh.[A5].CurrentRegion
       Temp.Offset(Temp.Rows.Count + 1, 2).Resize(1, 13).SpecialCells(3, 23).Copy
       Sheets("TONGHOP").Cells(i, 3).PasteSpecial xlPasteValues
 

File đính kèm

Upvote 0
Trong file mẫu mình có chèn thêm 3 cột trong sheet TOTAL (Tổng chi phí KCB, Máu, Chi phí VC bệnh nhân) lúc này vùng điều kiện để lọc chuyển sang cột T chứ không còn nằm ở cột Q như file đính kèm ở bài 28, mình có sửa vùng điều kiện để lọc từ Q6:Q20... kết quả lọc ra như ý muốn nhưng mình không biết làm sao đưa kết quả các cột mới thêm vào sheet Tổng hợp.
Mình nghĩ nó nằm ở đoạn code này nhưng không hiểu nó nên chẳng sửa được nên nhờ các bạn giúp mình.
Mã:
Set Temp = Sh.[A5].CurrentRegion
       Temp.Offset(Temp.Rows.Count + 1, 2).Resize(1, 13).SpecialCells(3, 23).Copy
       Sheets("TONGHOP").Cells(i, 3).PasteSpecial xlPasteValues
Trong sheet TOTAL, do bạn chèn 3 cột nên cột Q lúc trước bây giờ sẽ biến thành cột T, đúng không?
Vậy trong code, chô nào là [Q..] thì bạn sửa thành [T..] ---> Bấm Ctrl + H, thay [Q thành [T
Thử xem
 
Upvote 0
Thay Q thành T thì em làm được rồi, lọc theo mã từng sheet thì ok nhưng không biết sửa code như thế nào để nó lấy thêm 3 cột mới thêm vào đưa qua sheet tổng hợp.
Các bạn giúp mình với.
 
Upvote 0
Web KT

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

Back
Top Bottom