Xin được sự giúp đỡ code tự động chèn hàng, điền nội dung vào ô vừa chèn

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Em có bài toán sau xin được sự giúp đỡ của các anh/chị trên diễn đàn GPE:
- ở sheet "Danh muc NTCV" chỉ gồm đầu mục các công việc thi công (như hình 1)
- Giờ ở mỗi đầu công việc thi công em muốn chèn thêm 2 dòng, hoặc 1 dòng ngay sau dòng mà có các đầu mục công việc thi công đó. Nội dung được điền vào ô sau khi chèn nhu sau:(sau khi chèn được hình 2)
Cơ sở để chèn số dòng (1 hay 2 dòng ) và nội dung trong cột E tương ứng với dòng đó như sau:
Trong sheet "TU KHOA LAY MTN" Căn cứ vào từ khóa đầu dòng (2 đến 3 từ) của nội dung các công việc thi công trong cột E để chèn thêm dòng và điền nội dung vào dòng được chèn. (hinh 3).
Như ví dụ:
Ban đầu gồm có 03 đầu mục công việc (hình 1)
so sánh các từ khóa đầu dòng của các ô có các đầu mục công việc đó
ô E9 có từ khóa đầu dòng là "Đổ bê tông"
ô E10 có từ khóa đầu dòng là "Xây trên dầm"
ô E11 có từ khóa đầu dòng là " Đắp đất"
Vậy đối chiếu các từ khóa đó trong sheet "TU KHOA LAY MTN"
Em muốn khi chạy code thứ nhất ta sẽ tự động chèn dòng và nội dung như ô E10, E13 (sau khi chèn thứ tự dòng đã thay đổi )
Tiếp tục chạy code thứ 2 sẽ được dòng và nội dung như ô E11, E14, E16 (sau khi chèn thứ tự dòng đã thay đổi )
Như vậy Sau khi chạy code có sản phẩm (hình 2)


hinh 1.png



a1.png
234.png
 

File đính kèm

Lần chỉnh sửa cuối:

dangky47h

Thành viên thường trực
Tham gia ngày
4 Tháng chín 2017
Bài viết
312
Được thích
33
Điểm
185
Tuổi
32
Em có bài toán sau xin được sự giúp đỡ của các anh/chị trên diễn đàn GPE:

1/ chạy code thứ nhất này (code A nào đó) Thì tự động chèn thêm một dòng phía dưới dòng đó và nội dung của ô trong cột E vừa mới chèn sẽ là :thêm 2 từ “công tác” vào đầu đoạn nội dung của nội dung ô E liền kề trước đó
Với quy định như sau : từ khóa xuất hiện ở đầu đoạn nội dung mỗi dòng trong ô E (E9, E12, E15)
Trong ví dụ là Ô E10, Ô E13 được chèn vào sau khi chạy code A
Quy định trong sheet “TU KHOA LAY MTN” (Tên được điền trong cột A của sheet “TU KHOA LAY MTN” thì khi chạy code A mới có tác dụng)

2/ chạy code thứ 2 (code B nào đó) thì tự động chèn thêm một dòng vào dòng vừa được chèn khi chạy code A ở trên và thêm từ cần chèn ở đầu nội dung cột E
Quy định như sau: lấy từ khóa ở đầu mỗi đoạn trong Ô cột E (E9, E12, E15)
Trong ví dụ là Ô E11, Ô E14, E16 được chèn vào sau khi chạy code B
Quy định trong sheet “TU KHOA LAY MTN” (Tên được điền trong cột C của sheet “TU KHOA LAY MTN” thì khi chạy code B mới có tác dụng)
View attachment 215421View attachment 215422
Nhập thủ công đi, sẽ kiểm soát được dễ hơn
 

leonguyenz

Thành viên mới
Thành viên BQT
Moderator
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,439
Được thích
7,809
Điểm
610
Nơi ở
Bình Dương
Thực sự là đọc đi đọc lại cả vài chục lần vẫn chưa hiểu được cách diễn giải.
Ví dụ ở ô E10 là lấy từ khóa "đổ bê tông" từ bên sheet TU KHOA ...
Vậy còn ô E13 là lấy từ khóa ở đâu?
 
