Đánh số thự tự tự động những ô đã được merge.

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Ở cột A em có các ô bị Merge(vùng màu xanh). Em thử viết code để đánh số thự tự 1 cách tự đông liên tục(Xem File đính kèm) nhưng kết quả không chính xác(Các số TT không liên tục). Em xin hỏi các anh chị 3 vấn đề như sau:
+ Code em bị sai ở đâu? Cách khắc phục?
+ Nếu các ô đã bị Merge như vậy thì có thể dùng code để giải quyết không? Nếu có cho em xin code tham khảo?
+ Nếu không thể dùng code thi có cách giải quyết tự động nào khác không(Công thức chẳng hạn).
Em xin cảm ơn!

Option Explicit

Public Sub DanhSTT()
Dim i As Long, cll As Range
    For Each cll In Selection
        If cll = "" Then
            i = i + 1
            cll = i
        End if
        Next cll
End Sub

Câu 1: Tôi lấy ví dụ: Lúc chưa chạy code thì các ô A3, A4, A5 đều trống (Cll="") nên khi chọn vùng A1:A20 và chạy code, chúng sẽ được gán lần lượt các giá trị 3, 4, 5, và tất nhiên là câu lệnh i = i + 1 đều được thực thi (tuy nhiên chỉ có ô đầu của vùng đã merge là A3 được giữ giá trị lại). Do đó khi Cll là ô A6 thì i đã có giá trị là 6, chính vì vậy mà sau khi chạy code, ô A6 có giá trị là 6.

Câu 2: Một code để tham khảo như sau (có thể còn luộm thuộm và chưa hay nhưng giải quyết được vấn đề):

Sub DanhSTT1()
    Dim i As Long, Cll As Range
    Set Cll = Selection(1, 1)
    Do While Cll.Row < Selection.Row + Selection.Rows.Count
        i = i + 1
        Cll = i
        Set Cll = Cll.Offset(1)
    Loop
End Sub

Câu 3: Tôi bó tay!

www.giaiphapexcel.com/diendan/threads/%C4%90%C3%A1nh-s%E1%BB%91-th%E1%BB%B1-t%E1%BB%B1-t%E1%BB%B1-%C4%91%E1%BB%99ng-nh%E1%BB%AFng-%C3%B4-%C4%91%C3%A3-%C4%91%C6%B0%E1%BB%A3c-merge.93552/

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 2 ▥ 0
Quảng cáo

Bạn nên đọc

2 Responses

  1. hands says:

    A1 gõ 1.
    Quét chọn A2:An và gõ =Max(a$1:a1)+1 và nhấn Ctrl+Enter.

    A1 gõ 1.
    Quét chọn A2:An và gõ =Max(a$1:a1)+1 và nhấn Ctrl+Enter.

    Công thức của Mr.Bum cho kết quả đúng trong trường hợp ô A1 không bị Merge nếu A1 bị merge thì cũng bị sai.

    Giải pháp công thức thì chỉ còn cách đó thôi, nếu A1:A2 bị Merge thì A1 gõ 1, chọn A3:An và gõ =MAX(A$1:A2)+1, Ctrl+Enter. Cứ vậy mà quét chọn vùng và sửa công thức nếu ô đầu Merge nhiều ô.

  2. hands says:

    Bài này dùng code đơn giản mà. Kể cả Merge cell tại A1 cũng chỉ cần for next trong cái Selection là được. Chỉ cần 3 dòng code. Thử đi. Bảo đảm ngắn hơn code bài số 2

    Quả thật em nghĩ hoài không sao ra code chỉ có 3 dòng.
    Anh xem thử:

    Option Explicit
    Public Sub danh_stt()
    Dim i As Long, Cll As Range
    Set Cll = Selection(1, 1)
    For i = 1 To Selection.Rows.Count
    If Cll.Row < Selection.Rows.Count Then
    Cll = i
    Set Cll = Cll.Offset(1)
    End If
    Next i
    End Sub

    Thấy có ngắn hơn nè!

    Public Sub DanhSTT2()
    Dim cll As Range
    Selection.ClearContents
    For Each cll In Selection
    cll = WorksheetFunction.Count(Selection) + 1
    Next cll
    End Sub

    Thật sự không biết 3 dòng code của QuangHai thế nào chứ mình nghĩ code của NghiaPhuc là đã OK rồi còn muốn for next thì e phải lồng hàm if vào

    Sub Test1()
    Dim i As Long, Cll As Range
    Dim k As Long
    Set Cll = Selection(1, 1)
    For i = 1 To Selection.Rows.Count
        If Cll.Row < Selection.Rows.Count Then
            k = k + 1
            Cll = k
            Set Cll = Cll.Offset(1)
        End If
    Next
    End Sub

    Giống code của bài số 9, nhưng nếu thêm vài cái dấu ":" thì chỉ còn có 1 dòng code à nha.

    Sub abc()
    Dim cell As Range
    For Each cell In Selection
    cell = Application.Max(Selection) + 1
    Next
    End Sub

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm