Đánh số thứ tự trong VBA (2 người xem)

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

bongmaihung

Thành viên hoạt động
Tham gia
7/8/14
Bài viết
173
Được thích
39
Em có file đính kèm cần đánh số thứ tự bằng VBA trong sheet PNK. Bằng excel thì em đã thực hiện được rồi ah
Nhờ anh chị giúp đỡ ah
Mã:
[COLOR=#000000][COLOR=#0000BB]Sub STT[/COLOR][COLOR=#007700]()
  [/COLOR][COLOR=#0000BB]With Range[/COLOR][COLOR=#007700]([[/COLOR][COLOR=#0000BB]C7[/COLOR][COLOR=#007700]], [[/COLOR][COLOR=#0000BB]C65536[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700])).[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700](, -[/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700])
    .[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"=IF(RC[2]="""","""",COUNTA(R7C3:RC3))"
    [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= .[/COLOR][COLOR=#0000BB]Value
  End With
End Sub  [/COLOR][/COLOR]
em thử thêm đoạn code sau của Thầy ndu vào nhưng chưa được ah
Mã:
Sub PNX()
Dim Rng(), i As Long, KQ(1 To 10000, 1 To 8), k As Long
Dim clls As Range
With Sheets("BK NXT")
Rng = .Range(.[A41], .[A65000].End(3)).Resize(, 20).Value2
End With
With Sheets("PNK")
    .Range(.[B14], .[B65536].End(xlUp)).Offset(, -1)
    .Value = "=IF(RC[2]="""","""",COUNTA(R14C2:RC2))"
    .Value = .Value
    .Range("A14:H650").ClearContents
    .Range("A14:H650").EntireRow.Hidden = False
k = 0
For i = 1 To UBound(Rng)
    If Rng(i, 1) = .Range("D6").Value2 Then
        k = k + 1
        KQ(k, 2) = Rng(i, 6)
        KQ(k, 3) = Rng(i, 7)
        KQ(k, 4) = Rng(i, 8)
        
    End If
Next
If k Then
    .Range("A14").Resize(k, 8).Value = KQ
    .Range("a" & k + 14, "h650").EntireRow.Hidden = True
    
End If
 End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Mã:
Sub PNX()
Dim Rng(), i As Long, KQ(1 To 10000, 1 To 8), k As Long, n As Long
Dim clls As Range
On Error Resume Next
With Sheets("BK NXT")
Rng = .Range(.[A41], .[A65000].End(3)).Resize(, 20).Value2
End With
With Sheets("PNK")
  
Set SrcRng = .Range(.[B14], .[B65536].End(xlUp))
  Arr = SrcRng.Value
   For j = 1 To UBound(Arr, 1)
    If Arr(j, 1) <> "" Then
      n = n + 1
      Arr(j, 1) = n
    End If
Next
    .Range("A14:H650").ClearContents
    .Range("A14:H650").EntireRow.Hidden = False
k = 0
For i = 1 To UBound(Rng)
    If Rng(i, 1) = .Range("D6").Value2 Then
        k = k + 1
        KQ(k, 2) = Rng(i, 6)
        KQ(k, 3) = Rng(i, 7)
        KQ(k, 4) = Rng(i, 8)
       
    End If
Next

If k Then
    .Range("A14").Resize(k, 8).Value = KQ
    .Range("a" & k + 14, "h650").EntireRow.Hidden = True
    SrcRng.Offset(, -1).Value = Arr
   
End If
 End With
End Sub
Em thử thế này cũng ra, nhưng chạy lâu mà thấy chưa hợp lý lắm
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Sub PNX()
Dim Rng(), i As Long, KQ(1 To 10000, 1 To 8), k As Long, n As Long
Dim clls As Range
On Error Resume Next
With Sheets("BK NXT")
Rng = .Range(.[A41], .[A65000].End(3)).Resize(, 20).Value2
End With
With Sheets("PNK")
  
Set SrcRng = .Range(.[B14], .[B65536].End(xlUp))
  Arr = SrcRng.Value
   For j = 1 To UBound(Arr, 1)
    If Arr(j, 1) <> "" Then
      n = n + 1
      Arr(j, 1) = n
    End If
    .Range("A14:H650").ClearContents
    .Range("A14:H650").EntireRow.Hidden = False
k = 0
For i = 1 To UBound(Rng)
    If Rng(i, 1) = .Range("D6").Value2 Then
        k = k + 1
        KQ(k, 2) = Rng(i, 6)
        KQ(k, 3) = Rng(i, 7)
        KQ(k, 4) = Rng(i, 8)
       
    End If
Next
Next
If k Then
    .Range("A14").Resize(k, 8).Value = KQ
    .Range("a" & k + 14, "h650").EntireRow.Hidden = True
    SrcRng.Offset(, -1).Value = Arr
   
End If
 End With
End Sub
Em thử thế này cũng ra, nhưng chạy lâu mà thấy chưa hợp lý lắm
Bạn muốn mỗi lần có dữ liệu là sẽ tự động đánh số thứ tự hay như thế nào? Phải nói rõ ra chứ có phải ai cũng hiểu bạn nghĩ gì đâu?
 
Upvote 0
Bạn muốn mỗi lần có dữ liệu là sẽ tự động đánh số thứ tự hay như thế nào? Phải nói rõ ra chứ có phải ai cũng hiểu bạn nghĩ gì đâu?
Vâng anh nói đúng đấy ah
Ví dụ: PNK số 1 có 3 mặt hàng thì số thứ tự là 1.2,3
PNK số 2 có 2 mặt hàng thì số thứ tự là 1,2
 
Upvote 0
1/ Bạn có vẻ chưa biết nhiều về VBA thì dùng Code sẽ khó cho bạn chỉnh sửa theo ý.

2/ Cái này của bạn có thể dùng công thức là được nhưng do không biết khi nào là xuất, khi nào là nhập nên tôi gợi ý công thức để bạn thêm điều kiện xuất nhập.
Mã:
=COUNTIF($D$41:$D41,D41) & "/" & COUNTIF($D$41:$D$45,D41)

3/ Nếu vẫn muốn dùng Macro thì thao tác bằng tay viết công thức mục 2 sau đó kéo hết dữ liệu rồi paste value vào cũng có thể tạm dùng
 
Upvote 0
Vâng anh nói đúng đấy ah
Ví dụ: PNK số 1 có 3 mặt hàng thì số thứ tự là 1.2,3
PNK số 2 có 2 mặt hàng thì số thứ tự là 1,2
Bạn dùng đoạn code này thử xem sao?
Mã:
Private Sub STT()
Dim rng As Range, i As Long, tt As Long
Set rng = Sheet2.Range("A13:C" & Sheet2.Range("C65500").End(xlUp).Row)
    For i = 1 To rng.Rows.Count
        If rng(i, 2) <> "" And rng(i, 3) <> "" Then
            tt = tt + 1
            rng(i, 1) = tt
        End If
    Next i
End Sub
 
Upvote 0
Vâng anh nói đúng đấy ah
Ví dụ: PNK số 1 có 3 mặt hàng thì số thứ tự là 1.2,3
PNK số 2 có 2 mặt hàng thì số thứ tự là 1,2

ở đoạn này (trong file kèm bài #1)
PHP:
        k = k + 1
        KQ(k, 2) = Rng(i, 6)

bổ sung lệnh này vào
PHP:
  KQ(k, 1) = k

Được như sau
PHP:
       k = k + 1
        KQ(k, 1) = k
        KQ(k, 2) = Rng(i, 6)

Dùng code, mà k biết gì, bạn không sợ sai ah, hãy học để tự tin sử dụng code, và sửa theo ý mình được

code không biết ai viết cho bạn mà lộ cộ lắm, nhiều cái thừa, cái thiếu
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn dùng đoạn code này thử xem sao?
Mã:
Private Sub STT()
Dim rng As Range, i As Long, tt As Long
Set rng = Sheet2.Range("A13:C" & Sheet2.Range("C65500").End(xlUp).Row)
    For i = 1 To rng.Rows.Count
        If rng(i, 2) <> "" And rng(i, 3) <> "" Then
            tt = tt + 1
            rng(i, 1) = tt
        End If
    Next i
End Sub

Công thức của anh nhìn em nghĩ chắc là chạy tốt roài nhưng em muốn kết hợp cùng code giống kiểu bài 2
Code bài #2 em sửa lại lần sau cùng chạy cùng ok nhưng ko biết có cách nào nhành và hợp lý hơn ko anh
 
Upvote 0
ở đoạn này (trong file kèm bài #1)
PHP:
        k = k + 1
        KQ(k, 2) = Rng(i, 6)

bổ sung lệnh này vào
PHP:
  KQ(k, 1) = k

Được như sau
PHP:
       k = k + 1
        KQ(k, 1) = k
        KQ(k, 2) = Rng(i, 6)

Dùng code, mà k biết gì, bạn không sợ sai ah, hãy học để tự tin sử dụng code, và sửa theo ý mình được

code không biết ai viết cho bạn mà lộ cộ lắm, nhiều cái thừa, cái thiếu
Code này em tham khảo trên mạng thôi
Nói chung là em vẫn tự chế được, nếu anh có cách hay hơn có thẻw sửa lại để em tham khảo nhé
Nhiều lúc ko có thòi gian nên trong h làm tranh thủ thôi anh, nên có thể thừa thiếu như anh nói

Mã:
k = k + 1
        KQ(k, 1) = k
        KQ(k, 2) = Rng(i, 6)[/PHP]
Đoạn này như anh nói nếu như vậy em nghĩ ko ra được số thứ tự ở sheet PNK
 
Upvote 0
1/ Bạn có vẻ chưa biết nhiều về VBA thì dùng Code sẽ khó cho bạn chỉnh sửa theo ý.

2/ Cái này của bạn có thể dùng công thức là được nhưng do không biết khi nào là xuất, khi nào là nhập nên tôi gợi ý công thức để bạn thêm điều kiện xuất nhập.
Mã:
=COUNTIF($D$41:$D41,D41) & "/" & COUNTIF($D$41:$D$45,D41)

3/ Nếu vẫn muốn dùng Macro thì thao tác bằng tay viết công thức mục 2 sau đó kéo hết dữ liệu rồi paste value vào cũng có thể tạm dùng

Anh nói ko sai, em ko biết nhiều về code, Em tìm hiểu VBA chủ yêu phục vụ nhu cầu cụ thể thôi ah, thỉnh thoảng mới dùng đến thôi ah
Nếu anh có code hay cho bài này thì nhờ anh giúp ah. Em có thể hiểu và tự sửa cho file thật của em. File thật của em , em đã test thử cũng thành công ah
 
Upvote 0
ở đoạn này (trong file kèm bài #1)
PHP:
        k = k + 1
        KQ(k, 2) = Rng(i, 6)

bổ sung lệnh này vào
PHP:
  KQ(k, 1) = k

Được như sau
PHP:
       k = k + 1
        KQ(k, 1) = k
        KQ(k, 2) = Rng(i, 6)

Dùng code, mà k biết gì, bạn không sợ sai ah, hãy học để tự tin sử dụng code, và sửa theo ý mình được

code không biết ai viết cho bạn mà lộ cộ lắm, nhiều cái thừa, cái thiếu
Ở bài viết, chủ topic đã bảo là code của bác ndu rồi mà.
 
Upvote 0
Anh nói ko sai, em ko biết nhiều về code, Em tìm hiểu VBA chủ yêu phục vụ nhu cầu cụ thể thôi ah, thỉnh thoảng mới dùng đến thôi ah
Nếu anh có code hay cho bài này thì nhờ anh giúp ah. Em có thể hiểu và tự sửa cho file thật của em. File thật của em , em đã test thử cũng thành công ah
Bạn nói rõ yêu cầu của bạn ra thì mọi người mới giúp được bạn chứ!
 
Upvote 0
Bạn nói rõ yêu cầu của bạn ra thì mọi người mới giúp được bạn chứ!

Em đã dùng code bài #2 để ra được phiếu nhập ( nhưng em chỉ làm 3 cột vì file giả lập thôi ah) và vướng ớ cách đánh số thứ tự tự động trong VBA
Tóm lại là em muốn như bài #2 anh nhé, bài #2 sau khi sửa lại em test cũng đã thành công. Nhờ anh chỉ sửa lại code bài 2 cho nhanh và hợp lý hơn ah
Hoặc anh chị có thể viết giúp em một code cũng được ah
 
Upvote 0
Code này em tham khảo trên mạng thôi
Nói chung là em vẫn tự chế được, nếu anh có cách hay hơn có thẻw sửa lại để em tham khảo nhé
Nhiều lúc ko có thòi gian nên trong h làm tranh thủ thôi anh, nên có thể thừa thiếu như anh nói

Mã:
k = k + 1
        KQ(k, 1) = k
        KQ(k, 2) = Rng(i, 6)[/PHP]
Đoạn này như anh nói nếu như vậy em nghĩ ko ra được số thứ tự ở sheet PNK

Bạn muốn kết quả ở ô nào sheet nào

không phải thứ tự 1, 2,3 ....

thì thứ thế nào, tôi chưa hiểu, vậy giải thích lại nghe

(bạn không có thời gian, thì người khác có chăng, vậy để tiết kiệm thời gian, thì nên hỏi cho rõ ràng)
 
Upvote 0
Bạn muốn kết quả ở ô nào sheet nào

không phải thứ tự 1, 2,3 ....

thì thứ thế nào, tôi chưa hiểu, vậy giải thích lại nghe
Sorry anh, em đã sửa lại KQ(k,1)=k đã được số thứ tự tự đồng rồi ah
Cảm ơn anh nhé

(bạn không có thời gian, thì người khác có chăng, vậy để tiết kiệm thời gian, thì nên hỏi cho rõ ràng)

Sorry anh, em đã sửa lại KQ(k,1)=k đã được số thứ tự tự đồng rồi ah
Cảm ơn anh nhé
Mã:
bạn không có thời gian, thì người khác có chăng, vậy để tiết kiệm thời gian, thì nên hỏi cho rõ ràng
Em nghĩ cái này là chưa hiểu nhau thôi ah, chứ ko có ý như anh nói đâu, Em rất tôn trọng mọi người
Cảm ơn anh chị quan tâm đến bài em viết. Do em diễn giải chưa được trôi thôi ah
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Sub PNX()
Dim Rng(), i As Long, KQ(1 To 10000, 1 To 8), k As Long
With Sheets("BK NXT")
Rng = .Range(.[A41], .[A65000].End(3)).Resize(, 20).Value2
End With
With Sheets("PNK")
   

    .Range("A14:H650").ClearContents
    .Range("A14:H650").EntireRow.Hidden = False
k = 0
For i = 1 To UBound(Rng)
    If Rng(i, 1) = .Range("D6").Value2 Then
        k = k + 1
        KQ(k, 1) = k
        KQ(k, 2) = Rng(i, 6)
        KQ(k, 3) = Rng(i, 7)
        KQ(k, 4) = Rng(i, 8)
        
    End If
Next

If k Then
    .Range("A14").Resize(k, 8).Value = KQ
    .Range("a" & k + 14, "h650").EntireRow.Hidden = True
    
    
End If
 End With
End Sub
Với gợi ý vừa bác Mưa rơi, em đổi lại thành thế này cũng rất ok ah
 
Upvote 0

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

Back
Top Bottom