[Hỏi] Cách tạo macro đánh số thứ tự theo điều kiện. (1 người xem)

  • Thread starter Thread starter tratham
  • Ngày gửi Ngày gửi
Liên hệ QC

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

tratham

Thành viên mới
Tham gia
23/5/16
Bài viết
3
Được thích
0
Chào các anh/chị. Em là thành viên mới. Em mới tập tành VBA mà gặp bài này chưa có hướng giải quyết sao. Mong mọi người giúp đỡ. File em đính kèm ở dưới. Yêu cầu là đánh số thứ tự vào cột STT theo từng nhóm A,B,C ở cột nhóm. Lưu ý là các ô của cột Nhóm có thể trống. Nếu gặp ô trống thì bỏ qua. Cảm ơn mọi người nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Nếu muốn dùng công thức thì tại ô A2 gõ như sau:
Mã:
=IF(B2="","",COUNTIF($B$1:B1,B2)+1)
Fill CT xuống.
 
Upvote 0
Chào các anh/chị. Em là thành viên mới. Em mới tập tành VBA mà gặp bài này chưa có hướng giải quyết sao. Mong mọi người giúp đỡ. File em đính kèm ở dưới. Yêu cầu là đánh số thứ tự vào cột STT theo từng nhóm A,B,C ở cột nhóm. Lưu ý là các ô của cột Nhóm có thể trống. Nếu gặp ô trống thì bỏ qua. Cảm ơn mọi người nhiều!
Thử với:
PHP:
 Sub STT()
Dim i As Long
With Sheets(1)
For i = 2 To 20
.Range("A" & i) = "=IF(RC[1]= """","""",COUNTIF(R2C2:RC[1],RC[1]))"
.Range("A" & i).Value = .Range("A" & i).Value
Next i
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Thử với:
PHP:
 Sub STT()
Dim i As Long
With Sheets(1)
For i = 2 To 20
.Range("A" & i) = "=IF(RC[1]= """","""",COUNTIF(R2C2:RC[1],RC[1]))"
.Range("A" & i).Value = .Range("A" & i).Value
Next i
End With
End Sub
Cảm ơn bạn. Code bạn đã làm đúng yêu cầu của mình. Mình mới học VBA nên còn mù mờ lắm. Bạn có thể giải thích giúp mình đc k. Mình tìm hiểu nảy h mà cũng chưa tìm cách đánh số các cột khác (giả sử mình muốn đánh số thứ tự vào cột D hoặc thứ tự của 1 cột bất kỳ chẳng hạn).
 
