Làm thế nào đánh số TT!

Liên hệ QC

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Tôi có 1 file đánh số theo thứ tự như sau:
Cột A: STT
A, A1, 1, 2 ..., A2, 1, 2, 3, B, B1, 1, 2,....,X, X1, 1, 2...Trong đó A-> X là thứ tự Alphabet theo chữ cái quy định A: Hà Nội, B:... , X: Cà Mau.
Và trong từng A có mục con là A1, A2... là theo quận (ví dụ) và trong từng A1, A2 là 1, 2, 3... là số TT theo Phường (Xã).
Và 1 cột SL. (Cột B)
Nhờ các bạn hỗ trợ đánh lại số TT theo tiêu chí trên với điều kiện, nếu A mà SL = 0 thì sẽ đánh số TT A cho B, bao gồm mục con với điều kiện SL của B >0.
Các bạn xem file và giúp hộ nhé. Khó diễn giải quá. Công thức hay VBA gì cũng OK. Làm mấy cột phụ cũng OK miễn sao OK.
Cám ơn nhiều.
Có người bạn nhờ mà không thế nào làm được.
 

File đính kèm

  • DanhLaiSoTT.xls
    18.5 KB · Đọc: 64
Dòng thì ghi rõ ràng SL = 0 : xóa bỏ

  1. Thế còn dòng không ghi gì cả (P.01 - Q.Bình Thạnh - TP HCM) thì không bị xóa nhưng (P.02 - Q.1 - TP.HCM) thì lại bị xóa <=> túm lại là xóa bỏ nhũng dòng nào?
  2. Theo em nghĩ: dòng nào cần xóa bỏ thì delete SL, sau đó AutoFill NoBlanks thì được kết quả dòng còn lại. công việc còn lại chỉ là điền A - A1 - 1 - 2 - ... A2 - 1 - 2 - ... B - B1 - 1 - 2 - ...
  3. Mà Bác muốn điền lại STT bằng công thức hay là ...
 
@ To Thunghi
Tạm thời em hiểu sao làm vậy, nếu bậy chỗ nào thì anh giải thích thêm rồi điểu chỉnh tiếp.
Nếu đúng ý anh thì tối ưu tiếp.

* Lưu ý : Địa danh phải có trong bảng Danh mục và Phường thì bắt đầu bằng chữ "P"

OK thì cho em xin dĩa mồi hén.
TDN
 

File đính kèm

  • DanhLaiSoTT.zip
    11.7 KB · Đọc: 60
Xin gửi bác 1 cách dùng VBA, code chưa được tối ưu bác cố xài thử xem sao --=0
 

File đính kèm

  • DanhLaiSoTT.xls
    33.5 KB · Đọc: 58
Cám ơn các bạn nhiều, sẽ xem lại và báo cáo kết quả sau.
Tedaynui muốn cái gì kèm với mồi?
Thú thật nhiều lúc mình cũng tự làm khó mình. Thay vì đặt 1, 1.1, 1.1.1 lại đặt A, B ,C mà bây giờ đặt lại thì phải sửa từ đầu.
 
To Tedaynui: Các P 01 chưa chắc là phường mà có thể là Xã, nếu X.01 chung với P.01 thì không OK.
To RollOver79: Nếu A1 mà có SL=0, thì mặc nhiên A2 sẽ là A1, tiếp A2. Và nếu A =0 ie A1, An =0 => B sẽ lấy số TT là A, cứ đôn lên. Ie xếp theo So TT: A, A1, An, ...X, X1, Xn. Cứ theo thứ tự từ trên xuống nếu SL = 0 thì sẽ bỏ và số SoTT sẽ gán cho Inext.
Cụ thể:
A: Hà Nội
B: TP. HCM
C: Bình Dương
D: Đồng Nai

Nếu slA=0 và slC = 0 lúc ấy thứ tự sẽ là
A: TP. HCM
B: Đồng Nai
Tương tự với mục con.
A1: P. 01
A2: P. 02
A3: X. 05
Nếu A2 = 0 lúc ấy Số TT sẽ là
A1: P. 01
A2: X. 05
 
PHP:
Option Explicit
Sub CopyFirst()
 Dim Rng As Range, Clls As Range
 Dim Rws As Long
 Dim Tinh As Byte, Huyen As Byte
 
 Rws = [b3].CurrentRegion.Rows.Count
 [e3].Resize(Rws, 4).Clear
 [e3].Resize(, 3) = [a3].Resize(, 3).Value
 Set Rng = [c4].Resize(Rws)
 Rws = 3:               Tinh = 64
 For Each Clls In Rng
   If Clls.Value > 0 Then
      Rws = Rws + 1
      With Clls.Offset(, -2)
         Cells(Rws, "E").Resize(, 3) = .Resize(, 3).Value
         If Not IsNumeric(Right(.Value, 1)) Then
            Tinh = Tinh + 1:        Cells(Rws, "e") = Chr(Tinh)
            Huyen = 0
         ElseIf Not IsNumeric(Left(.Value, 1)) Then
            Huyen = Huyen + 1
            Cells(Rws, "e") = Chr(Tinh) & CStr(Huyen)
         End If
      End With
   End If
 Next Clls
End Sub
 
Vậy thì dùng VBA, em tham gia góp vui vậy (Code Bác HYen gọn quá, hic)
PHP:
Sub Test()
Dim lRow1 As Long, lRow2 As Long
Dim STT1 As Long, STT2 As Long, STT3 As Long
Dim Temp1 As String, Temp2 As String

    Sheet2.Range("A:C").ClearContents
    Sheet2.Range("A3:C3").Value = Sheet1.Range("A3:C3").Value
    STT1 = 65
    lRow2 = 4
For lRow1 = 4 To Range("Source").Rows.Count + 3
        Temp1 = Sheet1.Range("A" & lRow1)
        Temp2 = Sheet1.Range("A" & lRow1 + 1)
    If Sheet1.Range("C" & lRow1) > 0 Then
        If Len(Temp1) = 1 And (Not IsNumeric(Temp1)) Then
            STT2 = 1
            Sheet2.Range("A" & lRow2) = Chr(STT1)
            Sheet2.Range("B" & lRow2 & ":C" & lRow2).Value = Sheet1.Range("B" & lRow1 & ":C" & lRow1).Value
            STT1 = STT1 + 1
        ElseIf Len(Temp1) > 1 And (Not IsNumeric(Temp1)) Then
            Sheet2.Range("A" & lRow2) = Chr(STT1 - 1) & STT2
            Sheet2.Range("B" & lRow2 & ":C" & lRow2).Value = Sheet1.Range("B" & lRow1 & ":C" & lRow1).Value
            STT3 = 1
            STT2 = STT2 + 1
        Else
            Sheet2.Range("A" & lRow2) = STT3
            Sheet2.Range("B" & lRow2 & ":C" & lRow2).Value = Sheet1.Range("B" & lRow1 & ":C" & lRow1).Value
            STT3 = STT3 + 1
        End If
            lRow2 = lRow2 + 1
    End If
Next
Sheet2.Select
End Sub
 
Web KT
Back
Top Bottom