Tạo số thứ tự bằng VBA

Liên hệ QC

MeThuongNho

Thành viên thường trực
Tham gia
30/10/09
Bài viết
368
Được thích
77
Nghề nghiệp
Sale - Planning
Em có file này : không dùng hàm; chỉ dùng VBA mong Anh/Chị chỉ giúp.
Tạo số thứ tự tại cột A (kèm text phía trước số thứ tự là MBG và số thứ tự), điều kiện cột B có dữ liệu.
Kết quả tham khảo cột D.
Cám ơn mọi người nhiều!
 

File đính kèm

  • Sothutu.xlsm
    8.2 KB · Đọc: 21
Em có file này : không dùng hàm; chỉ dùng VBA mong Anh/Chị chỉ giúp.
Tạo số thứ tự tại cột A (kèm text phía trước số thứ tự là MBG và số thứ tự), điều kiện cột B có dữ liệu.
Kết quả tham khảo cột D.
Cám ơn mọi người nhiều!
Bạn thử:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i
    If Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub
    For i = 2 To Range("B" & Rows.Count).End(xlUp).Row
        If Range("B" & i) = "" Then
        Range("A" & i) = ""
        Else
        Range("A" & i) = "MBG" & Application.WorksheetFunction.CountA(Range("B2:B" & i))
        End If
    Next i
End Sub
 
Upvote 0
Em có file này : không dùng hàm; chỉ dùng VBA mong Anh/Chị chỉ giúp.
Tạo số thứ tự tại cột A (kèm text phía trước số thứ tự là MBG và số thứ tự), điều kiện cột B có dữ liệu.
Kết quả tham khảo cột D.
Cám ơn mọi người nhiều!
Thử File.
 

File đính kèm

  • Sothutu.xlsm
    16 KB · Đọc: 17
Upvote 0
Cám ơn mọi người và be09 nhiều.
Em muốn thêm điều kiện.
Sau khi có số thứ tự rồi. Em muốn VBA trong code số thứ tự đó sửa thế nào để :
" lấy được số thứ tự cuối cùng được tạo ra đó paste vào cell D3 của sheet 2" ( chung code Sothutu luôn )
( Nếu sử dụng công thức thì em sử dụng công thứ max số lớn nhất của số thứ tự, hoặc tìm giá trị cuối cùng của cột A | nhưng em thích VBA hơn)
Trân trọng!
 

File đính kèm

  • Sothutu.xlsm
    18.4 KB · Đọc: 5
Upvote 0
Cám ơn mọi người và be09 nhiều.
Em muốn thêm điều kiện.
Sau khi có số thứ tự rồi. Em muốn VBA trong code số thứ tự đó sửa thế nào để :
" lấy được số thứ tự cuối cùng được tạo ra đó paste vào cell D3 của sheet 2" ( chung code Sothutu luôn )
( Nếu sử dụng công thức thì em sử dụng công thứ max số lớn nhất của số thứ tự, hoặc tìm giá trị cuối cùng của cột A | nhưng em thích VBA hơn)
Trân trọng!
Bạn kiểm tra thử File.
 

File đính kèm

  • Sothutu 2.xlsm
    20.6 KB · Đọc: 12
Upvote 0
Cám ơn mọi người và be09 nhiều.
Em muốn thêm điều kiện.
Sau khi có số thứ tự rồi. Em muốn VBA trong code số thứ tự đó sửa thế nào để :
" lấy được số thứ tự cuối cùng được tạo ra đó paste vào cell D3 của sheet 2" ( chung code Sothutu luôn )
( Nếu sử dụng công thức thì em sử dụng công thứ max số lớn nhất của số thứ tự, hoặc tìm giá trị cuối cùng của cột A | nhưng em thích VBA hơn)
Trân trọng!
Thí nghiệm cái coi:
Mã:
Sub STT()
  Dim aSrc
  Dim i As Long, n As Long
  With Sheet1.Range("B2", Sheet1.Range("B60000").End(xlUp))
    aSrc = .Value
    ReDim aDes(1 To UBound(aSrc, 1), 1 To 1)
    For i = 1 To UBound(aSrc, 1)
      If TypeName(aSrc(i, 1)) <> "Error" Then
        If Len(aSrc(i, 1)) Then
          n = n + 1
          aDes(i, 1) = "MBG" & n
        End If
      End If
    Next
    If n Then
      .Offset(, -1).Value = aDes
      Sheet2.Range("D3").Value = "MBG" & n
    End If
  End With
End Sub
Giải quyết tình trạng lỗi như đã nói ở trên (ví dụ gõ vào cell B5 công thức =1/0 rồi chạy code)
 
Upvote 0
Cám ơn be09 và Thầy ndu96081631 nhiều.
EM giải quyết được vấn đề rồi.
Trân trọng!
 
