Tự lọc dữ liệu đến các sheet (1 người xem)

Liên hệ QC

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

conmalangtu_ndt

Thành viên mới
Tham gia
4/10/11
Bài viết
18
Được thích
1
Thân gửi anh chị trên diễn đàn,
Em có 1 vấn đề sau , rất mong được sự giúp đỡ của anh chị :
Trong file tudongloc.exe có 4 sheet : chitiet1, chitiet2, chitiet3, chitiet4 chứa các dữ liệu nguồn. Các dữ liệu nguồn từ các sheet này sẽ được lọc đến lần lượt các sheet : 01, 02, 03,....31 theo ngày tháng. em muốn khi mở file tudongloc.exe theo ngày bất kỳ thì các file chỉ hiển thị sheet ngày đó ( vd : mở file theo ngày 02 thì chỉ hiển thị sheet "02" ). Các anh chị xem giup trong file đính kèm .
Chân thành cảm ơn !
 

File đính kèm

Thân gửi anh chị trên diễn đàn,
Em có 1 vấn đề sau , rất mong được sự giúp đỡ của anh chị :
Trong file tudongloc.exe có 4 sheet : chitiet1, chitiet2, chitiet3, chitiet4 chứa các dữ liệu nguồn. Các dữ liệu nguồn từ các sheet này sẽ được lọc đến lần lượt các sheet : 01, 02, 03,....31 theo ngày tháng. em muốn khi mở file tudongloc.exe theo ngày bất kỳ thì các file chỉ hiển thị sheet ngày đó ( vd : mở file theo ngày 02 thì chỉ hiển thị sheet "02" ). Các anh chị xem giup trong file đính kèm .
Chân thành cảm ơn !
Nghĩa là khi mở file ngày 2 thì chỉ hiện sheet 02 phải không?
Nếu vậy thì bạn dùng code
Mã:
Private Sub Workbook_Open()
Dim Sh As Worksheet
Dim Today As String
On Error Resume Next
Today = Format(Day(Now), "00")
Sheets(Today).Visible = xlSheetVisible
For Each Sh In ThisWorkbook.Worksheets
  If Sh.Name <> Today Then
    Sh.Visible = xlSheetVeryHidden
  End If
Next
End Sub
 
Upvote 0
Cảm ơn viehoai ,
Bây giờ em thêm sheet menu vào file. Em muốn khi mở file tudongloc_1.exe lên thì chỉ hiện sheet menu và khi chọn nút ngày bất kỳ thì sẽ link đến sheet của ngày đó (chỉ hiển thị sheet của ngày link đến thôi ) đồng thời sheet này đã được lọc các dữ liệu theo ngày, tháng từ các sheet chitiet sang. Anh chị xem file đính kèm.
Rất mong anh chị trên GPE giúp đỡ !
 

File đính kèm

Upvote 0
Thân gửi anh chị trên diễn đàn,
Em có 1 vấn đề sau , rất mong được sự giúp đỡ của anh chị :
Trong file tudongloc.exe có 4 sheet : chitiet1, chitiet2, chitiet3, chitiet4 chứa các dữ liệu nguồn. Các dữ liệu nguồn từ các sheet này sẽ được lọc đến lần lượt các sheet : 01, 02, 03,....31 theo ngày tháng. em muốn khi mở file tudongloc.exe theo ngày bất kỳ thì các file chỉ hiển thị sheet ngày đó ( vd : mở file theo ngày 02 thì chỉ hiển thị sheet "02" ). Các anh chị xem giup trong file đính kèm .
Chân thành cảm ơn !
Lỡ giải bài này rồi nên post lên luôn, xem như là một tham khảo:
1. Bỏ hết tất cả các sheet thành phần, chỉ giữ lại 4 sheet chi tiết và 1 sheet 01.
2. Ẩn các sheet chi tiết
3. Sử dụng code sau để lọc dữ liệu vào sheet tháng:
PHP:
Sub Auto_Open()
    Dim i As Long
    With Sheet5
        .Cells.Clear
        .Name = Format(Date, "MM")
        .[N1] = "Ca-ngay/thang"
        .[N2] = "*-" & Format(Date, "MM")
        For i = 1 To 4
            With .[A65536].End(xlUp).Offset(1).Resize(, 10)
                .Value = Sheets("chitiet" & i).[A1:J1].Value
                .Font.Bold = True
                .Borders.Weight = 1
                .Interior.ColorIndex = 6
            End With
            Sheets("chitiet" & i).UsedRange.AdvancedFilter xlFilterCopy, .[N1:N2], .[A65536].End(xlUp).Resize(, 10)
        Next
        .[1:1].Delete: .[N:N].Delete
    End With
End Sub
Thử thay đổi tháng trong hệ thống và mở lại file xem kết quả.
 

File đính kèm

Upvote 0
Cảm ơn viehoai ,
Bây giờ em thêm sheet menu vào file. Em muốn khi mở file tudongloc_1.exe lên thì chỉ hiện sheet menu và khi chọn nút ngày bất kỳ thì sẽ link đến sheet của ngày đó (chỉ hiển thị sheet của ngày link đến thôi ) đồng thời sheet này đã được lọc các dữ liệu theo ngày, tháng từ các sheet chitiet sang. Anh chị xem file đính kèm.
Rất mong anh chị trên GPE giúp đỡ !
1. Trong 1 tháng bạn có 30 ngày thì làm 30 Button như thế à? Sao bạn không sử dụng 1 Validation để chọn 1 ngày nào đó theo list cho tiện?
2.
đồng thời sheet này đã được lọc các dữ liệu theo ngày, tháng từ các sheet chitiet sang
Lọc theo quy luật gì vậy?
Bạn nói rõ mục đích của bạn đi, biết đâu mọi người đưa ra phương án hay hơn cho bạn. Mình hiểu sơ qua rất có thể không phải nhiều sheet 01, 02 ,03...
 
Upvote 0
1. Trong 1 tháng bạn có 30 ngày thì làm 30 Button như thế à? Sao bạn không sử dụng 1 Validation để chọn 1 ngày nào đó theo list cho tiện?
2.
Lọc theo quy luật gì vậy?
Bạn nói rõ mục đích của bạn đi, biết đâu mọi người đưa ra phương án hay hơn cho bạn. Mình hiểu sơ qua rất có thể không phải nhiều sheet 01, 02 ,03...

Gửi viehoai,
Trong file co 30 (hoặc 31 tùy tháng ) sheet có sẵn các dữ liệu khác. Mục đích của em là lọc thêm các dữ liệu từ các file nguồn "chitiet" bổ sung vào đúng các vị trí đã trình bày trong các sheet ngày (01,02,...). Điều kiện lọc là ngày, tháng. Em để sheet menu có đủ 30 nut cũng được.
Mong anh chị giúp !
 
Upvote 0
Cảm ơn viehoai ,
Bây giờ em thêm sheet menu vào file. Em muốn khi mở file tudongloc_1.exe lên thì chỉ hiện sheet menu và khi chọn nút ngày bất kỳ thì sẽ link đến sheet của ngày đó (chỉ hiển thị sheet của ngày link đến thôi ) đồng thời sheet này đã được lọc các dữ liệu theo ngày, tháng từ các sheet chitiet sang. Anh chị xem file đính kèm.
Rất mong anh chị trên GPE giúp đỡ !
Thử phương án này xem sao: Sử dụng Validation và Defined Name để chọn tháng, ngày; sử dụng sự kiện Worksheet_Change để lọc kết quả.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long
    If Target.Address <> "$C$3" Or Target.Count > 1 Then Exit Sub
    With Sheets("Ket qua loc")
        .Cells.Clear
        For i = 1 To 4
            With .[A65536].End(xlUp).Offset(1).Resize(, 10)
                .Value = Sheets("chitiet" & i).[A1:J1].Value
                .Font.Bold = True
                .Borders.Weight = 1
                .Interior.ColorIndex = 6
            End With
            Sheets("chitiet" & i).UsedRange.AdvancedFilter xlFilterCopy, .[N1:N2], .[A65536].End(xlUp).Resize(, 10)
        Next
        .[1:1].Delete
    End With
End Sub

P/S: Trong bài trên nhầm lẫn một chút giữa thángngày.
 

File đính kèm

Upvote 0
Cảm ơn anh NghiaPhuc ,
Code của anh đã đúng ý của em rồi nhưng nếu trong sheet chitiett1 em chọn lọc từ A1:J1 , chitiet2 em chọn lọc từ A1:I1 , chitiet3 từ A1:G1 , chitiet4 từ A1:E1 thì làm thế nào ah?
anh giúp em nhé !
 
Upvote 0
Cảm ơn anh NghiaPhuc ,
Code của anh đã đúng ý của em rồi nhưng nếu trong sheet chitiett1 em chọn lọc từ A1:J1 , chitiet2 em chọn lọc từ A1:I1 , chitiet3 từ A1:G1 , chitiet4 từ A1:E1 thì làm thế nào ah?
anh giúp em nhé !
Sửa lại một chút, bỏ sheet Menu đi để tránh rườm rà:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, Cols As Long
    If Target.Address <> "$E$1" Or Target.Count > 1 Then Exit Sub
    [A3:J65536].Clear
    For i = 1 To 4
        Cols = Switch(i = 1, 10, i = 2, 9, i = 3, 7, i = 4, 5)
        With [A65536].End(xlUp).Offset(1).Resize(, Cols)
            .Value = Sheets("ChiTiet" & i).[A1].Resize(, Cols).Value 
           .Font.Bold = True
            .Borders.Weight = 2
            .Interior.ColorIndex = 6
        End With
        Sheets("ChiTiet" & i).UsedRange.AdvancedFilter xlFilterCopy, [Q1:Q2], [A65536].End(xlUp).Resize(, Cols)
    Next
End Sub
 

File đính kèm

Upvote 0
Sửa lại một chút, bỏ sheet Menu đi để tránh rườm rà:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, Cols As Long
    If Target.Address <> "$E$1" Or Target.Count > 1 Then Exit Sub
    [A3:J65536].Clear
    For i = 1 To 4
        Cols = Switch(i = 1, 10, i = 2, 9, i = 3, 7, i = 4, 5)
        With [A65536].End(xlUp).Offset(1).Resize(, Cols)
            .Value = Sheets("ChiTiet" & i).[A1].Resize(, Cols).Value 
           .Font.Bold = True
            .Borders.Weight = 2
            .Interior.ColorIndex = 6
        End With
        Sheets("ChiTiet" & i).UsedRange.AdvancedFilter xlFilterCopy, [Q1:Q2], [A65536].End(xlUp).Resize(, Cols)
    Next
End Sub

Anh Nghĩa Phúc giúp em vụ "copy dữ liệu sang các sheet tương ứng" nhé !
Thank you !
 

File đính kèm

Upvote 0
Sửa lại một chút, bỏ sheet Menu đi để tránh rườm rà:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, Cols As Long
    If Target.Address <> "$E$1" Or Target.Count > 1 Then Exit Sub
    [A3:J65536].Clear
    For i = 1 To 4
        Cols = Switch(i = 1, 10, i = 2, 9, i = 3, 7, i = 4, 5)
        With [A65536].End(xlUp).Offset(1).Resize(, Cols)
            .Value = Sheets("ChiTiet" & i).[A1].Resize(, Cols).Value 
           .Font.Bold = True
            .Borders.Weight = 2
            .Interior.ColorIndex = 6
        End With
        Sheets("ChiTiet" & i).UsedRange.AdvancedFilter xlFilterCopy, [Q1:Q2], [A65536].End(xlUp).Resize(, Cols)
    Next
End Sub

Anh Nghĩa Phúc giúp em vụ "copy dữ liệu sang các sheet tương ứng " nhé , cảm ơn anh nhiều !
 

File đính kèm

Upvote 0
Cảm ơn bác Ba Tê đã góp ý ,
Em mới tham gia diễn đàn nên còn nhiều bỡ ngỡ , mong anh chị chỉ bảo nhiều để tiến bộ
Trong fiel đính kèm này em đã đưa ra câu hỏi cụ thể hơn. Rất mong sự giúp đỡ của anh chị trên GPE
Chân thành cảm ơn!
 

File đính kèm

Upvote 0
Cảm ơn bác Ba Tê đã góp ý ,
Em mới tham gia diễn đàn nên còn nhiều bỡ ngỡ , mong anh chị chỉ bảo nhiều để tiến bộ
Trong fiel đính kèm này em đã đưa ra câu hỏi cụ thể hơn. Rất mong sự giúp đỡ của anh chị trên GPE
Chân thành cảm ơn!
Tạm làm 1 sheet GPE
Muốn xem ngày nào thì nhập ngày đó vào ô D1.
Chỗ nào chưa đúng thì "la lên" cộng với chỉ ra sai chỗ nào, đúng ra là cái gì.
Nhớ Enable Macros
 

