VD: C7 có dữ liệu thì là 1Bạn ơi, cho hỏi có phải đánh số thứ tự từ A7? Và số từ A7 là 1 và số cuối cùng sẽ nhận giá trị từ C7 phải không?
Ví dụ: C7 là 450 thì đánh số từ A7 là từ 1 đến 450 phải vậy không?
Có đưa file lên thi ít ra cũng có tí dữ liệu để người ta còn mường tượng ---> 1 cái file trống không, ai biết gì đâu mà làmVD: C7 có dữ liệu thì là 1
C8 có dữ liệu thì là 2
C10 có dữ liệu thì là 3
Có dữ liệu là có STT mà tăng dần bạn.
sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry. File đâycó đưa file lên thi ít ra cũng có tí dữ liệu để người ta còn mường tượng ---> 1 cái file trống không, ai biết gì đâu mà làm
(mặc dù tôi cũng hơi hiểu ý nhưng gặp dạng file đính kèm kiểu này thì cảm thấy rất bực mình)
VD: C7 có dữ liệu thì là 1
C8 có dữ liệu thì là 2
C10 có dữ liệu thì là 3
Có dữ liệu là có STT mà tăng dần bạn.
Nhập công thức này vào cell A7:sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry. File đây
=IF(C7="","",COUNTA($C$7:$C7))
Thì vầy đi:Chính xác công thức thì OK, nhưng em muốn code anh NDU ơi!. Cảm ơn
Sub STT()
Dim SrcRng As Range, Arr, i As Long, n As Long
On Error Resume Next
Set SrcRng = Range([C7], [C65536].End(xlUp))
Arr = SrcRng.Value
For i = 1 To UBound(Arr, 1)
If Arr(i, 1) <> "" Then
n = n + 1
Arr(i, 1) = n
End If
Next
SrcRng.Offset(, -2).Value = Arr
End Sub
sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry,sorry. File đây
Sub FillSeries()
Application.ScreenUpdating = False
Dim Rng As Range, Cls As Range
Set Rng = Range(Sheet1.[C7], Sheet1.[C5000].End(xlUp))
Rng.Offset(, -2).ClearContents
For Each Cls In Rng
If Cls <> "" Then Cls.Offset(, -2) = WorksheetFunction.Max(Rng.Offset(, -2)) + 1
Next
Application.ScreenUpdating = True
End Sub
Đã dùng code rồi mà còn WorksheetFunction mà chi hổng biết, chỉ tổ chậm hơn thôiBạn thử code này xem:
PHP:If Cls <> "" Then Cls.Offset(, -2) = WorksheetFunction.Max(Rng.Offset(, -2)) + 1
Đã dùng code rồi mà còn WorksheetFunction mà chi hổng biết, chỉ tổ chậm hơn thôi
Nói về NGẮN thì cái này mới là NGẮN đây:Đúng là nhìn vào code thì ngắn hơn,
Sub STT()
With Range([C7], [C65536].End(xlUp)).Offset(, -2)
.Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))"
.Value = .Value
End With
End Sub
Bác Ơi, vậy muốn đánh số thứ tự theo ngày thì thế nào bác. Thêm 1 cột ngày nữa, và STT đánh theo ngày đó, hết ngày trước thì end và sang ngày mới thì đánh lại từ đầu.Nói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)
Nói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)
Sub STT()
With Range([b5], [b65536].End(xlUp)).Offset(, 1)
.Value = "=IF(RC2="""","""",""CC_"" & COUNTA(R5C2:RC2))"
End With
End Sub
Thì vầy đi:
PHP:Sub STT() Dim SrcRng As Range, Arr, i As Long, n As Long On Error Resume Next Set SrcRng = Range([C7], [C65536].End(xlUp)) Arr = SrcRng.Value For i = 1 To UBound(Arr, 1) If Arr(i, 1) <> "" Then n = n + 1 Arr(i, 1) = n End If Next SrcRng.Offset(, -2).Value = Arr End Sub
Biết là lâu lắm nhưng thầy giúp em với, Với code này khi sheet không có dữ liệu thì tiêu đề STT nó tự đổi thành số 1Thì vầy đi:
PHP:Sub STT() Dim SrcRng As Range, Arr, i As Long, n As Long On Error Resume Next Set SrcRng = Range([C7], [C65536].End(xlUp)) Arr = SrcRng.Value For i = 1 To UBound(Arr, 1) If Arr(i, 1) <> "" Then n = n + 1 Arr(i, 1) = n End If Next SrcRng.Offset(, -2).Value = Arr End Sub
Bỏ Private Sub Worksheet_SelectionChangesheet không có dữ liệu thì tiêu đề STT nó tự đổi thành số 1
Sub STT()
Dim SrcRng As Range, Arr, i As Long, n As Long, Res()
Dim lRow As Long
With Sheet2
lRow = .Range("G" & Rows.Count).End(xlUp).Row
If lRow < 11 Then Exit Sub
Set SrcRng = .Range("G11:H" & lRow)
Arr = SrcRng.Value
ReDim Res(1 To UBound(Arr, 1), 1 To 1)
For i = 1 To UBound(Arr, 1)
If Arr(i, 1) <> "" Then
n = n + 1
Res(i, 1) = n
End If
Next
SrcRng.Offset(, -2).Value = Res
End With
End Sub
Không được anh ơi, sửa giúp e xíu nữa được khôngBỏ Private Sub Worksheet_Selection Change
Thì vầy đi:
PHP:Sub STT() Dim SrcRng As Range, Arr, i As Long, n As Long On Error Resume Next Set SrcRng = Range([C7], [C65536].End(xlUp)) Arr = SrcRng.Value For i = 1 To UBound(Arr, 1) If Arr(i, 1) <> "" Then n = n + 1 Arr(i, 1) = n End If Next SrcRng.Offset(, -2).Value = Arr End Sub
Thì vầy đi:
PHP:Sub STT() Dim SrcRng As Range, Arr, i As Long, n As Long On Error Resume Next Set SrcRng = Range([C7], [C65536].End(xlUp)) Arr = SrcRng.Value For i = 1 To UBound(Arr, 1) If Arr(i, 1) <> "" Then n = n + 1 Arr(i, 1) = n End If Next SrcRng.Offset(, -2).Value = Arr End Sub
Để ý trong các code tôi đưa lên diễn đàn thường có dòng lệnh này. Dù đã bẫy lỗi rất kỹ nhưng vẫn cứ thêm dòng ấy vào cho chắc. Thói quen thôi bạn àXin chào ndu96081631,
Phiền bạn chỉ giúp, dòng lệnh: On Error Resume Next
trong code trên để bắt lỗi gì vậy?
Cảm ơn ndu96081631 đã thông tin.Để ý trong các code tôi đưa lên diễn đàn thường có dòng lệnh này. Dù đã bẫy lỗi rất kỹ nhưng vẫn cứ thêm dòng ấy vào cho chắc. Thói quen thôi bạn à
Cứ cái nào là biến đối tượng (như Range, Object, Shape...) thì phải khởi tạo bằng động tác Set. Không phải đối tượng thì khỏi cần SetCảm ơn ndu96081631 đã thông tin.
Phiền bạn giải thích thêm giúp OT, trong code bạn có:
Set SrcRng = Range([C7], [C65536].End(xlUp))
Arr = SrcRng.Value
và cũng có trường hợp viết:
i = .Range("C" & .Rows.Count).End(xlUp).Row
Arr = .Range("C7:C" & i).Value
Vậy trong trường hợp nào thì phải sử dụng set, trường hợp nào thì không sử dụng?
Khi sử dụng Set SrcRng thì kết thúc có phải Set SrcRng = nothing không?
Xin phép thầy, bài này lâu nhưng lại đúng ý muốn làm nhưng phát triển thêm theo kiểu này không biết có được không ạ !
" Bây giờ 1 muốn đánh dấu X vào các loại hình thức hồ sơ thì chỗ "số biên nhận" sẽ tự động đánh số thứ tự tiếp theo của hình thức đó.. Thì phải làm như thế nào ạ."
View attachment 204523
(1) Rất nên & đó là thói quen rất chi là tốt!(2) Phiền bạn chỉ giúp, dòng lệnh: On Error Resume Next trong code trên để bắt lỗi gì vậy?
(1) Khi sử dụng Set SrcRng thì kết thúc có phải Set SrcRng = nothing không?
Sub GPE()
On Error Goto LoiCT
' . . . . . Các câu lệnh'
Err_ : Exit Sub
LoiCT:
If Err=424 then
Goto Err_
Else
MsgBox Err , , Error()
On Error Resume Next
End If
End Sub
Bạn cần làm gì trong cái UserForm thân thương của bạn?nếu trong userform thì làm thế nào vậy các a/c?
Mình thiết kế userform có sẵn textbox để nhập số thứ tự, giờ mình muốn để texbox đó tự động điền số thứ tự vào vì mình ẩn workbook chỉ để hiện form nhập liệu nên không biết được dữ liệu mình nhập vào ở thứ tự bao nhiêu. Mong được các a/c trên forum hướng dẫn. Xin chân thành cảm ơn!Bạn cần làm gì trong cái UserForm thân thương của bạn?
& đầu câu sao không viết hoa?
bác cho em hỏi vậy nếu muốn đánh số thứ tự ở cột G từ ô G2 đổ xuống cho những ô có đánh dấu ở cột H thì như nào ạNói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)
Thứ nhất: Bạn phải tìm ra dòng cuối của cột 'G' (cột cần đánh số TT)bác cho em hỏi vậy nếu muốn đánh số thứ tự ở cột G từ ô G2 đổ xuống cho những ô có đánh dấu ở cột H thì như nào ạ
Các sản phẩm khác có đếm hay không?
Em gặp vấn đề là: Cột B (Sản phẩm) có 60.000 dòng. Cột A đánh số thứ tự nếu sản phẩm là "B" Vì số lượng dòng quá lớn nên dùm hàm IF+Max sẽ làm file chạy rất chậm, nên viết VBA có nhanh hơn không ạ, nhờ các anh/ chị chỉ giúp code VBA
dùng countif thử xemCác sản phẩm khác có đếm hay không?
Không anh, em cần hỗ trợ đếm theo 1 điều kiện có sẵn!
Bạn thử code dưới đâyCác sản phẩm khác có đếm hay không?
Không anh, em cần hỗ trợ đếm theo 1 điều kiện có sẵn!
Sub Stt()
Dim Nguon, Kq
Dim DieuKien
Dim i, j, k
With Sheet1
Nguon = .Range("B2", .Range("B1000000").End(xlUp))
DieuKien = "B"
k = UBound(Nguon)
ReDim Kq(1 To k, 1 To 1)
For i = 1 To k
If Nguon(i, 1) = DieuKien Then
j = j + 1
Kq(i, 1) = j
End If
Next i
.Range("A2").Resize(k, 1).ClearContents
.Range("A2").Resize(k, 1) = Kq
End With
End Sub
Tại A2 thử sử dụng công thức sau xem có khá hơn không:
Em gặp vấn đề là: Cột B (Sản phẩm) có 60.000 dòng. Cột A đánh số thứ tự nếu sản phẩm là "B" Vì số lượng dòng quá lớn nên dùm hàm IF+Max sẽ làm file chạy rất chậm, nên viết VBA có nhanh hơn không ạ, nhờ các anh/ chị chỉ giúp code VBA
Bạn thử code dưới đây
Mã:Sub Stt() Dim Nguon, Kq Dim DieuKien Dim i, j, k With Sheet1 Nguon = .Range("B2", .Range("B1000000").End(xlUp)) DieuKien = "B" k = UBound(Nguon) ReDim Kq(1 To k, 1 To 1) For i = 1 To k If Nguon(i, 1) = DieuKien Then j = j + 1 Kq(i, 1) = j End If Next i .Range("A2").Resize(k, 1).ClearContents .Range("A2").Resize(k, 1) = Kq End With End Sub
Bạn thử code dưới đây
Mã:Sub Stt() Dim Nguon, Kq Dim DieuKien Dim i, j, k With Sheet1 Nguon = .Range("B2", .Range("B1000000").End(xlUp)) DieuKien = "B" k = UBound(Nguon) ReDim Kq(1 To k, 1 To 1) For i = 1 To k If Nguon(i, 1) = DieuKien Then j = j + 1 Kq(i, 1) = j End If Next i .Range("A2").Resize(k, 1).ClearContents .Range("A2").Resize(k, 1) = Kq End With End Sub
Thầy ơi cho e hỏi làm thế nào cho code này nó tự động chạy ạ!Nói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)
cái này thì phải làm trong phần sự kiện. Tốt nhất là bạn gửi file lên để mọi người còn giúp bạn.Thầy ơi cho e hỏi làm thế nào cho code này nó tự động chạy ạ!
E cảm ơn thầy giáo, e có file này e muốn lập báo cáo chi tiết dựa vào dữ liệu trên sheet "PS" để lập vào sổ chi tiết công nợ phải thu, công nợ phải trả, và sổ kho. e nhờ các thầy giúp e code với ạ,cái này thì phải làm trong phần sự kiện. Tốt nhất là bạn gửi file lên để mọi người còn giúp bạn.
E cảm ơn thầy giáo, e có file này e muốn lập báo cáo chi tiết dựa vào dữ liệu trên sheet "PS" để lập vào sổ chi tiết công nợ phải thu, công nợ phải trả, và sổ kho. e nhờ các thầy giúp e code với ạ,Nói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)
Bạn đưa bài vào sai chủ đề rồi. Vui lòng bạn lập chủ đề mới và trình bày rõ bạn cần giúp những gì, ví dụ như sổ chi tiết công nợ phải thu, công nợ phải trả, và sổ kho dữ liệu được lấy như thế nào từ sheet!PSE cảm ơn thầy giáo, e có file này e muốn lập báo cáo chi tiết dựa vào dữ liệu trên sheet "PS" để lập vào sổ chi tiết công nợ phải thu, công nợ phải trả, và sổ kho. e nhờ các thầy giúp e code với ạ,
bác ơi cái đoạn này, đúng với số thôi, nhưng nếu số nó chỉ dạng thập phân 2 số 00-99 sau đó phải thay đổi sang A1=> A9, hết A9 lại sang B1=> B9... tiếp tục đếm tiếp đến hết, thì làm sao hả bác.Nói về NGẮN thì cái này mới là NGẮN đây:
Ẹc... Ẹc...PHP:Sub STT() With Range([C7], [C65536].End(xlUp)).Offset(, -2) .Value = "=IF(RC[2]="""","""",COUNTA(R7C3:RC3))" .Value = .Value End With End Sub
Tuy nhiên, ĐƠN GIẢN không tương đương với TỐC ĐỘ (mảng là vô địch)