Xử lý danh sách hộ gia đinh có số dòng không cố định?

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

vhkhoi

Thành viên mới
Tham gia
14/10/08
Bài viết
35
Được thích
0
Mình có danh sách của các hộ gia đình. Mỗi 1 hộ gia đình có một mã số. Số thành viên trong 1 hộ không cố định (mỗi thành viên trên 1 dòng).
Vậy làm thế nào lấy ra đầy đủ danh sách hộ gia đình đó theo mã số. Mình gửi kèm file mẫu.
Mong được các bạn giúp đỡ.
 

File đính kèm

Mình có danh sách của các hộ gia đình. Mỗi 1 hộ gia đình có một mã số. Số thành viên trong 1 hộ không cố định (mỗi thành viên trên 1 dòng).
Vậy làm thế nào lấy ra đầy đủ danh sách hộ gia đình đó theo mã số. Mình gửi kèm file mẫu.
Mong được các bạn giúp đỡ.

bạn thử cách này xem, mình có thêm 2 cột (A,B) trước bảng danh sách, nếu bạn không thích có thể hide đi
 

File đính kèm

Mình có danh sách của các hộ gia đình. Mỗi 1 hộ gia đình có một mã số. Số thành viên trong 1 hộ không cố định (mỗi thành viên trên 1 dòng).
Vậy làm thế nào lấy ra đầy đủ danh sách hộ gia đình đó theo mã số. Mình gửi kèm file mẫu.
Mong được các bạn giúp đỡ.

Tại I3 bạn dùng chỉ 1 công thức sau:
PHP:
=IF(SMALL(IF(OFFSET(B$2,MATCH($H$2,$A$3:$A$64,),,1000,)="",ROW(OFFSET(B$2,MATCH($H$2,$A$3:$A$64,),,1000,)),""),1)-MATCH($H$2,$A$1:$A$64,)>=ROW(1:1),OFFSET(B$1,MATCH($H$2,$A$3:$A$64,)+ROW(1:1),),"")
Kết thúc với Ctrl+Shift+Enter

Tham khảo thêm file kèm

P/s: hoặc có thể đặt vài name cho gọn


bạn thử cách này xem, mình có thêm 2 cột (A,B) trước bảng danh sách, nếu bạn không thích có thể hide đi

Tác giả yêu cầu:
Danh sách gốc không được thêm các cột, chỉ được thêm dòng khi có thêm người
bạn lại thêm một mớ cột -> mỗi lần cập nhật là kéo công thức ở cột A, B đó xuống à?
=> Của tôi cũng phức tạp rồi, của bạn càng rối hơn, nhờ cao thủ rút gọn giùm !
 

File đính kèm

Lần chỉnh sửa cuối:
nhờ mod/smod xóa giùm
 
Lần chỉnh sửa cuối:
Tác giả yêu cầu:
bạn lại thêm một mớ cột -> mỗi lần cập nhật là kéo công thức ở cột A, B đó xuống à?
=> Chi phức tạp vậy ?

hihi, em có biết tác giả yêu cầu vậy, nhưng em chỉ biết mỗi cách này thôi.
Dù sao ai đọc được bài này mà gặp trường hợp tương tự (nhưng cho thêm cột) thì vẫn dùng được bác nhỉ?
 
Thêm cho Bạn 1 cách dùng VBA nữa nè!
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iR As Long
If Target.Address = "$H$2" Then
 Range("I3:K18").Clear
   iR = WorksheetFunction.Match(Range("H2"), Range("A3:A65000")) + 3
      With Range("A" & iR).CurrentRegion
        If iR = 4 Then
            .Offset(1, 1).Resize(, 3).Copy Range("I3")
        ElseIf iR > 4 Then
            .Offset(, 1).Resize(, 3).Copy Range("I3")
        End If
      End With
End If
End Sub
 

File đính kèm

tại i3 bạn dùng chỉ 1 công thức sau:
PHP:
=if(small(if(offset(b$2,match($h$2,$a$3:$a$64,),,1000,)="",row(offset(b$2,match($h$2,$a$3:$a$64,),,1000,)),""),1)-match($h$2,$a$1:$a$64,)>=row(1:1),offset(b$1,match($h$2,$a$3:$a$64,)+row(1:1),),"")
kết thúc với ctrl+shift+enter

tham khảo thêm file kèm

p/s: Hoặc có thể đặt vài name cho gọn




tác giả yêu cầu:
Bạn lại thêm một mớ cột -> mỗi lần cập nhật là kéo công thức ở cột a, b đó xuống à?
=> của tôi cũng phức tạp rồi, của bạn càng rối hơn, nhờ cao thủ rút gọn giùm !
nếu các hộ đều cách nhau 1 dòng trống thì cái này là đủ
PHP:
=if(i2=0,0,hlookup(i$2,$b$2:$d$66,match($h$2,$a$2:$a$64,0)+rows(h$2:h3)-2,0))
 

File đính kèm

Lần chỉnh sửa cuối:
nếu các hộ đều cách nhau 1 dòng trống thì cái này là đủ
PHP:
=if(i2=0,0,hlookup(i$2,$b$2:$d$66,match($h$2,$a$2:$a$64,0)+rows(h$2:h3)-2,0))
Gia nhập GPE chỉ 1 năm mà bây giờ Thương tiến bộ thần tốc thật ---> Quá là bước tiến bộ kỳ diệu... Chúc mừng nha!
 
