Loc dữ liệu từ sheet hiện có sang 1 sheet khac có điều kiện

Liên hệ QC

hoangnam_vt

Thành viên mới
Tham gia
20/12/12
Bài viết
10
Được thích
0
Giúp mình với. Mình muốn loc danh sách từ 1 sheet khách hàng hiện có trong sheet DATA. ra các sheet , theo từng khu vực.
 

File đính kèm

  • loc ds tu sheet khac.xls
    36.5 KB · Đọc: 40
Bạn tham khảo hàm mảng tự tạo này nha:

}}}}} }}}}} }}}}}
;;;;;;;;;;; ;;;;;;;;;;; ;;;;;;;;;;;

/-*+/ /-*+/ /-*+/
 

File đính kèm

  • gpeUDF.rar
    13.1 KB · Đọc: 82
Góp vui 1 cách khác
Công thức tại ô C2 của sheet DATA: =COUNTIF($A$2:$A2,$A2) kéo xuống
Công thức tại ô C2 của các sheet còn lại =INDEX(DATA!$B$2:$B$20,MATCH($C$1&COUNTIF(DATA!$A$2:$A$20,$C$1)-COUNTIF(DATA!$A$2:$A$20,$C$1)+ROW(1:1),DATA!$A$2:$A$20&DATA!$C$2:$C$20,0)) kết thúc công thức nhấn tổ hợp phím Ctrl Shift Enter rồi kéo xuống

Bài này làm bằng VBA thì đỡ mệt hơn
 
với công thức này, khi kéo xuống thì những ô không có tìm thấy giá trị sẽ bị báo lổi. còn cách nào khác không bạn. để không thấy lổi . Thanks
 

File đính kèm

  • loc ds tu sheet khac.xls
    47.5 KB · Đọc: 23
Bẫy lỗi là xong thôi bạn (copy công thức này vầo đi bạn)
Công thức tại ô C2 của các sheet còn lại =if(iserror(INDEX(DATA!$B$2:$B$20,MATCH($C$1&COUNTIF(DATA!$A$ 2:$A$20,$C$1)-COUNTIF(DATA!$A$2:$A$20,$C$1)+ROW(1:1),DATA!$A$2:$ A$20&DATA!$C$2:$C$20,0))),"",INDEX(DATA!$B$2:$B$20,MATCH($C$1&COUNTIF(DATA!$A$ 2:$A$20,$C$1)-COUNTIF(DATA!$A$2:$A$20,$C$1)+ROW(1:1),DATA!$A$2:$ A$20&DATA!$C$2:$C$20,0))) kết thúc công thức nhấn tổ hợp phím Ctrl Shift Enter rồi kéo xuống
 
Giúp mình với. Mình muốn loc danh sách từ 1 sheet khách hàng hiện có trong sheet DATA. ra các sheet , theo từng khu vực.
Nếu dữ liệu trong Data hàng ngàn dòng và hàng chục huyện thị (hàng chục sheet) thì dùng hàm mảng chắc oải quá.
Thử với VBA xem sao. Hổng chịu thì thôi.
Từ sheet Data chuyển sang sheet khác là code chạy.
 

File đính kèm

  • loc ds tu sheet khac.rar
    13.5 KB · Đọc: 92
Cho mình hỏi làm sao ra được giống file của bạn vậy? Mình làm không được... File này cũng chính là một bài test đầu vào khi đi xin việc.
Trong file đó có cái này:
Function LocDF(DF As Range, CSDL As Range)
Dim sRng As Range, Cls As Range
Dim J As Long, Rw As Long
Rw = CSDL.Rows.Count
ReDim Arr(1 To Rw, 1) As String
Set sRng = CSDL(1).Resize(Rw).Find(DF.Value, , xlFormulas, xlWhole)
If Not sRng Is Nothing Then _
Set CSDL = Range(sRng, CSDL(1).Offset(Rw))
For Each Cls In CSDL
If Cls.Value = DF.Value Then
J = J + 1
Arr(J, 1) = Cls.Offset(, 1).Value
End If
Next Cls
LocDF = Arr()
End Function
Muốn làm giống thì thêm nó vào file của bạn.
 
Cho mình hỏi làm sao ra được giống file của bạn vậy? Mình làm không được... File này cũng chính là một bài test đầu vào khi đi xin việc.

Hàm mảng, nên sẽ fải kết thúc bằng tổ hợp 3 fim. @#!^%

;;;;;;;;;;; ;;;;;;;;;;; ;;;;;;;;;;;

[warning1]
Chàng 3 Tê này, thiệt tình!

Còn 1 dòng lệnh Option Base 1 thì không trích dẫn luôn!

Bạn bè chơi vậy là không đặng à nha!
[/warning1]
 
Thật tình là trình độ của em làm cái này không được, em ko biết thêm nó vào đâu cả...

Vậy hãy làm ngược lại những gì Ba Tê bày:

Lấy dữ liệu của bạn đỗ tất tần tật vô file có hàm tự tạo bên trên & xài thử;

Chú í về cách xài hàm mảng thêm chút:

Ví dụ để tạo bảng kết quả ở trang tính 'VT' (theo file đính kèm), bạn vô trang tính này
Lấy chuột tô chọn vùng [C2:C9],
Sau đó bấm chuột lên thanh công thức & nhập nội dung hàm:

=LocDF(C$1,Data)


Sau đó giữ 3 fím dành cho hàm mảng & {ENTER} thôi.

Chúc thành công!
 
Nếu dữ liệu trong Data hàng ngàn dòng và hàng chục huyện thị (hàng chục sheet) thì dùng hàm mảng chắc oải quá.
Thử với VBA xem sao. Hổng chịu thì thôi.
Từ sheet Data chuyển sang sheet khác là code chạy.
Mã:
[HTML][QUOTE]
Option Explicit
Public Sub GPE()
Application.ScreenUpdating = False
Dim DK As String, sArr(), dArr(), I As Long, K As Long, Ws As Worksheet
With Sheets("Data")
    sArr = .Range(.[A2], .[A65000].End(xlUp)).Resize(, 2).Value
End With
For Each Ws In Worksheets
    ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
    K = 0
    If Ws.Name <> "Data" Then
        DK = Ws.[C1].Value
        For I = 1 To UBound(sArr, 1)
            If sArr(I, 1) = DK Then
                K = K + 1: dArr(K, 1) = sArr(I, 2)
            End If
        Next I
    End If
    Ws.[C2:C10000].ClearContents
    If K Then
        Ws.[C2].Resize(K).Value = dArr
        Ws.[C2].Resize(K).Borders.LineStyle = xlContinuous
    End If
Next Ws
Application.ScreenUpdating = True
End Sub


[/QUOTE][/HTML]
Ahh có thể giải thích cho em hiểu code trong file đó được không anh? Thank!
 
Web KT
Back
Top Bottom