Tự động thêm số thứ tự và công thức cho ô

Liên hệ QC

nguoikemcoi

Thành viên mới
Tham gia
24/11/07
Bài viết
17
Được thích
0
Chào các bạn.
Bảng tổng hợp vật tư gồm vật liệu + nhân công + máy.
Trong mỗi chủng loại (VL+NC+MTC) gồm nhiều loại vật tư nhỏ và số lượng mỗi lần tính toán không giống nhau.
Mình muốn nhờ các bạn giúp mình đoạn code tự động thêm số thứ tự vào cột số thứ tự cho mỗi loại (Vật liệu, nhân công, máy thi công). Mỗi loại này đều phải bắt đầu bằng số 1.
Mình có gửi kèm file (Sheet "Tong hop vat tu" là sheet ban dau, Sheet" Tong hop vat tu (Ket qua)" la sheet minh mong muốn nó chạy ra.

Lưu ý: Chủng loại vật liệu, nhân công, máy thi công luôn thay đổi nên số dòng không của Sheet không bị giới hạn như file mình gửi.

Chân thành cảm ơn ban quản trị GPE.

Mong nhận được hồi âm.
 

File đính kèm

Lần chỉnh sửa cuối:
Chào các bạn.
Bảng tổng hợp vật tư gồm vật liệu + nhân công + máy.
Trong mỗi chủng loại (VL+NC+MTC) gồm nhiều loại vật tư nhỏ và số lượng mỗi lần tính toán không giống nhau.
Mình muốn nhờ các bạn giúp mình đoạn code tự động thêm số thứ tự vào cột số thứ tự cho mỗi loại (Vật liệu, nhân công, máy thi công). Mỗi loại này đều phải bắt đầu bằng số 1.
Mình có gửi kèm file (Sheet "Tong hop vat tu" là sheet ban dau, Sheet" Tong hop vat tu (Ket qua)" la sheet minh mong muốn nó chạy ra.

Lưu ý: Chủng loại vật liệu, nhân công, máy thi công luôn thay đổi nên số dòng không của Sheet không bị giới hạn như file mình gửi.

Chân thành cảm ơn ban quản trị GPE.

Mong nhận được hồi âm.
Bạn xem trong file có đúng ý bạn không nhé!
 

File đính kèm

Upvote 0
Bạn xem trong file có đúng ý bạn không nhé!
Cảm ơn bạn hoangminhtien đã quan tâm.
Tuy nhiên mình không thấy bạn kèm đoạn code nào trong đó nên mình chưa kiễm tra lại, nhờ bạn test lại giúp mình nhé.
Mình viết được một đoạn để cho nó chạy tự động và cũng đã ok tuy nhiên nó hơi chậm.
Mình muốn nhờ các bạn chỉ giúp cách làm cho excel hiểu :
Nếu Cell = "1000" thì nó chỉ tìm các row từ cell có giá trị 1000 đến cell có giá trị 7000 tiếp theo. Như thế thì số dòng không nhiều -> Tốc độ nhanh hơn.
PHP:
Sub Them_sothutu()
    Sheets("Tong hop vat tu (Acitt)").Select
    Range("B:B").Select
    Dim Cell As Range
    Dim stt As Long
    stt = 1
    Dim ketqua As Long
    ketqua = 1
    If Cell.Text <> 0 Then
        For Each Cell In Selection.Cells
            If Cell = ":1000" Then
                For stt = 1 To 65000
                    Cell.Offset(stt, -1) = ketqua
                    ketqua = ketqua + 1
                Next
            ElseIf Cell = ":7000" Then
                For stt = 1 To 6500
                    Cell.Offset(stt, -1) = ketqua
                    ketqua = ketqua + 1
                Next
            ElseIf Cell = ":8000" Then
                For stt = "8000" To 6500
                    Cell.Offset(stt, -1) = ketqua
                    ketqua = ketqua + 1
                Next
            End If
        Next
    End If
End Sub

Chân thành cảm ơn, Mong nhận được hồi đáp !!!!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cảm ơn bạn hoangminhtien đã quan tâm.
Tuy nhiên mình không thấy bạn kèm đoạn code nào trong đó nên mình chưa kiễm tra lại, nhờ bạn test lại giúp mình nhé.
Mình viết được một đoạn để cho nó chạy tự động và cũng đã ok tuy nhiên nó hơi chậm.
Mình muốn nhờ các bạn chỉ giúp cách làm cho excel hiểu :
Nếu Cell = "1000" thì nó chỉ tìm các row từ cell có giá trị 1000 đến cell có giá trị 7000 tiếp theo. Như thế thì số dòng không nhiều -> Tốc độ nhanh hơn.
PHP:
Sub Them_sothutu()
Sheets("Tong hop vat tu (Acitt)").Select
Range("B:B").Select
Dim Cell As Range
Dim stt As Long
stt = 1
Dim ketqua As Long
ketqua = 1
If Cell.Text <> 0 Then
For Each Cell In Selection.Cells
If Cell = ":1000" Then
For stt = 1 To 65000
Cell.Offset(stt, -1) = ketqua
ketqua = ketqua + 1
Next
ElseIf Cell = ":7000" Then
For stt = 1 To 6500
Cell.Offset(stt, -1) = ketqua
ketqua = ketqua + 1
Next
ElseIf Cell = ":8000" Then
For stt = "8000" To 6500
Cell.Offset(stt, -1) = ketqua
ketqua = ketqua + 1
Next
End If
Next
End If
End Sub

Chân thành cảm ơn, Mong nhận được hồi đáp !!!!
Code này bạn nói đã chạy ok không biết máy sẽ hiểu câu lệnh
If Cell.Text <> 0 Then trong đó Cell.text là cái gì???
Còn code của bạn chậm là phải Chạy đến 6500 hàng, nếu excel có 6.500.000 hàng thì bạn cho chạy luôn thì có chờ chết.
 
Upvote 0
Mình gửi lộn cho ban đoạn code cũ, xin lỗi nhé. Đoạn code mới. Nó bị lỗi chổ: Cell.text thành ActiveCell.Text
PHP:
Sub Them_sothutu()
    Sheets("Tong hop vat tu").Select
    Range("B:B").Select
    Dim Cell As Range
    Dim stt As Long
    stt = 1
    Dim ketqua As Long
    ketqua = 1
    If ActiveCell.Text <> 0 Then
        For Each Cell In Selection.Cells
            If Cell = ":1000" Then
                For stt = 1 To 65000
                    Cell.Offset(stt, -1) = ketqua
                    ketqua = ketqua + 1
                Next
            ElseIf Cell = ":7000" Then
                For stt = 1 To 6500
                    Cell.Offset(stt, -1) = ketqua
                    ketqua = ketqua + 1
                Next
            ElseIf Cell = ":8000" Then
                For stt = 1 To 6500
                    Cell.Offset(stt, -1) = ketqua
                    ketqua = ketqua + 1
                Next
            End If
        Next
    End If
End Sub

Bạn xem nếu có gì cần đóng góp, sửa chữa thì bổ sung nhé. (Vì đoạn code này chạy rất lâu, mình chưa nghĩ ra cách nào giải quyết )
Cảm ơn diễn đàn.
Kiến thức VB của mình hạn hẹp, mong được học hỏi.
 
Lần chỉnh sửa cuối:
Upvote 0
Đoạn code của bạn sẽ thực hiện các dòng lệnh khai báo & gán ban đầu thôi; Khi gặp cái If đầu tiên là nó thoát ngay & như vậy, hầu như nó chưa làm gì cả;

Dưới đây là đoạn code hễ gặp các chuỗi ":1000", ":2000",. . . . ":9000",. . . . thì nó sẽ quýnh số TT lại từ 1 cho các record dưới chúng:

PHP:
Option Explicit
Sub Them_sothutu()
 Dim Cell As Range
 Dim Stt As Long, KetQua As Long
   
 Sheets("Tong hop vat tu").Select
 Range([B1].End(xlDown).Offset(1), [B65500].End(xlUp)).Select
 For Each Cell In Selection.Cells
   If CDbl(Mid(Cell.Value, 2, 5)) Mod 1000 = 0 Then
      Stt = 0
   Else
      Stt = Stt + 1
      Cell.Offset(, -1) = Stt
   End If
 Next Cell
End Sub

Hễ bạn muốn chính xác chỉ là ':1000", ":6000" & ":7000" thì cần sửa lại chút nữa.

Chờ fản hồi từ bạn.
 
Upvote 0
Đoạn code của bạn sẽ thực hiện các dòng lệnh khai báo & gán ban đầu thôi; Khi gặp cái If đầu tiên là nó thoát ngay & như vậy, hầu như nó chưa làm gì cả;

Dưới đây là đoạn code hễ gặp các chuỗi ":1000", ":2000",. . . . ":9000",. . . . thì nó sẽ quýnh số TT lại từ 1 cho các record dưới chúng:

PHP:
Option Explicit
Sub Them_sothutu()
 Dim Cell As Range
 Dim Stt As Long, KetQua As Long
   
 Sheets("Tong hop vat tu").Select
 Range([B1].End(xlDown).Offset(1), [B65500].End(xlUp)).Select
 For Each Cell In Selection.Cells
   If CDbl(Mid(Cell.Value, 2, 5)) Mod 1000 = 0 Then
      Stt = 0
   Else
      Stt = Stt + 1
      Cell.Offset(, -1) = Stt
   End If
 Next Cell
End Sub

Hễ bạn muốn chính xác chỉ là ':1000", ":6000" & ":7000" thì cần sửa lại chút nữa.

Chờ fản hồi từ bạn.
Cảm ơn Hyen17
Mình có một số thắc mắc muốn nhờ bạn giải đáp giúp:
1. Bạn có thể giải đáp ý nghĩa của "CDb1" mà bạn dùng trong đoạn code này là gì không?
2. Giả sử nếu mã số vật tư của mình là: ":4c03" thì "CDbl(Mid(Cell.Value, 2, 5)) Mod 1000 = 0" kết quả không là kiểu giá trị, sẽ gặp lỗi. Nếu mình đặt mã vật tư gồm toàn số thì đoạn code này ok.

Thân. Mong nhận được hồi âm.
 
Upvote 0
Có một số thắc mắc muốn nhờ bạn giải đáp giúp:
1. Bạn có thể giải đáp ý nghĩa của "CDb1" mà bạn dùng trong đoạn code này là gì không?
2. Giả sử nếu mã số vật tư của mình là: ":4c03" thì "CDbl(Mid(Cell.Value, 2, 5)) Mod 1000 = 0" kết quả không là kiểu giá trị, sẽ gặp lỗi. Nếu mình đặt mã vật tư gồm toàn số thì đoạn code này ok.
Mong nhận được hồi âm.

(1) Bản thân các mã trong file của bạn đưa lên có dang ':XXXX', hay ':XXXXX'
Nên mình dùng fép cắt chuỗi lấy các chữ số cuối sau ký tự đầu & hàm mà bạn nói tời sẽ biến các ký số này thành số 1 cách đàng hoàng & nghiêm chỉnh.

(2) Tại do bạn đưa các mã lên chưa là fổ dụng, nên cách nhận biết vi trí đề từ sau đó đánh lại số là đơn giản; Rút kinh nghiệm lần sau đưa file lên, ta cần đưa đầy đủ nhứt đang có trong file sử dụng.
(Như bài trả lời đầu tiên HoàngMinhTiến lấy ô trống của cách đó về fía fải 2 cột làm chuẩn)

(*) Để giải rốt ráo vấn đề của bạn, bạn cần nêu rõ dạng mã mà đang sử dụng; Nếu chúng không có quy luật nào để nhận biết thì chúng ta cần chuyển về cách của #2 vậy.

Thân ái!
 
Upvote 0
Web KT

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

Back
Top Bottom