Lần chỉnh sửa cuối:

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Thực sự là đọc đi đọc lại cả vài chục lần vẫn chưa hiểu được cách diễn giải.
Ví dụ ở ô E10 là lấy từ khóa "đổ bê tông" từ bên sheet TU KHOA ...
Vậy còn ô E13 là lấy từ khóa ở đâu?
Dạ em đã diễn giải lại, anh xem giúp em, cho em xin ý kiến ạ!
Bài đã được tự động gộp:

Thực sự là đọc đi đọc lại cả vài chục lần vẫn chưa hiểu được cách diễn giải.
Ví dụ ở ô E10 là lấy từ khóa "đổ bê tông" từ bên sheet TU KHOA ...
Vậy còn ô E13 là lấy từ khóa ở đâu?
lấy các từ khóa đầu của mỗi ô (ô E9, E10, E11) ban đầu khi chưa chèn dòng và điền nội dung ta được các từ khóa "Đổ bê tông"; "Xây"; "Đắp đất"
Đem các từ khóa này đối chiếu với các từ khóa ở sheet "TU KHOA LAY MTN"
Sau khi đối chiếu và chạy 02 đoạn code (code thứ nhất, code thứ 2) thì sẽ được:
Ô có nền chữ màu đỏ (là dòng được chèn, nội dung được chèn) khi chạy code thứ nhất.
Ô có nền chữ màu xanh (là dòng được chèn, nội dung được chèn) khi chạy code thứ 2
 
Lần chỉnh sửa cuối:

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Thực sự là đọc đi đọc lại cả vài chục lần vẫn chưa hiểu được cách diễn giải.
Ví dụ ở ô E10 là lấy từ khóa "đổ bê tông" từ bên sheet TU KHOA ...
Vậy còn ô E13 là lấy từ khóa ở đâu?
Em có đăng hình 1 là nội dung công việc ban đầu (khi chưa chạy code để chèn dòng và điền nội dung)
Hình thứ 2 là sau khi đã chèn dòng và điền nội dung ớ các dòng đã chèn ( ô có chữ tô màu đỏ là ý em muốn sau khi chạy code thứ nhất,
ô có chữ tô màu xanh là sau khi chạy code thứ 2)
 

leonguyenz

Thành viên mới
Thành viên BQT
Moderator
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,439
Được thích
7,809
Điểm
610
Nơi ở
Bình Dương
Bạn xem file dưới đã đúng bước 1 không.
Mã:
Sub Button3_Click()
Dim TKhoa(), Rw As Long, i As Long, j As Long, Rng As Range, Tmp As String
TKhoa = Sheets("TU KHOA LAY MTN").Range("A2:B6").Value
Rw = Sheets("Danh muc NT CVXD").Range("E65535").End(xlUp).Row
Set Rng = Sheets("Danh muc NT CVXD").Range("E9:E" & Rw)
For i = Rng.Rows.Count To 1 Step -1
    For j = 1 To UBound(TKhoa, 1)
        Tmp = Trim(TKhoa(j, 2)) & " "
        If InStr(Rng(i), TKhoa(j, 1)) And _
            InStr(Rng(i + 1), TKhoa(j, 2)) = 0 Then
            Rng(i).Offset(1).EntireRow.Insert
            Rng(i).Offset(1) = Replace(Rng(i), TKhoa(j, 1), Tmp)
        End If
    Next j
Next i
End Sub
 

File đính kèm

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Bạn xem file dưới đã đúng bước 1 không.
Mã:
Sub Button3_Click()
Dim TKhoa(), Rw As Long, i As Long, j As Long, Rng As Range, Tmp As String
TKhoa = Sheets("TU KHOA LAY MTN").Range("A2:B6").Value
Rw = Sheets("Danh muc NT CVXD").Range("E65535").End(xlUp).Row
Set Rng = Sheets("Danh muc NT CVXD").Range("E9:E" & Rw)
For i = Rng.Rows.Count To 1 Step -1
    For j = 1 To UBound(TKhoa, 1)
        Tmp = Trim(TKhoa(j, 2)) & " "
        If InStr(Rng(i), TKhoa(j, 1)) And _
            InStr(Rng(i + 1), TKhoa(j, 2)) = 0 Then
            Rng(i).Offset(1).EntireRow.Insert
            Rng(i).Offset(1) = Replace(Rng(i), TKhoa(j, 1), Tmp)
        End If
    Next j
