Hỏi cách đánh STT phân cấp tỉnh, huyện, xã tự động

Liên hệ QC

garotivn

Thành viên mới
Tham gia
27/2/20
Bài viết
13
Được thích
3
Chào các anh chị em. Mình có 1 đề bài như hình.
Cột A đã nhập sẵn STT, mình cần STT ở cột B tự động điền, mong mọi người giúp cho công thức
STT ở cột B mình chỉ cần hiện như vậy, còn dạng Text hay Number cũng được, dạng 2 chữ số thì càng tốt (x.01 thay cho x.1)

ĐÃ ĐƯỢC BẠN hocexcel_1991 GIÚP GIẢI QUYẾT XONG. CẢM ƠN CÁC BẠN

Mã:
ô B3: =IF(D3="","",IF(A3,"",LOOKUP(10^10,A$3:A3)&"."&SUMPRODUCT(--(COUNTIF(OFFSET($A$3,,,ROW($1:1),),"<>")=LOOKUP(10^10,A$3:A3)))-1))

copy công thức xuống

Danh STT phan cap tu dong the nao.JPG
 

File đính kèm

  • Hoi ve danh STT tinh, huyen, xa.xlsx
    32.7 KB · Đọc: 29
Lần chỉnh sửa cuối:
đã đính kèm bạn ạ, cảm ơn bạn

Bạn thử A3=IF(B3<>"";MAX($A$2:A2)+1;"")
Không được như mong muốn bạn ạ, mình cần là điền công thức để STT huyện ở cột B chạy tự động theo STT tỉnh ở cột A (đã có sẵn). Bạn xem file đính kèm nhé, cảm ơn bạn đã đọc
 
Chào các anh chị em. Mình có 1 đề bài như hình.
Cột A đã nhập sẵn STT, mình cần STT ở cột B tự động điền, mong mọi người giúp cho công thức

View attachment 237037
Cột số thứ tự thiếu số 4, bạn đánh lại STT cột A rồi dùng công thức này nhé
Mã:
B3=IF(D3="","",IF(A3,"",LOOKUP(10^10,A$3:A3)&"."&SUMPRODUCT(--(COUNTIF(OFFSET($A$3,,,ROW($1:1),),"<>")=LOOKUP(10^10,A$3:A3)))-1))
coppy công thức xuống
 
Đánh số kiểu này không ổn, vì 2.1 = 2.10

Nếu số huyện lớn hơn 9 nên sủ dụng 2.01 cho số TT huyện đầu tiên.
 
Cột số thứ tự thiếu số 4, bạn đánh lại STT cột A rồi dùng công thức này nhé
Mã:
B3=IF(D3="","",IF(A3,"",LOOKUP(10^10,A$3:A3)&"."&SUMPRODUCT(--(COUNTIF(OFFSET($A$3,,,ROW($1:1),),"<>")=LOOKUP(10^10,A$3:A3)))-1))
coppy công thức xuống

Chính xác luôn, kể cả x.10 cũng vẫn là x.10 chứ không bị mất số 0. Cảm ơn bạn rất nhiều
 
@garotivn

Nếu bạn còn ứng dụng cách đánh số thứ tự này thì bạn có thể tham khảo hàm VBA UDF sau:

Copy code vào một Module và Sử dụng:
=S_OrderBranch(B3:B2000,D3: D2000)
Hoặc thay dấu chấm(.) thành dấu khác:
=S_OrderBranch(B3:B2000,D3: D2000, "-")

Nếu bạn chỉ muốn chạy một lần duy nhất và xóa hàm đi và vẫn lưu file ở dạng xlsx thì:

=S_OrderBranch(B3:B2000,D3: D2000, ".", TRUE)

-------------------------------------

JavaScript:
Option Explicit
#If VBA7 Then
  Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal HWnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongPtr, ByVal lpTimerFunc As LongPtr) As Long
  Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal HWnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
  Private Declare Function SetTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  Private Declare Function KillTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long) As Long
#End If
#If Win64 Then
  Private gTimerID As LongPtr, gTimerID2 As LongPtr
#Else
  Private gTimerID As Long, gTimerID2 As Long
#End If
Private OrderAuto_OArgs(), OrderAuto_OIndex As Integer
Function S_OrderBranch(ByVal TargetBranch As Range, _
            Optional ByVal TargetNames As Range, _
            Optional ByVal Separator As String = ".", _
            Optional ByVal Finally As Boolean = False) As Variant
  On Error Resume Next
  KillTimer 0&, gTimerID: gTimerID = 0
  S_OrderBranch = ""
  Dim K As Integer
  K = UBound(OrderAuto_OArgs)
  ReDim Preserve OrderAuto_OArgs(1 To K + 1)
  OrderAuto_OArgs(K + 1) = VBA.Array(TargetBranch, TargetNames, Separator, Application.Caller, Finally)
  gTimerID = SetTimer(0&, 0&, 1, AddressOf S_OrderBranch_callback)
End Function
Private Sub S_OrderBranch_callback()
  On Error Resume Next
  Call KillTimer(0&, gTimerID): gTimerID = 0
  Call KillTimer(0&, gTimerID2): gTimerID2 = 0
  On Error GoTo 0
  Dim UA As Integer
  UA = UBound(OrderAuto_OArgs)
  If UA > 0 Then
    OrderAuto_OIndex = OrderAuto_OIndex + 1
    Dim Args As Variant, A As Variant, R As Long, C As Integer, total(), UB As Long, LR As Long
    Args = OrderAuto_OArgs(OrderAuto_OIndex)
    Dim R1 As Range, R2 As Range, A1 As Variant, A2 As Variant, tmp As String, K As Long
    Set R1 = Args(0): Set R2 = Args(1): A1 = R1.value: A2 = R2.value
    UB = R2.Rows.Count
    ReDim total(1 To UB, 1 To 1)
    LR = R2(Rows.Count - R2.Row, 1).End(3).Row - R2.Row + 1
    If LR > UB Then LR = UB
    If LR > 0 Then
      tmp = A1(1, 1)
      If tmp <> "" Then
        For R = 2 To LR
          If A1(R, 1) <> "" Then
            K = 0
            tmp = A1(R, 1)
          Else
            K = K + 1
            total(R - 1, 1) = tmp & Args(2) & CStr(K)
            If IsNumeric(total(R - 1, 1)) And Right(CStr(K), 1) = 0 Then
              total(R - 1, 1) = "'" & total(R - 1, 1)
            End If
          End If
        Next
        Args(3)(2, 1).Resize(UB).value = total
      End If
    End If
    If Args(4) Then Args(3).value = ""
    If OrderAuto_OIndex >= UA Then
      Erase OrderAuto_OArgs: OrderAuto_OIndex = 0
    Else
      gTimerID = SetTimer(0&, 0&, 1, AddressOf S_OrderBranch_callback2)
    End If
  End If
End Sub
Private Sub S_OrderBranch_callback2()
  S_OrderBranch_callback
End Sub
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom