Các bác giúp em cách chèn hàng tự động với.

Liên hệ QC

nhatha

Thành viên chính thức
Tham gia
4/8/06
Bài viết
51
Được thích
8
Tình hình là e có 1 file đấu thầu, nay e muốn chèn thêm 1 hàng ngang để thêm hàng : NC*((0,5+0,4)/2,493+(0,05/1,37)) vào mục : chi phí nhân công.
hiện tại e insert bằng thủ công đế số thứ tự 240 rồi ...hic..hic..
nhưng file đấu thầu này nhiều quá, tới gần 1500 hạng mục, e mà chèn thủ công vô chắc chết luôn.
ko biết có bác nào biết giúp e với ko ạh
cảm ơn các bác nhiều ạh
mong nhận được sự giúp đỡ từ các bác
 

File đính kèm

  • Book1.rar
    955.9 KB · Đọc: 53
Tình hình là e có 1 file đấu thầu, nay e muốn chèn thêm 1 hàng ngang để thêm hàng : NC*((0,5+0,4)/2,493+(0,05/1,37)) vào mục : chi phí nhân công.
hiện tại e insert bằng thủ công đế số thứ tự 240 rồi ...hic..hic..
nhưng file đấu thầu này nhiều quá, tới gần 1500 hạng mục, e mà chèn thủ công vô chắc chết luôn.
ko biết có bác nào biết giúp e với ko ạh
cảm ơn các bác nhiều ạh
mong nhận được sự giúp đỡ từ các bác
Bạn phải nói rõ: VỊ TRÍ CHÍNH XÁC (dòng) MÀ BẠN CẦN CHÈN THÊM là nằm tại đâu chứ? (chẳng hạn cách STT bao nhiêu dòng, hay cách với gì gì đó bao nhiêu dòng)
 
Bạn phải nói rõ: VỊ TRÍ CHÍNH XÁC (dòng) MÀ BẠN CẦN CHÈN THÊM là nằm tại đâu chứ? (chẳng hạn cách STT bao nhiêu dòng, hay cách với gì gì đó bao nhiêu dòng)
dòng cần thêm nằm phía dưới các dòng: Nhân công bậc...... và nằm trong hạng mục Chi phí nhân công đó bác ạh.
Trong mỗi hạng mục công việc e đều phải thêm 1 hàng như thế hết bác ạh
 
dòng cần thêm nằm phía dưới các dòng: Nhân công bậc...... và nằm trong hạng mục Chi phí nhân công đó bác ạh.
Trong mỗi hạng mục công việc e đều phải thêm 1 hàng như thế hết bác ạh
Tôi hình dung ra sẽ dùng AutoFiler để lọc theo 1 tiêu chí nào đó (tiêu chí ấy chính là dòng nằm trên dòng mà bạn cần chèn) ---> Có điều tìm trong file bạn thì:
- Chẳng thấy chổ nào có chữ "Nhân công bậc... " gì cả
- Bạn nói "nằm trong hạng mục Chi phí nhân công" nghĩa là sao? Nó nằm dưới dòng này uh? (dưới dòng này là công thức à nha)
---------------------
Bạn vui lòng nói thật rõ mới có thể giúp được... Còn không thì tự bạn nghiên cứu AutoFilter đi
 
Bạn thử với macro này, nhưng nó chỉ làm với cỡ 1500 gì đó thôi, chưa biết tại sao?

PHP:
Option Explicit
Sub Tìm()
 Dim Rng As Range, sRng As Range, aRng As Range
 Dim MyAdd As String
 
 Set Rng = Range([D6], [D65500].End(xlUp))
 Set sRng = Rng.Find("Chi phí nh", , xlFormulas, xlPart)
 Set aRng = [A65500]
 If Not sRng Is Nothing Then
   MyAdd = sRng.Address
   Do
      sRng.Offset(, -1).Interior.ColorIndex = 38
      sRng.EntireRow.Insert
      Set sRng = Rng.FindNext(sRng)
   Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
 End If

End Sub
 
