tranquocduy
Thành viên mới

- Tham gia
- 11/2/07
- Bài viết
- 16
- Được thích
- 2
Công thức tại D4Tôi có file noidung.xls (đính kèm), tôi cần tìm giá trị dân số từ sheet data theo điều kiện đã chọn là tỉnh, huyện, xã
Vừa rồi làm đăng ký MST TNCN, em có lấy danh mục tỉnh, quận, phường cả nước, có kèm mã quốc gia.
Nhắn bổ sung: Bạn nào có biển số xe toàn cõi VN hãy gởi lên hay giới thiệu tìm ở đâu giúp nha!
Vừa rồi làm đăng ký MST TNCN, em có lấy danh mục tỉnh, quận, phường cả nước, có kèm mã quốc gia.
Em làm thử cái validation nhằm sửa dữ liệu nhập vào. Tiện em đưa Bác tham khảo.
Còn 2 số đầu bảng số xe thì em tự nhớ cũng được 2/3. Lúc nào tiện em up lên.
Do ít làm nên công thức name hơi dài.
Bạn Duy xem file này, sh Valadation nhé.
Em đang tìm cách tách tỉnh = code nhưng dữ liệu nhập lúc thì có 4 dấu "-", lúc thì "-". Nguyên tắc là ưu tiên lấy từ bên phải qua, tỉnh - > quận -> phường. Nhưng mà khuất mắt là làm sao tìm tỉnh gần đúng so với dm Tỉnh.Cách của Thu Nghi là khả thi vì mỗi dòng có tỉnh huyện riêng. Còn bài của các bạn ấy lại chung 1 ô tỉnh vậy khi tỉnh phù hợp dòng này lại không phù hợp dòng kia mới chết chứ.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sh As Worksheet, Rng As Range, sRng As Range, RngS As Range
Dim MyAdd As String, Ma As String
Dim MyColor As Byte
Set Sh = Sheets("Data")
If Not Intersect(Target, [B2]) Is Nothing Then
With [B2].Interior
If .ColorIndex < 30 Then MyColor = 35 Else MyColor = .ColorIndex + 1
End With
Sh.[j1].CurrentRegion.Offset(1).ClearContents
Set Rng = Sh.Range(Sh.[B1], Sh.[B65500].End(xlUp))
Set RngS = Rng.Find(Target.Value, , xlFormulas, xlWhole)
If Not RngS Is Nothing Then
Ma = RngS.Offset(, -1).Value
Target.Offset(, -1).Value = Ma
Set Rng = Sh.Range(Sh.[d1], Sh.[d65500].End(xlUp))
Set sRng = Rng.Find(Left(Ma, 2), , , xlPart)
If Not sRng Is Nothing Then
MyAdd = sRng.Address
Do
With Sh.[j65500].End(xlUp).Offset(1)
.Value = sRng.Offset(, 1).Value
End With
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
End If
End If
ElseIf Not Intersect(Target, [c2]) Is Nothing Then
Sh.[L1].CurrentRegion.Offset(1).ClearContents
Set Rng = Sh.Range(Sh.[e1], Sh.[E65500].End(xlUp))
Set RngS = Rng.Find(Target.Value, , , xlWhole)
If Not RngS Is Nothing Then
Ma = Left(RngS.Offset(, -1).Value, 3)
Set Rng = Sh.Range(Sh.[G1], Sh.[G65500].End(xlUp))
Set sRng = Rng.Find(Ma, , , xlPart)
If Not sRng Is Nothing Then
MyAdd = sRng.Address
Do
With Sh.[L65500].End(xlUp).Offset(1)
.Value = sRng.Offset(, 1).Value
End With
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
End If
End If
End If
[B2].Interior.ColorIndex = MyColor
End Sub
Với dữ liệu trong bài này và theo yêu cầu của chủ topic, dùng validation động cũng đượcVâng, Cám ơn. Tôi gởi lại file này như sau