gia nhập gpe chỉ 1 năm mà bây giờ thương tiến bộ thần tốc thật ---> quá là bước tiến bộ kỳ diệu... Chúc mừng nha!
cái này là nhờ những cái hàm ma thuật mà ndu+dat_butmuc tranh luận với nhau từ đó mà rút ra đấy thôi
MONG CÁC BÁC TRANH LUẬN NHIỀU NỮA ĐỂ EM KIẾM TÝ KIẾN THỨC RƠI VẢI NHÉ
hi hi
 
Công thức của Duy Thương là tuyệt rồi. Nhưng nếu dùng cột phụ thì chỉ cần 1 cột mà thôi.
Cụ thể trong file của LucVan, không cần cột phụ A, chỉ cần cột phụ B, khỏi small cho rắc rối cuộc đời.

Dĩ nhiên dùng cột phụ sẽ yêu cầu phủ kín cột Mã hộ. Nhưng phủ kín thế mới đúng theo quy tắc tạo lập cơ sở dữ liệu. Ra báo cáo trình bày thế nào thì tuỳ, chứ cơ sở dữ liệu yêu cầu phải chuẩn.

Do đó, không cần dòng trắng xen kẽ.
 

File đính kèm

Công thức của Duy Thương là tuyệt rồi. Nhưng nếu dùng cột phụ thì chỉ cần 1 cột mà thôi.
Cụ thể trong file của LucVan, không cần cột phụ A, chỉ cần cột phụ B, khỏi small cho rắc rối cuộc đời.

Dĩ nhiên dùng cột phụ sẽ yêu cầu phủ kín cột Mã hộ. Nhưng phủ kín thế mới đúng theo quy tắc tạo lập cơ sở dữ liệu. Ra báo cáo trình bày thế nào thì tuỳ, chứ cơ sở dữ liệu yêu cầu phải chuẩn.

Do đó, không cần dòng trắng xen kẽ.

Nếu mà phủ hết cột Mã thì dùng 1 công thức này cũng được này Bác?
Không dùng cột phụ A & công thức tại cột H.
PHP:
=IF(COUNTIF($B$3:$B$1000,$H$2)>=ROW(1:1),OFFSET(C$2,MATCH($H$2,$B$3:$B$1000,)+ROW(1:1)-1,),"")
 
Cảm ơn các bạn đã quan tâm giúp đỡ.
Tất cả các cách trên đều giải quyết được vấn đề. Nhưng việc thêm cột phụ trong trường hợp bất đắc dĩ thôi vì file dữ liệu của mình có gần 5 nghìn hộ cơ.
Việc phủ kín cột mã hộ thì cũng được, không sao cả. Dòng trắng xen kẽ thì không nhất thiết, nhưng để thì hay hơn.
Giải pháp của các bạn: Le Duy Thuong, Dat_Butmuc là hợp lý với mình hơn cả. Tuy nhiên một vài hàm mình chưa hiểu được. Để từ từ mình nghiên cứu, có gì không hiểu sẽ hỏi sau.

Việc dùng VBA của bạn Minh Cong cũng gọn nhẹ nhưng cũng khó tùy biến hơn dùng công thức.
 
Nếu mà phủ hết cột Mã thì dùng 1 công thức này cũng được này Bác?
Không dùng cột phụ A & công thức tại cột H.
PHP:
=IF(COUNTIF($B$3:$B$1000,$H$2)>=ROW(1:1),OFFSET(C$2,MATCH($H$2,$B$3:$B$1000,)+ROW(1:1)-1,),"")

À, công thức với cột phụ ở bài trên, còn dùng được trong trường hợp dữ liệu không được sort theo mã hộ cơ. Công thức của Dat_butmuc và cả Duy Thương đều không được nhé.
Năm xưa mình dùng cách này để lọc lấy sổ cái TK trong 1 rừng dữ liệu nhập theo ngày, không sort theo số hiệu TK.
 
Lần chỉnh sửa cuối:
Việc dùng VBA của bạn Minh Cong cũng gọn nhẹ nhưng cũng khó tùy biến hơn dùng công thức.

Nếu dùng VBA thì bạn dùng thử cái này xem sao. Bạn có thể đặt bảng tính ở bất kỳ dòng - cột nào và chỉ cần sửa mỗi địa chỉ của ô chứa mã số hộ (chữ màu đỏ).
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Address = [B][COLOR="red"]"$H$2" [/COLOR][/B]Then
    Target(2, 2).Resize(20, 3).Clear
    With Cells.Find(Target, , , 1, 2).Resize(20).SpecialCells(4)
        .Areas(1).Offset(-1, 1).Resize(, 3).Copy Target(2, 2)
    End With
End If
End Sub
 

File đính kèm

À, công thức với cột phụ ở bài trên, còn dùng trong trường hợp dữ liệu không được sort theo mã hộ cơ. Năm xưa mình dùng cách này để lọc lấy sổ cái TK trong 1 rừng dữ liệu nhập theo ngày, không sort theo số hiệu TK.
Nếu mã phủ hết cột và tác giả chính là Le duy thuong thì không cần dùng công thức mà dùng cái chiêu PIVIOT của lão chết tiệt HƯỚNG DẪN là số 1 , cái nài còn nhanh hơn code VBA
 

File đính kèm

Nếu mã phủ hết cột và tác giả chính là Le duy thuong thì không cần dùng công thức mà dùng cái chiêu PIVIOT của lão chết tiệt HƯỚNG DẪN là số 1 , cái nài còn nhanh hơn code VBA

Pivot, không phải Piviot.
Vả lại, mình cũng nói là: Pivot dùng để phân tích và tổng hợp, rất mạnh, nhưng không dùng như 1 báo cáo hoàn chỉnh được.
 
Web KT

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

Back
Top Bottom