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
Bạn thử: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!
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
Thử File.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!
Anh có thể nói rõ hơn để em hiểu.Xui mà cột B trong file có 1 cell bị lỗi thì mấy code ở trên tiêu hết
Thì bạn cứ gõ đại vào cell nào đó ở cột B công thức =NA() (hay cái gì đó để tạo ra lỗi). Xong chạy code là biết chứ gìAnh có thể nói rõ hơn để em hiểu.
Cảm ơn anh.
Cám ơn mọi người và be09 nhiều.Thử File.
Bạn kiểm tra thử File.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: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!
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
Đâ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 saiChà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
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
Tôi thấy không bị lỗi như bạn nói( Tôi dùng Excel 2010)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
Dạ, cám ơn thầy ndu96081631 nhiềuĐâ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
Em thường làm vầy.Đâ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
aSrc = Sheet1.Range("B1", Sheet1.Range("B60000").End(xlUp).Offset(1)).Value
For i = 2 To UBound(aSrc, 1) - 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2