Code tạo STT hỗn hợp bao gồm chữ số La Mã và số theo điều kiện (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Hong.Van

Busy
Tham gia
7/5/12
Bài viết
2,330
Được thích
1,767
Em chào thầy cô & anh chị!
Xin giúp em tạo Code STT hỗn hợp bao gồm chữ số La Mã và số theo điều kiện như công thức của Cột A trong File đính kèm!
Em cảm ơn.
 

File đính kèm

Em chào thầy cô & anh chị!
Xin giúp em tạo Code STT hỗn hợp bao gồm chữ số La Mã và số theo điều kiện như công thức của Cột A trong File đính kèm!
Em cảm ơn.
Bạn thử code này xem sao:
PHP:
Sub STT()
Dim Arr, i As Long, j As Long, T1 As Long, T2 As Long
Arr = Range([M9], [A65536].End(xlUp)).Formula
    For i = 1 To UBound(Arr, 1)
        For j = 5 To 13
            If Arr(i, j) Like "=*" Then
                T1 = T1 + 1
                T2 = 0
                Arr(i, 1) = Application.WorksheetFunction.Roman(T1)
                Exit For
            ElseIf Arr(i, j) <> "" Then
                T2 = T2 + 1
                Arr(i, 1) = T2
                Exit For
            End If
        Next
    Next
Range([M9], [A65536].End(xlUp)).Formula = Arr
End Sub
 
Upvote 0
Bạn thử code này xem sao:
PHP:
Sub STT()
Dim Arr, i As Long, j As Long, T1 As Long, T2 As Long
Arr = Range([M9], [A65536].End(xlUp)).Formula
    For i = 1 To UBound(Arr, 1)
        For j = 5 To 13
            If Arr(i, j) Like "=*" Then
                T1 = T1 + 1
                T2 = 0
                Arr(i, 1) = Application.WorksheetFunction.Roman(T1)
                Exit For
            ElseIf Arr(i, j) <> "" Then
                T2 = T2 + 1
                Arr(i, 1) = T2
                Exit For
            End If
        Next
    Next
Range([M9], [A65536].End(xlUp)).Formula = Arr
End Sub

Code chỉ tạo tại cell A9 là I, các cell khác trong cột A không có gì
Em gởi file nhờ anh test lại
Em cảm ơn.
----------
P/s :em nói thêm, mục đích tạo code cho cột A (để em khỏi dùng công thức nữa)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Code chỉ tạo tại cell A9 là I, các cell khác trong cột A không có gì
Em gởi file nhờ anh test lại
Em cảm ơn.
----------
P/s :em nói thêm, mục đích tạo code cho cột A (để em khỏi dùng công thức nữa)

Tôi dựa vào dòng cuối cùng có dữ liệu của cột A để xác định vùng dữ liệu mà bạn xóa mất chữ Cộng ở dòng cuối thì kết quả không ra như ý là đúng rồi.
Bạn thêm dữ liệu vào cột A của dòng cuối hoặc sửa lại code xác định vùng dữ liệu (dòng 3).
Lúc nãy tôi quên bỏ dòng tổng cộng cuối cùng ra nên code đánh số thứ tự cho dòng này luôn. Bạn tự sửa lại luôn nhé. Tôi nghĩ bạn làm được.
 
Upvote 0
Lúc nãy tôi quên bỏ dòng tổng cộng cuối cùng ra nên code đánh số thứ tự cho dòng này luôn. Bạn tự sửa lại luôn nhé. Tôi nghĩ bạn làm được.
Em còn chập chững với VBA, nên thực sự nghĩ chưa ra (đọc code mãng của anh, em còn đang nghiên cứu), Anh giúp giùm em luôn nhé! cảm ơn anh.
 
Upvote 0
Anh Huuthang_bd và Thầy cô và anh chị sửa giúp tiếp giùm em
Nếu ở một hàng của cột E:M có số 0, thì nó vẫn đánh số thứ tự, Trong khi điều kiện của em là ( ví dụ SUM(E10:M10) =0) Thì không đánh số.
Em cảm ơn
 
Upvote 0
Anh Huuthang_bd và Thầy cô và anh chị sửa giúp tiếp giùm em
Nếu ở một hàng của cột E:M có số 0, thì nó vẫn đánh số thứ tự, Trong khi điều kiện của em là ( ví dụ SUM(E10:M10) =0) Thì không đánh số.
Em cảm ơn
Tôi viết code là dựa vào dữ liệu của bạn là chính chứ không phải là dựa vào công thức của bạn. Nếu dựa vào công thức của bạn thì tôi lấy gì để làm căn cứ đánh số thứ tự cho các dòng có số thứ tự là số La Mã?
Vì vậy, muốn code tổng quát thì bạn phải đưa dữ liệu tổng quát của bạn lên để khỏi mất công sửa tới sửa lui. Tôi code theo những đặc điểm sau của dữ liệu, chỗ nào bạn thấy dữ liệu có thể khác thì nói để tôi sửa code.
1. Nếu trong các cột từ E đến M của dòng nào có ít nhất một ô chứa công thức thì đánh số thứ tự là số La Mã
2. Nếu trong các cột từ E đến M của dòng nào không có ô nào có công thức và có ít nhất một ô có chứa dữ liệu thì đánh số thứ tự là số Ả Rập (bây giờ sửa lại là có ít nhất một ô có dữ liệu khác 0)
3. Nếu trong các cột từ E đến M của dòng nào không có ô nào có dữ liệu thì không đánh số (bây giờ sửa lại là không có ô nào có dữ liệu khác 0)

Nếu một dòng có dữ liệu là (30, -20, 10, 0, 0, 0) thì công thức của bạn không đánh số thứ tự. Như vậy có đung theo ý đồ của bạn không?

Code như thế nào là tùy vào dữ liệu. Không thể nào lường hết tất cả các trường hợp được. Code rườm rà mà hiệu quả không cao.
 
Upvote 0
Anh Huuthang_bd và Thầy cô và anh chị sửa giúp tiếp giùm em
Nếu ở một hàng của cột E:M có số 0, thì nó vẫn đánh số thứ tự, Trong khi điều kiện của em là ( ví dụ SUM(E10:M10) =0) Thì không đánh số.
Em cảm ơn
Thử với Code này xem.
Nguyên tắc: Cột B là Number thì đánh số La Mã. Tổng từ Cột E sang phải >0 mới đánh số, <=0 thì không đánh.
Chú ý: Không nhập chữ CỘNG vào dưới cột B.
 

File đính kèm

Upvote 0
Em xin lỗi vì không đưa File thực tế lên, nên làm mất thời gian của Thầy cô & anh chị
(Em đưa File giả định tổng quát để em có thể áp dụng cho các trường hợp khác)

1/File thực tế của em cũng chạy code và sau đó em cho thành .Value=.Value
1. Nếu trong các cột từ E đến M của dòng nào có ít nhất một ô chứa công thức thì đánh số thứ tự là số La Mã
Hèn chi, khi em áp vào file thực tế thì nó không tạo số La Mã (cứ đang ngẫm nghĩ code cua anh để áp dụng cho các File khác)
Em nghĩ anh nên dựa vào cell nào ở cột B là các số tự nhiên (như 1, 111, 6789...) thì tạo số La Mã, vì em dùng số tự nhiên để tạo Mã của các lớp

2/ Các cells ở từ cột E đến cột M có các giá trị >0; =0; ="" mà thôi, nên em mới có điều kiện
SUM(En:Mn)=0
Em cảm ơn!
 
Upvote 0
Web KT

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

Back
Top Bottom