File đính kèm

Upvote 0
Phương án của em giống y chang của anh Bate

Có ai coi được 1 lúc 30 sheet đâu mà tác giả tính làm 30 cái nút bấm chứ

PHP:
Sub loc()
Dim sh, dl(), i, j, kq(), x, k
sh = Array("dulieu 1", "dulieu 2", "dulieu 3", "dulieu 4")
Range("F5:Z39,N145:W167").ClearContents
For i = 0 To UBound(sh)
   With Sheets(sh(i))
      dl = .Range(.[A2], .Cells(.[A65536].End(3).Row, .[iv1].End(1).Column)).Value
      ReDim kq(1 To UBound(dl), 1 To UBound(dl, 2) - 1)
      For j = 1 To UBound(dl)
         If Right(dl(j, 1), 2) = Left([d1], 2) Then
            k = k + 1
            For x = 2 To UBound(dl, 2)
               kq(k, x - 1) = dl(j, x)
            Next
         End If
      Next
   End With
   If i = 0 Then [F5].Resize(k, x - 2) = kq
   If i = 1 Then [F17].Resize(k, x - 2) = kq
   If i = 2 Then [F28].Resize(k, x - 2) = kq
   If i = 3 Then [N145].Resize(k, x - 2) = kq
   k = 0
Next
End Sub
 

File đính kèm

Upvote 0
Cảm ơn anh Ba Tê và anh quanghai1969,
Code của các anh đã cơ bản giai quyết được vấn đề của em , tuy nhiên tại các sheet"01", "02",.... các dòng em ẩn đi là những dòng đã chứa sẵn các dữ liệu khác ( dữ liệu này được nhập tay hoặc xuất từ các tín hiệu qua VBS). Em muốn khi lọc số liệu từ các sheet dulieu sang thì không ảnh hưởng gì đến số liệu ở các dòng đã ẩn đi. Số dòng đã ẩn là cố định
Các bác giúp tiếp em nhé !
 
Upvote 0
Cảm ơn anh Ba Tê và anh quanghai1969,
Code của các anh đã cơ bản giai quyết được vấn đề của em , tuy nhiên tại các sheet"01", "02",.... các dòng em ẩn đi là những dòng đã chứa sẵn các dữ liệu khác ( dữ liệu này được nhập tay hoặc xuất từ các tín hiệu qua VBS). Em muốn khi lọc số liệu từ các sheet dulieu sang thì không ảnh hưởng gì đến số liệu ở các dòng đã ẩn đi. Số dòng đã ẩn là cố định
Các bác giúp tiếp em nhé !
Các sheet 02,03,04 phải chèn thêm dòng cho giống như sheet 01, rồi lấy Sub của Quang Hải áp dụng sự kiện Activate cho các sheet 01,02,03,04 v.v...
Nhớ nhập ngày chính xác vào ô D1 các sheet này
 

File đính kèm

Upvote 0
If i = 0 Then [F5].Resize(k, x - 2) = kq
If i = 1 Then [F17].Resize(k, x - 2) = kq
If i = 2 Then [F28].Resize(k, x - 2) = kq
If i = 3 Then [N145].Resize(k, x - 2) = kq
k
= 0
Gửi các anh chị,
Em thấy bài này khá giống với vấn đề em đang tìm để ứng dụng vào công việc. Nhưng em chưa hiểu đoạn code trên. Mong anh/chị giải thích giúp
Cảm ơn nhiều !
 
Upvote 0
Các sheet 02,03,04 phải chèn thêm dòng cho giống như sheet 01, rồi lấy Sub của Quang Hải áp dụng sự kiện Activate cho các sheet 01,02,03,04 v.v...
Nhớ nhập ngày chính xác vào ô D1 các sheet này

Chào anh/chị,
Em nhờ anh chị giải thích giúp em code của anh quanghai1969 và anh Bate được không ah?
em cảm ơn anh chị !
 
Upvote 0
Web KT

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

Back
Top Bottom