Next i
End Sub
Em cám ơn anh!
Sau khi chạy thử code em thấy có vấn đề sau ạ!:
1/Khi xóa từ khóa " Đắp đất "ở cả cột A và cột B trong sheet "TU KHOA LAY MTN" thì em thấy khi chạy code nội dung ở ô E12 trong sheet "Danh muc NT CVXD" bị lặp lại sau mỗi lần chạy code (nhấn 04 lần chạy code thì nội dung ở ô E12 trong sheet "Danh muc NT CVXD" bị lặp lại 04 lần- hình thứ 1, hình thứ 2)
2/ Khi thêm từ khóa "Trát tường" và chạy code thì vẫn gặp vấn đề nêu ở trên mặc dù không xóa từ khóa "Trát tường" nhưng mỗi lần chạy code nội dung vẫn bị lặp lại (hình 03, hình 04)h1.pngh2.pngh3.pngh4.png
Anh xem giúp em ạ!
 

File đính kèm

vanle33

Thành viên gạo cội
Tham gia ngày
30 Tháng mười 2008
Bài viết
5,491
Được thích
3,750
Điểm
860
Nơi ở
Thị xã Sơn Tây - TP Hà Nội
@Cát Lượng : Ở hình 234.png thì cột D để link sang Tên mẫu?
Cột B sao lại phải thêm chữ "Công tác" vào làm gì? Ai chỉ cho bạn là phải thêm vào?
Có thể dùng hàm nối chuỗi (&); tách chuỗi (MID) đâu cần dùng code làm gì.
 

leonguyenz

Thành viên mới
Thành viên BQT
Moderator
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,439
Được thích
7,809
Điểm
610
Nơi ở
Bình Dương
Em cám ơn anh!
Sau khi chạy thử code em thấy có vấn đề sau ạ!:
1/Khi xóa từ khóa " Đắp đất "ở cả cột A và cột B trong sheet "TU KHOA LAY MTN" thì em thấy khi chạy code nội dung ở ô E12 trong sheet "Danh muc NT CVXD" bị lặp lại sau mỗi lần chạy code (nhấn 04 lần chạy code thì nội dung ở ô E12 trong sheet "Danh muc NT CVXD" bị lặp lại 04 lần- hình thứ 1, hình thứ 2)
2/ Khi thêm từ khóa "Trát tường" và chạy code thì vẫn gặp vấn đề nêu ở trên mặc dù không xóa từ khóa "Trát tường" nhưng mỗi lần chạy code nội dung vẫn bị lặp lại (hình 03, hình 04)
Anh xem giúp em ạ!
Bạn dùng code dưới.
Code bài trước ở mảng TKhoa lấy A2:B6 cố định nên khi xóa bớt dòng thì có giá trị rỗng.
Mã:
Sub Button3_Click()
Dim TKhoa(), Rw As Long, i As Long, j As Long, Rng As Range
Dim Rw2 As Long, Tmp As String
Rw2 = Sheets("TU KHOA LAY MTN").Range("B65535").End(xlUp).Row
TKhoa = Sheets("TU KHOA LAY MTN").Range("A2:B" & Rw2).Value
Rw = Sheets("Danh muc NT CVXD").Range("E65535").End(xlUp).Row
Set Rng = Sheets("Danh muc NT CVXD").Range("E9:E" & Rw)
For i = Rng.Rows.Count To 1 Step -1
    For j = 1 To UBound(TKhoa, 1)
        Tmp = Trim(TKhoa(j, 2)) & " "
        If InStr(Rng(i), TKhoa(j, 1)) And TKhoa(j, 1) <> "" And _
            InStr(Rng(i + 1), TKhoa(j, 2)) = 0 Then
            Rng(i).Offset(1).EntireRow.Insert
            Rng(i).Offset(1) = Replace(Rng(i), TKhoa(j, 1), Tmp)
        End If
    Next j
Next i
End Sub
 

