huonglien1901
GPE là ngôi nhà thứ 2 của tôi!!!
- Tham gia
- 17/4/16
- Bài viết
- 2,701
- Được thích
- 2,434
- Giới tính
- Nam
- Nghề nghiệp
- Nhân viên kỹ thuật in ấn
Cái này mà dùng hàm cực lắm em, nếu chỉ có 2 sheet thì dễ, nhưng đến một lúc nào đó có nhu cầu mở rộng thì công thức này coi như phá sản. Trong trường hợp này tôi nghĩ code là hợp lý.Em chào Anh Chị!
Em có vấn đề nhờ mọi người hỗ trợ,
Em muốn trich lọc dựa vào cột điều kiện ngày tháng.(Khi thay đổi ngày tháng dữ liệu sẽ thay đổi)
Em cảm ơn mọi người nhiều!
Anh có thể đưa hai giải pháp là code VBA và công thức được không Anh? Bài này em sử dụng cột phụ mà nó báo lỗi.Cái này mà dùng hàm cực lắm em, nếu chỉ có 2 sheet thì dễ, nhưng đến một lúc nào đó có nhu cầu mở rộng thì công thức này coi như phá sản. Trong trường hợp này tôi nghĩ code là hợp lý.
Công thức là dùng cột phụ đánh số ở sheet thứ nhất, sau đó sheet 2 cũng dùng cột phụ tương tự, sau đó bên sheet tổng dùng công thức nếu số lượng dòng (dùng row() để đếm số dòng) nhỏ hơn hoặc bằng số lượng ngày thảo mãn ở sheet 1 thì trích lọc từ sheet 1 còn nếu lớn hơn thì trích lọc từ sheet 2.Anh có thể đưa hai giải pháp là code VBA và công thức được không Anh? Bài này em sử dụng cột phụ mà nó báo lỗi.
Em cảm ơn Anh nhiều!
Xem file này xem saoEm chào Anh Chị!
Em có vấn đề nhờ mọi người hỗ trợ,
Em muốn trich lọc dựa vào cột điều kiện ngày tháng.(Khi thay đổi ngày tháng dữ liệu sẽ thay đổi)
Em cảm ơn mọi người nhiều!
Sub Data(sh As Worksheet, Arr_D(), Dk As Long, K As Long)
Dim i As Long
Dim Dcuoi As Long
Dim Arr_N()
Dcuoi = sh.Range("A1000000").End(xlUp).Row
Arr_N = sh.Range("A3:E" & Dcuoi)
For i = 1 To UBound(Arr_N, 1)
If Arr_N(i, 2) = Dk Then
K = K + 1
Arr_D(K, 1) = Arr_N(i, 1)
Arr_D(K, 2) = Arr_N(i, 3)
Arr_D(K, 3) = Arr_N(i, 4)
Arr_D(K, 4) = Arr_N(i, 5)
End If
Next
End Sub
Sub Main()
Dim K As Long
Dim Arr_D(1 To 100000, 1 To 4)
Dim Dk As Long
Dk = Sheet1.Range("D1")
Sheet1.Range("A3:D100000").Clear
K = 0
Call Data(Sheet2, Arr_D(), Dk, K)
Call Data(Sheet2, Arr_D(), Dk, K)
If K = 0 Then Exit Sub
Sheet1.Range("A3").Resize(K, 4) = Arr_D
Sheet1.Range("A3").Resize(K, 4).Borders.LineStyle = 1
End Sub
Anh phục em tính kiên trì rồi đó!Em chào Anh Chị!
Em có vấn đề nhờ mọi người hỗ trợ,
Em muốn trich lọc dựa vào cột điều kiện ngày tháng.(Khi thay đổi ngày tháng dữ liệu sẽ thay đổi)
Em cảm ơn mọi người nhiều!
Có công thức cho cột I không vậy anh ? Hay phải nhập thủ công, em thấy có nhiều sheet tên rất khóSheet 'Tổng':
- Cung cấp và điền tên các sheet của các Nhóm vào cột I.
Thân
Tạo ra danh sách các sheets tồn tại trong workbook hiện hành thì chỉ có VBA làm được thôi em! công thức thì thật sự bó tay ngoài cách chịu khó gõ từng sheet vào.Có công thức cho cột I không vậy anh ? Hay phải nhập thủ công, em thấy có nhiều sheet tên rất khó
Ngộ nhỡ sai thì chết.
Em cám ơn anh nhiều![]()
I4=IFERROR(INDEX(SheetNames,ROW(A2)),"")
Cám ơn anh. Đúng là cái em đang cần.Tạo ra danh sách các sheets tồn tại trong workbook hiện hành thì chỉ có VBA làm được thôi em! công thức thì thật sự bó tay ngoài cách chịu khó gõ từng sheet vào.
À! anh vừa lục lọi tìm được 1 cách nữa:
Tham khảo các cách trong file kèm.
- Tạo name: 'SheetNames' =REPLACE(GET.WORKBOOK(1),1,FIND("]",GET.WORKBOOK(1)),"")
Enter, fill xuống.Mã:I4=IFERROR(INDEX(SheetNames,ROW(A2)),"")
Thân
Chính nhờ các em hỏi, anh cũng học được nhiều thứ.Cám ơn anh. Đúng là cái em đang cần.
Chúc anh luôn giữ mãi bầu nhiệt huyết cùng GPE
Góp thêm cách dùng các hàm excel 2007Em chào Anh Chị!
Em có vấn đề nhờ mọi người hỗ trợ,
Em muốn trich lọc dựa vào cột điều kiện ngày tháng.(Khi thay đổi ngày tháng dữ liệu sẽ thay đổi)
Em cảm ơn mọi người nhiều!
Anh @phihndhsp ơi!,Khi em copy tên nhân viên vào thì kết quả vẫn là nhân viên cũ ban đầu.Xem file này xem sao
Mã:Sub Data(sh As Worksheet, Arr_D(), Dk As Long, K As Long) Dim i As Long Dim Dcuoi As Long Dim Arr_N() Dcuoi = sh.Range("A1000000").End(xlUp).Row Arr_N = sh.Range("A3:E" & Dcuoi) For i = 1 To UBound(Arr_N, 1) If Arr_N(i, 2) = Dk Then K = K + 1 Arr_D(K, 1) = Arr_N(i, 1) Arr_D(K, 2) = Arr_N(i, 3) Arr_D(K, 3) = Arr_N(i, 4) Arr_D(K, 4) = Arr_N(i, 5) End If Next End Sub
nếu có bao nhiêu sheet thì gọi cái này bấy nhiêu lầnMã:Sub Main() Dim K As Long Dim Arr_D(1 To 100000, 1 To 4) Dim Dk As Long Dk = Sheet1.Range("D1") Sheet1.Range("A3:D100000").Clear K = 0 Call Data(Sheet2, Arr_D(), Dk, K) Call Data(Sheet2, Arr_D(), Dk, K) If K = 0 Then Exit Sub Sheet1.Range("A3").Resize(K, 4) = Arr_D Sheet1.Range("A3").Resize(K, 4).Borders.LineStyle = 1 End Sub
Call Data(Sheet2, Arr_D(), Dk, K)
Chú ý các sheet phải tương đồng với nhau, và dòng bắt đầu nên đồng nhất nha
P/S Bài này sử dụng công thức không khả thi nha
Góp thêm cách dùng các hàm excel 2007
Em cảm ơn 2 Anh rất nhiều!Tạo ra danh sách các sheets tồn tại trong workbook hiện hành thì chỉ có VBA làm được thôi em! công thức thì thật sự bó tay ngoài cách chịu khó gõ từng sheet vào.
À! anh vừa lục lọi tìm được 1 cách nữa:
Tham khảo các cách trong file kèm.
- Tạo name: 'SheetNames' =REPLACE(GET.WORKBOOK(1),1,FIND("]",GET.WORKBOOK(1)),"")
Enter, fill xuống.Mã:I4=IFERROR(INDEX(SheetNames,ROW(A2)),"")
Thân
bạn cho tôi cái file mà bạn nói bị trục trặc tôi sẽ check cho bạn, có thể bạn chưa biết cách vận dụng nên nó mới vậyAnh @phihndhsp ơi!,Khi em copy tên nhân viên vào thì kết quả vẫn là nhân viên cũ ban đầu.
Bài đã được tự động gộp:
Em cảm ơn 2 Anh rất nhiều!
Chúc hai Anh một buổi tối vui vẻ!
bạn cho tôi cái file mà bạn nói bị trục trặc tôi sẽ check cho bạn, có thể bạn chưa biết cách vận dụng nên nó mới vậy
Call Data(Sheet2, Arr_D(), Dk, K)
Call Data(Sheet3, Arr_D(), Dk, K)
bạn chỉnh lại chỗ này một tí tôi gọi lộn hai cái giống nhau
Em cảm ơn Anh Phi nhiều!bạn cho tôi cái file mà bạn nói bị trục trặc tôi sẽ check cho bạn, có thể bạn chưa biết cách vận dụng nên nó mới vậy
Call Data(Sheet2, Arr_D(), Dk, K)
Call Data(Sheet3, Arr_D(), Dk, K)
bạn chỉnh lại chỗ này một tí tôi gọi lộn hai cái giống nhau