Tôi hình dung ra sẽ dùng AutoFiler để lọc theo 1 tiêu chí nào đó (tiêu chí ấy chính là dòng nằm trên dòng mà bạn cần chèn) ---> Có điều tìm trong file bạn thì:
- Chẳng thấy chổ nào có chữ "Nhân công bậc... " gì cả
- Bạn nói "nằm trong hạng mục Chi phí nhân công" nghĩa là sao? Nó nằm dưới dòng này uh? (dưới dòng này là công thức à nha)
---------------------
Bạn vui lòng nói thật rõ mới có thể giúp được... Còn không thì tự bạn nghiên cứu AutoFilter đi
dạ, để e trình bày với bác
VD: hạng mục 1 trong phần Công tác xây lắp là: Bê tông mái đá 2*4 M150
trong phần Bê tông mái đá 2*4 M150 có mục: Chi phí nhân công
trong phần Chi phí nhân công có mục: Nhân công bậc 4,0/7
bây giờ e muốn thêm mục: Các khoản phụ cấp vào trong mục Chi phí nhân công đó bác ạh
và hạng mục công việc nào e cũng phải thêm mục Các khoản phụ cấp vào hết bác ạh
chính vì thế e phải làm thủ công bằng tay và Insert từng hàng vô để thêm mục Các khoản phụ cấp vào.
e muốn hỏi là có công thức hay là chiêu j đó thêm hàng loạt hàng vô được ko ạh
 
dạ, để e trình bày với bác
VD: hạng mục 1 trong phần Công tác xây lắp là: Bê tông mái đá 2*4 M150
trong phần Bê tông mái đá 2*4 M150 có mục: Chi phí nhân công
trong phần Chi phí nhân công có mục: Nhân công bậc 4,0/7
bây giờ e muốn thêm mục: Các khoản phụ cấp vào trong mục Chi phí nhân công đó bác ạh
và hạng mục công việc nào e cũng phải thêm mục Các khoản phụ cấp vào hết bác ạh
chính vì thế e phải làm thủ công bằng tay và Insert từng hàng vô để thêm mục Các khoản phụ cấp vào.
e muốn hỏi là có công thức hay là chiêu j đó thêm hàng loạt hàng vô được ko ạh
Để tôi nói lại xem có đúng ý bạn không nha:
- Đầu tiên tìm trong cột D xem chổ nào có chữ "Chi phí nhân công" hay không?
- Từ đây, dịch xuống 2 dòng rồi chèn thêm 1 dòng vào tất cả những nơi đã tìm được
- Tiếp theo, gõ chữ "Các khoản phụ cấp" vào cột D, chữ "Công" vào cột E và chữ NC*((0,5+0,4)/2,493+(0,05/1,37)) vào cột F, G, H I
--------------
Diễn giải thế đúng chứ?
 
PHP:
Option Explicit
Sub Tìm()
 Dim Rng As Range, sRng As Range, aRng As Range
 Dim MyAdd As String
 
 Set Rng = Range([D6], [D65500].End(xlUp))
 Set sRng = Rng.Find("Chi phí nh", , xlFormulas, xlPart)
 Set aRng = [A65500]
 If Not sRng Is Nothing Then
   MyAdd = sRng.Address
   Do
      sRng.Offset(, -1).Interior.ColorIndex = 38
      sRng.EntireRow.Insert
      Set sRng = Rng.FindNext(sRng)
   Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
 End If