File đính kèm

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Dạ
@Cát Lượng : Ở hình 234.png thì cột D để link sang Tên mẫu?
Cột B sao lại phải thêm chữ "Công tác" vào làm gì? Ai chỉ cho bạn là phải thêm vào?
Có thể dùng hàm nối chuỗi (&); tách chuỗi (MID) đâu cần dùng code làm gì.
Vâng nếu dùng hàm nối chuỗi (&); tách chuỗi (MID) như anh nói thì của em gồm nhiều nội dung xen kẽ nhau, không theo quy luật nào, e nghĩ sẽ nhanh hơn ạ!
 

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Bạn dùng code dưới.
Code bài trước ở mảng TKhoa lấy A2:B6 cố định nên khi xóa bớt dòng thì có giá trị rỗng.
Mã:
Sub Button3_Click()
Dim TKhoa(), Rw As Long, i As Long, j As Long, Rng As Range
Dim Rw2 As Long, Tmp As String
Rw2 = Sheets("TU KHOA LAY MTN").Range("B65535").End(xlUp).Row
TKhoa = Sheets("TU KHOA LAY MTN").Range("A2:B" & Rw2).Value
Rw = Sheets("Danh muc NT CVXD").Range("E65535").End(xlUp).Row
Set Rng = Sheets("Danh muc NT CVXD").Range("E9:E" & Rw)
For i = Rng.Rows.Count To 1 Step -1
    For j = 1 To UBound(TKhoa, 1)
        Tmp = Trim(TKhoa(j, 2)) & " "
        If InStr(Rng(i), TKhoa(j, 1)) And TKhoa(j, 1) <> "" And _
            InStr(Rng(i + 1), TKhoa(j, 2)) = 0 Then
            Rng(i).Offset(1).EntireRow.Insert
            Rng(i).Offset(1) = Replace(Rng(i), TKhoa(j, 1), Tmp)
        End If
    Next j
Next i
End Sub
Vâng đúng như ý em ạ! em nhờ anh giúp em nốt bước 2 ạ!
Em xóa bớt 01 cột ở sheet "TU KHOA LAY MTN" cho gọn (hình 1)
Cũng tương tự như bước 1 anh giúp em bước 2 (lần này từ khóa ở cột A và C, lần trước ở cột A và B)
Sau khi chạy code thì dòng mới được chèn và nội dung được điền vào ngay liền sau dòng nội dung ban đầu.
ki4.pngki7.png
 

File đính kèm

leonguyenz

Thành viên mới
Thành viên BQT
Moderator
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,439
Được thích
7,809
Điểm
610
Nơi ở
Bình Dương
Xem code và file đính kèm.
Không biết đúng ý không vì chỉ thực hiện 1 code.
Mã:
Sub Button3_Click()
Dim TKhoa(), Rw As Long, i As Long, j As Long, Rng As Range
Dim Rw2 As Long
Rw2 = Sheets("TU KHOA LAY MTN").Range("A65535").End(xlUp).Row
TKhoa = Sheets("TU KHOA LAY MTN").Range("A2:C" & Rw2).Value
Rw = Sheets("Danh muc NT CVXD").Range("E65535").End(xlUp).Row
Set Rng = Sheets("Danh muc NT CVXD").Range("E9:E" & Rw)
For i = Rng.Rows.Count To 1 Step -1
    For j = 1 To UBound(TKhoa, 1)
        If InStr(Rng(i), TKhoa(j, 1)) And TKhoa(j, 1) <> "" And _
                InStr(Rng(i + 1), TKhoa(j, 3)) = 0 Then
            Rng(i).Offset(1).Resize(2).EntireRow.Insert
            Rng(i).Offset(1) = Replace(Rng(i), TKhoa(j, 1), TKhoa(j, 3))
            Rng(i).Offset(2) = Replace(Rng(i), TKhoa(j, 1), TKhoa(j, 2))
        End If
    Next j
Next i
End Sub
 

File đính kèm

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
Xem code và file đính kèm.
Không biết đúng ý không vì chỉ thực hiện 1 code.
Mã:
Sub Button3_Click()
Dim TKhoa(), Rw As Long, i As Long, j As Long, Rng As Range
Dim Rw2 As Long
Rw2 = Sheets("TU KHOA LAY MTN").Range("A65535").End(xlUp).Row
TKhoa = Sheets("TU KHOA LAY MTN").Range("A2:C" & Rw2).Value
Rw = Sheets("Danh muc NT CVXD").Range("E65535").End(xlUp).Row
Set Rng = Sheets("Danh muc NT CVXD").Range("E9:E" & Rw)
For i = Rng.Rows.Count To 1 Step -1
    For j = 1 To UBound(TKhoa, 1)
        If InStr(Rng(i), TKhoa(j, 1)) And TKhoa(j, 1) <> "" And _
                InStr(Rng(i + 1), TKhoa(j, 3)) = 0 Then
            Rng(i).Offset(1).Resize(2).EntireRow.Insert
            Rng(i).Offset(1) = Replace(Rng(i), TKhoa(j, 1), TKhoa(j, 3))
            Rng(i).Offset(2) = Replace(Rng(i), TKhoa(j, 1), TKhoa(j, 2))
        End If
    Next j