Upvote 0
Chào Thầy ndu96081631, be09 và mọi người;
Xem giúp em code lỗi do code sai chỗ nào với ah.
Khi ô B2 có dữ liệu thì code bị lỗi.
Nhưng tiếp tục nhập B3 trở đi thì chạy code không lỗi nữa.
Trân trọng
 

File đính kèm

  • tao ma.xlsm
    18.1 KB · Đọc: 14
Lần chỉnh sửa cuối:
Upvote 0
Chào Thầy ndu96081631, be09 và mọi người;
Xem giúp em code lỗi do code sai chỗ nào với ah.
Khi ô B2 có dữ liệu thì code bị lỗi.
Nhưng tiếp tục nhập B3 trở đi thì chạy code không lỗi nữa.
Trân trọng
Đây là lỗi "chết người" mà cứ lâu lâu lại quên. Nguyên nhân là vì: Mảng aSrc được tạo ra từ Range (vùng dữ liệu) nhưng nếu vùng dữ liệu chỉ có 1 cell thì nó không thể là mảng ---> Dẫn đến toàn bộ code phía sau đó đều sai
Sửa lại:
Mã:
Sub MaBG()
  Dim aSrc
  Dim i As Long, n As Long
  With Sheet1.Range("B2", Sheet1.Range("B60000").End(xlUp))
    aSrc = .Value
    If TypeName(aSrc) <> "Variant()" Then
      ReDim aSrc(1 To 1, 1 To 1)
      aSrc(1, 1) = .Value
    End If
    ReDim aDes(1 To UBound(aSrc, 1), 1 To 1)
    For i = 1 To UBound(aSrc, 1)
      If TypeName(aSrc(i, 1)) <> "Error" Then
        If Len(aSrc(i, 1)) Then
          n = n + 1
          aDes(i, 1) = "BGQS_" & n
        End If
      End If
    Next
    If n Then
      .Offset(, -1).Value = aDes
    End If
  End With
End Sub
 
Upvote 0
Upvote 0
Đây là lỗi "chết người" mà cứ lâu lâu lại quên. Nguyên nhân là vì: Mảng aSrc được tạo ra từ Range (vùng dữ liệu) nhưng nếu vùng dữ liệu chỉ có 1 cell thì nó không thể là mảng ---> Dẫn đến toàn bộ code phía sau đó đều sai
Sửa lại:
Mã:
Sub MaBG()
  Dim aSrc
  Dim i As Long, n As Long
  With Sheet1.Range("B2", Sheet1.Range("B60000").End(xlUp))
    aSrc = .Value
    If TypeName(aSrc) <> "Variant()" Then
      ReDim aSrc(1 To 1, 1 To 1)
      aSrc(1, 1) = .Value
    End If
    ReDim aDes(1 To UBound(aSrc, 1), 1 To 1)
    For i = 1 To UBound(aSrc, 1)
      If TypeName(aSrc(i, 1)) <> "Error" Then
        If Len(aSrc(i, 1)) Then
          n = n + 1
          aDes(i, 1) = "BGQS_" & n
        End If
      End If
    Next
    If n Then
      .Offset(, -1).Value = aDes
    End If
  End With
End Sub
Dạ, cám ơn thầy ndu96081631 nhiều
Code đã hoàn thiện.
Trân trọng!
 
Upvote 0
Đây là lỗi "chết người" mà cứ lâu lâu lại quên. Nguyên nhân là vì: Mảng aSrc được tạo ra từ Range (vùng dữ liệu) nhưng nếu vùng dữ liệu chỉ có 1 cell thì nó không thể là mảng ---> Dẫn đến toàn bộ code phía sau đó đều sai
Sửa lại:
Mã:
Sub MaBG()
  Dim aSrc
  Dim i As Long, n As Long
  With Sheet1.Range("B2", Sheet1.Range("B60000").End(xlUp))
    aSrc = Sheet1.Range("B2", Sheet1.Range("B60000").End(xlUp)).Value
    If TypeName(aSrc) <> "Variant()" Then
      ReDim aSrc(1 To 1, 1 To 1)
      aSrc(1, 1) = .Value
    End If
    ReDim aDes(1 To UBound(aSrc, 1), 1 To 1)
    For i = 1 To UBound(aSrc, 1)
      If TypeName(aSrc(i, 1)) <> "Error" Then
        If Len(aSrc(i, 1)) Then
          n = n + 1
          aDes(i, 1) = "BGQS_" & n
        End If
      End If
    Next
    If n Then
      .Offset(, -1).Value = aDes
    End If
  End With
End Sub
Em thường làm vầy.
Mã:
    aSrc = Sheet1.Range("B1", Sheet1.Range("B60000").End(xlUp).Offset(1)).Value
    For i = 2 To UBound(aSrc, 1) - 1
 
Upvote 0
Web KT
Back
Top Bottom