End Sub
cái này dùng như thế nào hả bác ơi, e mù tịt ....:(:(
 
Để tôi nói lại xem có đúng ý bạn không nha:
- Đầu tiên tìm trong cột D xem chổ nào có chữ "Chi phí nhân công" hay không?
- Từ đây, dịch xuống 2 dòng rồi chèn thêm 1 dòng vào tất cả những nơi đã tìm được
- Tiếp theo, gõ chữ "Các khoản phụ cấp" vào cột D, chữ "Công" vào cột E và chữ NC*((0,5+0,4)/2,493+(0,05/1,37)) vào cột F, G, H I
--------------
Diễn giải thế đúng chứ?
Dạ đúng rồi bác ajh, e cảm ơn bác nhiều ạh
 
Để tôi nói lại xem có đúng ý bạn không nha:
- Đầu tiên tìm trong cột D xem chổ nào có chữ "Chi phí nhân công" hay không?
- Từ đây, dịch xuống 2 dòng rồi chèn thêm 1 dòng vào tất cả những nơi đã tìm được
- Tiếp theo, gõ chữ "Các khoản phụ cấp" vào cột D, chữ "Công" vào cột E và chữ NC*((0,5+0,4)/2,493+(0,05/1,37)) vào cột F, G, H I
--------------
Diễn giải thế đúng chứ?
Đúng rồi đó Anh à, cái này Em định dùng vòng lặp cho nó chạy từ dưới lên thấy thằng nào có chữ Chi phí nhân công thì chọn nó....sau đó dùng offset(2) rồi insert dòng. Tuy nhiên nhìn dữ liệu nhiều quá dùng For next có lẽ bị lâu, Anh cho đoạn code dùng mãng đi.
 
Đúng rồi đó Anh à, cái này Em định dùng vòng lặp cho nó chạy từ dưới lên thấy thằng nào có chữ Chi phí nhân công thì chọn nó....sau đó dùng offset(2) rồi insert dòng. Tuy nhiên nhìn dữ liệu nhiều quá dùng For next có lẽ bị lâu, Anh cho đoạn code dùng mãng đi.
e cũng hình dung được, nhưng cuối cùng lệnh thì chỉ biết lơ mơ nên đành chịu thua
 
Đúng rồi đó Anh à, cái này Em định dùng vòng lặp cho nó chạy từ dưới lên thấy thằng nào có chữ Chi phí nhân công thì chọn nó....sau đó dùng offset(2) rồi insert dòng. Tuy nhiên nhìn dữ liệu nhiều quá dùng For next có lẽ bị lâu, Anh cho đoạn code dùng mãng đi.
Như tôi đã nói ở trên: Dùng AutoFiler là được
Ví dụ thế này:
- Đầu tiên gõ chữ "Chi phí nhân công" vào cell Z1
- Gõ chữ "+ Các khoản phụ cấp" vào cell AA1
- Gõ chữ "Công" vào cell AB1
- Gõ chữ "NC*((0,5+0,4)/2,493+(0,05/1,37))" vào cell AC1
- Tiếp theo code như sau:
PHP:
Sub Test()
  Dim fRng As Range
  Application.ScreenUpdating = False
  With Range([D6], [D65536].End(xlUp))
    .AutoFilter 1, "*" & [Z1].Value & "*"
    Set fRng = Intersect(.Offset(1), .SpecialCells(12))
    .AutoFilter
    fRng.Offset(2).EntireRow.Insert
    .AutoFilter 1, "*" & [Z1] & "*"
    Set fRng = Intersect(.Offset(1), .SpecialCells(12))
    .AutoFilter
    With fRng.Offset(2)
      .Offset(, 0).Value = Range("AA1").Value
      .Offset(, 1).Value = Range("AB1").Value
      .Offset(, 2).Value = Range("AC1").Value
    End With
  End With
  Application.ScreenUpdating = True
End Sub
Lưu ý rằng việc insert row sẽ ảnh hưởng đến tốc độ tính toán của bảng tính nếu như trên sheet có quá nhiều công thức ---> Vậy tốt nhất hãy chuyển toàn bộ về Values trước khi chạy code, nếu không cho dù có dùng cách gì cũng sẽ "lết bánh"
 

File đính kèm

  • InsertRow.rar
    483.2 KB · Đọc: 34
cái code này dùng như thế nào hả bác ơi, e vô Sheet của nó, rồi bấm View Code, sau đó chép cái code vào và chỉnh sữa như bác nói, sau đó e bấm Run thì nó báo lỗi bác ạh
 
e chép cái code này vào và chỉnh sữa đúng ko bác:
Untitled-1.jpg


sau đó e bấm nút Run ạh
Untitled1.jpg


và nó báo lỗi như thế này ạh
Untitled1.jpg
 
cái code này dùng như thế nào hả bác ơi, e vô Sheet của nó, rồi bấm View Code, sau đó chép cái code vào và chỉnh sữa như bác nói, sau đó e bấm Run thì nó báo lỗi bác ạh
File tôi làm sẳn rồi đấy, cứ thế mà xài thôi
Còn nếu bạn muốn chép code vào file mới thì... tôi làm sao bạn y chang thế nhé
Chỉ chú ý về vùng dữ liệu:
- Trong code của tôi vùng dữ liệu được xác định tại cột D, dòng 6 trở xuống
- Nếu dữ liệu thật của bạn không giống thế, hãy sửa lại cho phù hợp
 
Code ở trên có lẽ hơi dư (do quá cẩn thận)... Giờ test kỹ lại thì thấy có thể bỏ bớt 3 dòng:
PHP:
Sub Test()
  Dim fRng As Range
  Application.ScreenUpdating = False
  With Range([D6], [D65536].End(xlUp))
    .AutoFilter 1, "*" & [Z1].Value & "*"
    Set fRng = Intersect(.Offset(1), .SpecialCells(12))
    .AutoFilter
    fRng.Offset(2).EntireRow.Insert
    With fRng.Offset(2)
      .Offset(, 0).Value = Range("AA1").Value
      .Offset(, 1).Value = Range("AB1").Value
      .Offset(, 2).Value = Range("AC1").Value
    End With
  End With
  Application.ScreenUpdating = True
End Sub
 
Web KT
Back
Top Bottom