Next i
End Sub
Dạ, anh có thể giúp em tách riêng biệt làm 02 đoạn code có tác như trên được không ạ?
Ví lúc cần dùng code này, lúc cần dùng như kia nên ngay từ đầu em muốn tách ra làm 02 code để riêng biệt không liên quan ạ!
Khi chạy 02 code độc lập.
Cám ơn anh nhiều!
 

vanle33

Thành viên gạo cội
Tham gia ngày
30 Tháng mười 2008
Bài viết
5,491
Được thích
3,750
Điểm
860
Nơi ở
Thị xã Sơn Tây - TP Hà Nội
1) Ở #9 của a có 3 câu hỏi (3 dấu chấm hỏi) mà đã thấy bạn bạn trả lời gì đâu.
Nếu mà lúc thì chèn thêm 1 dòng lúc chèn n dòng + với hàng trăm mã đầu việc thì công thức chỉ nằm trong 1 cột nằm dưới các cột dữ liệu ban đầu thì đúng là khó dùng công thức.
2) Tại sao bạn không suy nghĩ theo hướng dùng công thức cho cùng 1 hàng thôi nhưng thêm cột bên cạnh.
Ví dụ: ở hình 1.png bài #1 F9="Công tác"&E9 , G9=MID() .... rồi link các dữ liệu đã có công thức trong E9, F9, G9 sang các Biên bản.
 
Lần chỉnh sửa cuối:

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32
1) Ở 19 của a có 3 câu hỏi (3 dấu chấm hỏi) mà đã thấy bạn bạn trả lời gì đâu.
Nếu mà lúc thì chèn thêm 1 dòng lúc chèn n dòng + với hàng trăm mã đầu việc thì công thức chỉ nằm trong 1 cột nằm dưới các cột dữ liệu ban đầu thì đúng là khó dùng công thức.
2) Tại sao bạn không suy nghĩ theo hướng dùng công thức cho cùng 1 hàng thôi nhưng thêm cột bên cạnh.
Ví dụ: ở hình 1.png bài #1 F9="Công tác"&E9 , G9=MID() .... rồi link các dữ liệu đã có công thức trong E9, F9, G9 sang các Biên bản.
Vâng, nếu thêm cột thì cấu trúc bố cục của em sẽ bị thay đổi, vì bản chất của em là add in trả phí, em muốn thêm code vào để tiện hơn anh ạ!
Bài đã được tự động gộp:

Đã ok rồi anh ạ! em nhờ anh thêm một chút xíu nữa được không ạ!
Anh cho em thêm cái định dạng
- Khi chạy code A thì nội dụng ô chèn vào có định dạng chữ: đứng, có màu (như hình dưới)
- Khi chạy code B thì nội dung ô chèn vào có đụng dạng chữ nghiêng, có màu (như hình dưới).
maut.png
 
Lần chỉnh sửa cuối:

Cát Lượng

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
320
Được thích
36
Điểm
185
Tuổi
32

dangky47h

Thành viên thường trực
Tham gia ngày
4 Tháng chín 2017
Bài viết
312
Được thích
33
Điểm
185
Tuổi
32
Chào anh, anh ơi anh cho em hỏi thêm một chút:
Khi dùng code a giúp cho em với nội dung trên thì được rồi, nhưng có vấn đề này:
Khi em thêm nội dung nào đó vào sheet (Danh muc NT CVXD) và chạy code thì code lại chèn thêm những dòng mà code đã thêm trong lần trước (lần mà chưa thêm nội dung vào sheet (Danh muc NT CVXD)
Anh có cách nào khắc phục giúp em vấn đề này không ạ? để khi chạy code (Code A và code B thì nội dung đã được chèn lần 01 không thêm vào nữa, mà chỉ có cài nào có thêm nội dung mới (sheet (Danh muc NT CVXD) thêm nội dung nào đó) thì sẽ được chèn tương ứng với nội dung đã thêm vào thôi!
Anh giúp em mới nhé! hi
02.png01.png
 
Top Bottom