Upvote 0
Cảm ơn bạn. Code bạn đã làm đúng yêu cầu của mình. Mình mới học VBA nên còn mù mờ lắm. Bạn có thể giải thích giúp mình đc k. Mình tìm hiểu nảy h mà cũng chưa tìm cách đánh số các cột khác (giả sử mình muốn đánh số thứ tự vào cột D hoặc thứ tự của 1 cột bất kỳ chẳng hạn).
Thật ra cách viết code ở bài 3 không khác gì cách ở bài 2 đâu, chỉ có điều là các ô nó chứa giá trị còn bài 2 các ô chứa công thức.
Muốn thay đổi cột thì chú ý vào những chổ tôi tô đỏ đó bạn.
Mã:
[FONT=monospace][I]Sub STT[/I][/FONT][FONT=monospace][I]()
[/I][/FONT][FONT=monospace][I]Dim i [/I][/FONT][FONT=monospace][I]As [/I][/FONT][FONT=monospace][I]Long
With Sheets[/I][/FONT][FONT=monospace][I]([/I][/FONT][FONT=monospace][I]1[/I][/FONT][FONT=monospace][I])
For [/I][/FONT][FONT=monospace][I]i [/I][/FONT][FONT=monospace][I]= [/I][/FONT][FONT=monospace][I]2 To 20
[/I][/FONT][FONT=monospace][I].[/I][/FONT][FONT=monospace][I]Range[/I][/FONT][FONT=monospace][I]([/I][/FONT][FONT=monospace][I]"A" [/I][/FONT][FONT=monospace][I]& [/I][/FONT][FONT=monospace][I]i[/I][/FONT][FONT=monospace][I]) = [/I][/FONT][FONT=monospace][I]"=IF([COLOR=#ff0000][B]RC[1][/B][/COLOR]= """","""",COUNTIF([B][COLOR=#ff0000]R2C2:RC[1][/COLOR][/B],[B][COLOR=#ff0000]RC[1][/COLOR][/B]))"
[/I][/FONT][FONT=monospace][I].[/I][/FONT][FONT=monospace][I]Range[/I][/FONT][FONT=monospace][I]([/I][/FONT][FONT=monospace][I]"A" [/I][/FONT][FONT=monospace][I]& [/I][/FONT][FONT=monospace][I]i[/I][/FONT][FONT=monospace][I]).[/I][/FONT][FONT=monospace][I]Value [/I][/FONT][FONT=monospace][I]= .[/I][/FONT][FONT=monospace][I]Range[/I][/FONT][FONT=monospace][I]([/I][/FONT][FONT=monospace][I]"A" [/I][/FONT][FONT=monospace][I]& [/I][/FONT][FONT=monospace][I]i[/I][/FONT][FONT=monospace][I]).[/I][/FONT][FONT=monospace][I]Value
Next i
End With
End Sub  [/I][/FONT][COLOR=#0000BB][FONT=monospace][I]
[/I][/FONT][/COLOR]
 
Upvote 0
Thật ra cách viết code ở bài 3 không khác gì cách ở bài 2 đâu, chỉ có điều là các ô nó chứa giá trị còn bài 2 các ô chứa công thức.
Muốn thay đổi cột thì chú ý vào những chổ tôi tô đỏ đó bạn.
Mã:
[FONT=monospace][I]Sub STT[/I][/FONT][FONT=monospace][I]()
[/I][/FONT][FONT=monospace][I]Dim i [/I][/FONT][FONT=monospace][I]As [/I][/FONT][FONT=monospace][I]Long
With Sheets[/I][/FONT][FONT=monospace][I]([/I][/FONT][FONT=monospace][I]1[/I][/FONT][FONT=monospace][I])
For [/I][/FONT][FONT=monospace][I]i [/I][/FONT][FONT=monospace][I]= [/I][/FONT][FONT=monospace][I]2 To 20
[/I][/FONT][FONT=monospace][I].[/I][/FONT][FONT=monospace][I]Range[/I][/FONT][FONT=monospace][I]([/I][/FONT][FONT=monospace][I]"A" [/I][/FONT][FONT=monospace][I]& [/I][/FONT][FONT=monospace][I]i[/I][/FONT][FONT=monospace][I]) = [/I][/FONT][FONT=monospace][I]"=IF([COLOR=#ff0000][B]RC[1][/B][/COLOR]= """","""",COUNTIF([B][COLOR=#ff0000]R2C2:RC[1][/COLOR][/B],[B][COLOR=#ff0000]RC[1][/COLOR][/B]))"
[/I][/FONT][FONT=monospace][I].[/I][/FONT][FONT=monospace][I]Range[/I][/FONT][FONT=monospace][I]([/I][/FONT][FONT=monospace][I]"A" [/I][/FONT][FONT=monospace][I]& [/I][/FONT][FONT=monospace][I]i[/I][/FONT][FONT=monospace][I]).[/I][/FONT][FONT=monospace][I]Value [/I][/FONT][FONT=monospace][I]= .[/I][/FONT][FONT=monospace][I]Range[/I][/FONT][FONT=monospace][I]([/I][/FONT][FONT=monospace][I]"A" [/I][/FONT][FONT=monospace][I]& [/I][/FONT][FONT=monospace][I]i[/I][/FONT][FONT=monospace][I]).[/I][/FONT][FONT=monospace][I]Value
Next i
End With
End Sub  [/I][/FONT][COLOR=#0000BB][FONT=monospace][/FONT][/COLOR]
Mình đã tim hiểu rồi. Đã biết cách code hoạt động rồi. Cảm ơn các bạn nhiều lắm
 
Upvote 0
Cảm ơn bạn. Code bạn đã làm đúng yêu cầu của mình. Mình mới học VBA nên còn mù mờ lắm. Bạn có thể giải thích giúp mình đc k. Mình tìm hiểu nảy h mà cũng chưa tìm cách đánh số các cột khác (giả sử mình muốn đánh số thứ tự vào cột D hoặc thứ tự của 1 cột bất kỳ chẳng hạn).
Để đánh SST tại cột D, bạn thay dòng:
HTML:
.Range("A" & i) = "=IF(RC[1]= """","""",COUNTIF(R2C2:RC[1],RC[1])")

thành dòng:
HTML:
.Range("D" & i) = "=IF(RC[-2]= """","""",COUNTIF(R2C2:RC[-2],RC[-2]))"
 
Upvote 0
Em xin cám ơn code của Bác Phulien1902, nay em chỉnh lại một chút để không lệ thuộc vào For 2 to 20 ah:
Code như sau:
Sub TaoSTTtheoNhom()
Dim i As Long

Dim LastRow As Long
If WorksheetFunction.CountA(Cells) > 0 Then
'Search for any entry, by searching backwards by Rows.
LastRow = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
'MsgBox LastRow​
End If

With ActiveSheet
'With Sheets(1)
For i = 2 To LastRow
.Range("A" & i) = "=IF(RC[1]= """","""",COUNTIF(R2C2:RC[1],RC[1]))"
.Range("A" & i).Value = .Range("A" & i).Value​
Next i​
End With​
End Sub
 
Upvote 0
Em xin cám ơn code của Bác Phulien1902, nay em chỉnh lại một chút để không lệ thuộc vào For 2 to 20 ah:
Code như sau:
Sub TaoSTTtheoNhom()
Dim i As Long

Dim LastRow As Long
If WorksheetFunction.CountA(Cells) > 0 Then
'Search for any entry, by searching backwards by Rows.
LastRow = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
'MsgBox LastRow
End If

With ActiveSheet
'With Sheets(1)
For i = 2 To LastRow
.Range("A" & i) = "=IF(RC[1]= """","""",COUNTIF(R2C2:RC[1],RC[1]))"
.Range("A" & i).Value = .Range("A" & i).Value​
Next i​
End With​
End Sub
Bạn thay cả cụm màu đỏ bằng dòng:
HTML:
LastRow = ActiveSheet.Range("b" & Rows.Count).End(xlUp).Row

Xem có OK không nhé
 
Upvote 0
Các bạn cho mình hỏi chút: Cùng trường hợp trên nhưng số thứ tự đánh tự động như sau:Nếu hàng đầu tiên của cột B là số 5 chẳng hạn thì cột số TT là 1 những hàng kế tiếp đều là 5 thì bỏ trống, chỉ khi nào hàng kế tiếp là số khác số trước thì cột thứ tự sẽ tự nhảy lên số thứ tự tiếp theo.
 

File đính kèm

Upvote 0
Các bạn cho mình hỏi chút: Cùng trường hợp trên nhưng số thứ tự đánh tự động như sau:Nếu hàng đầu tiên của cột B là số 5 chẳng hạn thì cột số TT là 1 những hàng kế tiếp đều là 5 thì bỏ trống, chỉ khi nào hàng kế tiếp là số khác số trước thì cột thứ tự sẽ tự nhảy lên số thứ tự tiếp theo.
Ô A2 gõ công thức như sau:
Mã:
=IF(COUNTIF($B$1:B1,B2)<>0,"",MAX($A$1:A1)+1)
Fill xuống
 
Upvote 0
Em cũng có vấn đề tương tự chỉ khác chút đỉnh là, em cần tạo một số thứ tự tăng dần nhưng có điều kiện là tên khách hàng và ngày lấy giống nhau thì cùng mã số thứ tự, nếu khác nhau thì tự động tăng lên một đơn vị, em có đính kèm file ô thứ tự em tô màu đỏ, mấy anh/chị cao thủ giúp với, em mò vài ngày vẫn chưa ra!
 

File đính kèm

Upvote 0
Em cũng có vấn đề tương tự chỉ khác chút đỉnh là, em cần tạo một số thứ tự tăng dần nhưng có điều kiện là tên khách hàng và ngày lấy giống nhau thì cùng mã số thứ tự, nếu khác nhau thì tự động tăng lên một đơn vị, em có đính kèm file ô thứ tự em tô màu đỏ, mấy anh/chị cao thủ giúp với, em mò vài ngày vẫn chưa ra!
Ô A2 gõ công thức như sau:
Mã:
=IF(COUNTIF($B$1:B1,B2)=0,1,0)+MAX($A$1:A1)
Fill xuống
 
Upvote 0
Ô A2 gõ công thức như sau:
Mã:
=IF(COUNTIF($B$1:B1,B2)=0,1,0)+MAX($A$1:A1)
Fill xuống
Em cám ơn bác mà cho em tham xíu, nếu em muốn ô đánh số là 001,002,.. thì làm sao ạ, vì em muốn các số này là hóa đơn để em quản lý khách hàng nên phải như vậy mới dễ truy xuất dữ liệu ạ!
 
Upvote 0
Em cám ơn bác mà cho em tham xíu, nếu em muốn ô đánh số là 001,002,.. thì làm sao ạ, vì em muốn các số này là hóa đơn để em quản lý khách hàng nên phải như vậy mới dễ truy xuất dữ liệu ạ!
Ban quét vùng chọn cần định dạng, nhấn Ctrl+1, sau đó gõ định dạng như hình.
Hinh.jpg
 
Upvote 0
Web KT

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

Back
Top Bottom