Tự động chèn dòng và điền nội dung vào ô theo từ khóa

Liên hệ QC

vc_đi chơi

Thành viên hoạt động
Tham gia
21/9/19
Bài viết
159
Được thích
32
Xin chào các anh/chị trên diễn đàn!
Em có bài toán sau xin được sự giúp đỡ để em có thể áp dụng vào công việc.

Em muốn được giúp đỡ một đoạn code để khi chạy code tự động chèn dòng lên phía ngay bên trên dòng đó và điền nội dung vào ô cần điền theo từ khóa đầu câu nội dung trong ô, cụ thể như sau:
1/Trong Sheet (Danh muc NT cong viec): ứng với mỗi mã CV bao gồm dữ liệu:
Ví dụ:
Tương ứng với mã CV: AB.1001 thì bao gồm:
Số thứ tự (ô A9), Mã CV (ô D9), Mã LM (ô E10) và nội dung công việc (ô G9), nội dung lấy mẫu (ô G10) .
Xét từ khóa đầu dòng ô G9 : "Đắp đất" để chèn dòng lên luôn phía liền trên hàng đó và điền nội dung lấy mẫu vào ô trong cột H (sau khi chèn dòng thì ô điền là ô H11)
2/ Trong Sheet (Toi_TKhoa) là Sheet quy định từ khóa đầu dòng: dựa vào từ khóa đó để chèn dòng và điền dữ liệu
Em đăng hình để cụ thể và file đính kèm
Hình thứ nhất: File ban đầu
Hình Thứ 2 : Bài toán yêu cầu
Hình thứ 3: Kết quả mong muốn (làm bằng tay)
Rất mong các anh/chị giúp đỡ
****Giả sử sau khi có code để giải quyết bài toán và đã chạy code đó rồi thì có thể lấy lại bài toán như lúc chưa chạy code được không ạ?

Rất mong được sự giúp đỡ từ phía các anh/chị trên diễn đàn!
File ban dầu

file ban dau.png

Yêu cầu bài toán:

yc.png

Kết quả làm bằng tay:

req.png
 

File đính kèm

  • File ban dau.xlsx
    51.2 KB · Đọc: 7
  • File lam bang tay.xlsx
    52.2 KB · Đọc: 7

File đính kèm

  • File ban dau.xlsb
    47.1 KB · Đọc: 7
Dạ! Em cảm ơn anh/chị.
Em vừa xem file anh/chị giúp.
Khi chạy code có vấn đề sau nhờ anh/chị xem cho em:


Khi nhấn chạy code lần thứ nhất:
loi1.png

Khi nhấn chạy code lần 2 và lần thứ 3:

anh/chị giúp em chỉ có những dữ liệu mới điền vào mới đươc cập nhập còn những cái đã chạy code rồi thì dữ nguyên. em chạy code lần 2 và 3 báo như sau:
23.png




Bài đã được tự động gộp:


Bài đã được tự động gộp:
 

File đính kèm

  • Ket qua.xlsb
    47.9 KB · Đọc: 4
Cái lỗi N/A là do danh mục của bạn thiếu. Còn cái lặp mình sẽ sửa lại sau, mình về rồi.
 
Cái lỗi N/A là do danh mục của bạn thiếu. Còn cái lặp mình sẽ sửa lại sau, mình về rồi.
Dạ vâng, anh/chị xem giúp em. Nếu có thể như bài em đã nêu anh/chị lưu tâm giúp em:
Em cũng không biết diễn đạt thế nào cho khoa học, em hiểu nôm na là: Giúp em một đoạn code để có thể lấy lại bài toán ở trạng thái khi chưa chạy code (nghĩa là sau khi chạy code để diền dữ liệu như mong muốn rồi thì mình có thể nhấn nút nào đó nữa để lấy lại bài toán trước khi vừa chạy đoạn code lần 1)
 
Có bài này gần giống yêu cầu của bạn:
 
Có bài này gần giống yêu cầu của bạn:
Dạ! đây là phần mềm tính phí, em muốn bổ sung thêm code vào để phục vụ cho công việc.
Em có vừa coi bài thầy gửi.
Cũng na na một chút.
File em vừa xem cũng chèn dòng nhưng chỉ chèn được một mã thì phải.
Thầy xem giúp em mới ạ!
 
Lần chỉnh sửa cuối:
Dạ! Em cảm ơn anh/chị.
Em vừa xem file anh/chị giúp.
Khi chạy code có vấn đề sau nhờ anh/chị xem cho em:


Khi nhấn chạy code lần thứ nhất:
View attachment 242315

Khi nhấn chạy code lần 2 và lần thứ 3:

anh/chị giúp em chỉ có những dữ liệu mới điền vào mới đươc cập nhập còn những cái đã chạy code rồi thì dữ nguyên. em chạy code lần 2 và 3 báo như sau:
View attachment 242316




Bài đã được tự động gộp:


Bài đã được tự động gộp:
File này đã khắc phục lỗi chạy lặp và các lỗi chính tả, (mình tính viết chơi chơi cho vui, chứ cũng không nghĩ bạn bắt bẻ từ ngữ ghê quá hết thấy vui rồi)
Bạn xem thử
Mình đang bận rồi, sẽ không còn lần nữa đâu (bạn mở code ra đọc mình có ghi chú rõ trong đó rồi, tự mày mò nghiên cứu mà làm bạn ạ)
Xôi gấc do tự mình làm ra ăn sẽ no và ngon hơn đấy bạn nhé
 

File đính kèm

  • File ban dau.xlsb
    49.9 KB · Đọc: 8
Lần chỉnh sửa cuối:
File này đã khắc phục lỗi chạy lặp và các lỗi chính tả, (mình tính viết chơi chơi cho vui, chứ cũng không nghĩ bạn bắt bẻ từ ngữ ghê quá hết thấy vui rồi)
Bạn xem thử
Mình đang bận rồi, sẽ không còn lần nữa đâu (bạn mở code ra đọc mình có ghi chú rõ trong đó rồi, tự mày mò nghiên cứu mà làm bạn ạ)
Xôi gấc do tự mình làm ra ăn sẽ no và ngon hơn đấy bạn nhé
Vâng, em xin cảm ơn anh/chị.
Không phải em bắt bẻ mà em xin được giúp và nhờ anh/chị để em có thể ứng dụng vào công việc thôi.
Nếu mà có lỗi như vậy em phải sửa thủ công.
Em cũng không biết vba để chỉnh sửa. Nếu có gì phật ý xin được thứ lỗi!
Em có xem code anh/chị làm giúp.
Giả sử trong sheet (Toi_TuKhoa) em xóa :dữ liệu ban đầu (Xóa nội dung ô C10) hoặc ô B10 hoặc xóa cả 2 nội dung trong ô C10 và B10 thì ứng với mã công việc được xóa nội dung như trên thì trong sheet (Danh muc NT cong viec) tương ứng với mã CV đó có thể như lúc ban đầu (như lúc chưa chạy code để tạo dòng được không ạ?) và nếu không có mã CV trong ô B10 hoặc nội dung CV trong ô B10 thì khi chạy code "Tạo Dòng" sẽ không chèn dòng và điền nội dung lấy mẫu tương ứng với mã CV.
Rất mong được sự giúp đỡ của các anh/chị trên diễn đàn GPE.
aaa.pngbbbbbbbbbbb.png
 
Lần chỉnh sửa cuối:
Xin chào các anh/chị trên diễn đàn!
Em có bài toán sau xin được sự giúp đỡ để em có thể áp dụng vào công việc.

Em muốn được giúp đỡ một đoạn code để khi chạy code tự động chèn dòng lên phía ngay bên trên dòng đó và điền nội dung vào ô cần điền theo từ khóa đầu câu nội dung trong ô, cụ thể như sau:
1/Trong Sheet (Danh muc NT cong viec): ứng với mỗi mã CV bao gồm dữ liệu:
Ví dụ:
Tương ứng với mã CV: AB.1001 thì bao gồm:
Số thứ tự (ô A9), Mã CV (ô D9), Mã LM (ô E10) và nội dung công việc (ô G9), nội dung lấy mẫu (ô G10) .
Xét từ khóa đầu dòng ô G9 : "Đắp đất" để chèn dòng lên luôn phía liền trên hàng đó và điền nội dung lấy mẫu vào ô trong cột H (sau khi chèn dòng thì ô điền là ô H11)
2/ Trong Sheet (Toi_TKhoa) là Sheet quy định từ khóa đầu dòng: dựa vào từ khóa đó để chèn dòng và điền dữ liệu
Em đăng hình để cụ thể và file đính kèm
Hình thứ nhất: File ban đầu
Hình Thứ 2 : Bài toán yêu cầu
Hình thứ 3: Kết quả mong muốn (làm bằng tay)
Rất mong các anh/chị giúp đỡ
****Giả sử sau khi có code để giải quyết bài toán và đã chạy code đó rồi thì có thể lấy lại bài toán như lúc chưa chạy code được không ạ?

Rất mong được sự giúp đỡ từ phía các anh/chị trên diễn đàn!
File ban dầu



Yêu cầu bài toán:




Kết quả làm bằng tay:
Bạn làm rõ thêm: Cột Mã CV của sheet "Toi_TuKhoa" & sheet "Danh muc NT cong viec" là có đồng nhất hay không?
 
Bạn làm rõ thêm: Cột Mã CV của sheet "Toi_TuKhoa" & sheet "Danh muc NT cong viec" là có đồng nhất hay không?
Dạ! đồng nhất ạ! em vô ý vừa xem lại ảnh, em sửa lại file đính kèm #1 cho đồng nhất nhưng đã không hiện được sửa lại nữa!
Xin được sự giúp đỡ của anh/chị.
Em cảm ơn nhiều
Bài đã được tự động gộp:
 
Dạ! đồng nhất ạ! em vô ý vừa xem lại ảnh, em sửa lại file đính kèm #1 cho đồng nhất nhưng đã không hiện được sửa lại nữa!
Xin được sự giúp đỡ của anh/chị.
Em cảm ơn nhiều
Bài đã được tự động gộp:
Bạn chạy thử code chèn thêm dòng dưới đây
Xóa dòng sẽ để sau
Mã:
Option Explicit

Sub A_Chenthem()
Dim MCV
Dim Tam
Dim rws, cls, i, j, k
Dim DicTt As Object
Set DicTt = CreateObject("Scripting.Dictionary")
With Sheets("Toi_TuKhoa")
    rws = .Range("I" & Rows.Count).End(xlUp).Row
    MCV = .Range("B10:I" & rws)
    rws = UBound(MCV)
End With
ReDim Tam(1 To 5)
For i = 1 To rws
    Tam(1) = MCV(i, 2)
    Tam(2) = MCV(i, 4)
    Tam(3) = MCV(i, 5)
    Tam(4) = "LM"
    Tam(5) = MCV(i, 8)
    DicTt(MCV(i, 1)) = Tam
Next i
With Sheets("Danh muc NT cong viec")
    .Select
    rws = .Range("D" & Rows.Count).End(xlUp).Row
    For i = rws To 9 Step -1
        If DicTt.Exists(.Range("D" & i).Value) = True Then
            Tam = DicTt(.Range("D" & i).Value)
            If .Range("D" & i - 1) <> Tam(2) Then
                .Range("D" & i).EntireRow.Insert
                .Range("A" & i + 1 & ":BL" & i + 1).Copy
                .Range("A" & i).PasteSpecial Paste:=xlPasteFormats
                Application.CutCopyMode = False
                .Range("A" & i).Select
                
                .Range("A" & i) = .Range("A" & i + 1)
                .Range("D" & i) = Tam(2)
                .Range("F" & i) = .Range("F" & i + 1)
                .Range("G" & i) = Replace(.Range("G" & i + 1), Tam(1), Tam(3))
                .Range("H" & i + 2) = Replace(.Range("G" & i + 1), Tam(1), Tam(5))
            End If
        End If
    Next i
End With
End Sub
 
Bạn chạy thử code chèn thêm dòng dưới đây
Xóa dòng sẽ để sau
Mã:
Option Explicit

Sub A_Chenthem()
Dim MCV
Dim Tam
Dim rws, cls, i, j, k
Dim DicTt As Object
Set DicTt = CreateObject("Scripting.Dictionary")
With Sheets("Toi_TuKhoa")
    rws = .Range("I" & Rows.Count).End(xlUp).Row
    MCV = .Range("B10:I" & rws)
    rws = UBound(MCV)
End With
ReDim Tam(1 To 5)
For i = 1 To rws
    Tam(1) = MCV(i, 2)
    Tam(2) = MCV(i, 4)
    Tam(3) = MCV(i, 5)
    Tam(4) = "LM"
    Tam(5) = MCV(i, 8)
    DicTt(MCV(i, 1)) = Tam
Next i
With Sheets("Danh muc NT cong viec")
    .Select
    rws = .Range("D" & Rows.Count).End(xlUp).Row
    For i = rws To 9 Step -1
        If DicTt.Exists(.Range("D" & i).Value) = True Then
            Tam = DicTt(.Range("D" & i).Value)
            If .Range("D" & i - 1) <> Tam(2) Then
                .Range("D" & i).EntireRow.Insert
                .Range("A" & i + 1 & ":BL" & i + 1).Copy
                .Range("A" & i).PasteSpecial Paste:=xlPasteFormats
                Application.CutCopyMode = False
                .Range("A" & i).Select
         
                .Range("A" & i) = .Range("A" & i + 1)
                .Range("D" & i) = Tam(2)
                .Range("F" & i) = .Range("F" & i + 1)
                .Range("G" & i) = Replace(.Range("G" & i + 1), Tam(1), Tam(3))
                .Range("H" & i + 2) = Replace(.Range("G" & i + 1), Tam(1), Tam(5))
            End If
        End If
    Next i
End With
End Sub
Em xin cảm ơn! Chúc anh/chị ngày mới nhiều may mắn!
Em chạy thử code anh/chị giúp: đã chèn được dòng và điền được dữ liệu như mong muốn.
Nhờ anh/chị giúp em xóa dòng được chèn và xóa nội dung lấy mẫu được điền, có vấn đề sau em xin được hỏi thêm, cụ thể như sau:
1/ Xóa dòng em trình bày lại như sau (có thay đổi so với ban đầu một chút):
Xóa nội dung đã được điền lấy mẫu và xóa dòng đã được chèn để lấy lại dữ liệu ban đầu tương ứng với mã CV đó:
Giả sử tương ứng với mã CV: AB.1001 trong sheet (Toi_TuKhoa):
+ Nếu xóa ô F10 trong "Nội dung được chèn trong ô của cột G được" thì sẽ xóa dòng (dòng số 9) được chèn.
+ Xóa ô I10 trong nội dung "Từ khóa được điền vào để thay thế các từ khóa đầu câu tương ứng với dòng lấy mẫu" thì sẽ xóa được nội dung đã được điền vào trong ô H11.
2/ Trong Sheet (Toi_TuKhoa) sau khi đã chạy code: tương ứng với mã CV: AB.1001 Nhờ anh/chị giúp để khi sửa lại nội dung ô F10 và ô I10 so với nội dung ban đầu thì cập nhập được dữ liệu thay thay đổi đó ở dòng đã chèn và dữ liệu đã được điền.
Rất mong được anh/chị giúp đỡ!
 
Lần chỉnh sửa cuối:
...
Nhờ anh/chị giúp em xóa dòng được chèn và xóa nội dung lấy mẫu được điền, có vấn đề sau em xin được hỏi thêm, cụ thể như sau:
1/ Xóa dòng em trình bày lại như sau (có thay đổi so với ban đầu một chút):
Xóa nội dung đã được điền lấy mẫu và xóa dòng đã được chèn để lấy lại dữ liệu ban đầu tương ứng với mã CV đó:
Giả sử tương ứng với mã CV: AB.1001 trong sheet (Toi_TuKhoa):
+ Nếu xóa ô F10 trong "Nội dung được chèn trong ô của cột G được" thì sẽ xóa dòng (dòng số 9) được chèn.
+ Xóa ô I10 trong nội dung "Từ khóa được điền vào để thay thế các từ khóa đầu câu tương ứng với dòng lấy mẫu" thì sẽ xóa được nội dung đã được điền vào trong ô H11.
2/ Trong Sheet (Toi_TuKhoa) sau khi đã chạy code: tương ứng với mã CV: AB.1001 giờ em muốn sửa lại nội dung ô F10 và ô I10 so với nội dung ban đầu, để cập nhập được dữ liệu thay thay đối đó thì phải làm thế nào ạ?
Rất mong được anh/chị giúp đỡ!
Khi nào bạn cần thực hiện công việc xóa:
1. Chạy 1 đoạn code là xóa dòng & nội dung chèn thêm không theo điều kiện nào khác. Tức là bấm là xóa
2. Thay đổi tại I10 hoặc F10 trong sheet To_Tukhoa thì xóa
---

Phần chữ đậm của bạn: Xóa nhưng mã CV vẫn còn?
 
Khi nào bạn cần thực hiện công việc xóa:
1. Chạy 1 đoạn code là xóa dòng & nội dung chèn thêm không theo điều kiện nào khác. Tức là bấm là xóa
2. Thay đổi tại I10 hoặc F10 trong sheet To_Tukhoa thì xóa
---

Phần chữ đậm của bạn: Xóa nhưng mã CV vẫn còn?
1/ Dạ! Nếu xóa nội dung trong ô F10 thì dòng được chèn sẽ bị xóa hoặc xóa nội dung trong ô I10 thì nội dung đã được điền sẽ bị xóa.
(Chỉ xóa những dòng đã chèn và nội dung đã được điền, mã CV vẫn còn ạ!
Cái nội dung mình xóa trong sheet (Toi_TuKhoa) là mình xóa bằng tay theo ý muốn, Sau khi xóa bằng tay nhờ anh/chị giúp một đoạn code để xóa hàng đã chèn và nội dung đã điền)
2/ Còn khi thayđổi dữ liệu trong ô E10, F10 và ô I10 thì sẽ cập nhập được dữ liệu mới của dòng và nội dung được điền trong Sheet(Danh muc NT Cong viec).
Anh/chị xem giúp em!
 
1/ Dạ! Nếu xóa nội dung trong ô F10 thì dòng được chèn sẽ bị xóa hoặc xóa nội dung trong ô I10 thì nội dung đã được điền sẽ bị xóa.
(Chỉ xóa những dòng đã chèn và nội dung đã được điền, mã CV vẫn còn ạ!
Cái nội dung mình xóa trong sheet (Toi_TuKhoa) là mình xóa bằng tay theo ý muốn, Sau khi xóa bằng tay nhờ anh/chị giúp một đoạn code để xóa hàng đã chèn và nội dung đã điền)
2/ Còn khi thayđổi dữ liệu trong ô E10, F10 và ô I10 thì sẽ cập nhập được dữ liệu mới của dòng và nội dung được điền trong Sheet(Danh muc NT Cong viec).
Anh/chị xem giúp em!
Có nghĩa là khi cột F & I của sheet (Toi_TuKhoa) thay đổi thì sheet bên kia thay đổi theo. Nếu ô rỗng thì bên kia xóa, khác rỗng thì cập nhật?
Việc xóa trực tiếp trở về như ban đầu mà không theo điều kiện gì là bỏ?

Chốt nhé
 
Có nghĩa là khi cột F & I của sheet (Toi_TuKhoa) thay đổi thì sheet bên kia thay đổi theo. Nếu ô rỗng thì bên kia xóa, khác rỗng thì cập nhật?
Việc xóa trực tiếp trở về như ban đầu mà không theo điều kiện gì là bỏ?

Chốt nhé
Bài đã được tự động gộp:

Dạ! anh/chị bổ sung cho em xin thêm cái nội dung trong cột E của Sheet (Toi_TuKhoa) thay đổi thì nội dung trong ô của cột được chèn (cột D) trong Sheet (Dannh muc NT cong viec) cũng được cập nhập theo ạ!
Em xin cảm ơn!
2222.png
 
Bài đã được tự động gộp:

Dạ! anh/chị bổ sung cho em xin thêm cái nội dung trong cột E của Sheet (Toi_TuKhoa) thay đổi thì nội dung trong ô của cột được chèn (cột D) trong Sheet (Dannh muc NT cong viec) cũng được cập nhập theo ạ!
Em xin cảm ơn!
View attachment 242403
Chuột phải vào sheet tab "Toi_TuKhoa", chọn view code, dán đoạn code dưới đây vào --> nhấn alt+Q
Thử thay đổi bên sheet toi_tukhoa các cột E, F, I để kiểm tra
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 6 Then
    Dim tukhoa0
    Dim mcv0, mcv1
    Dim rws, i
    tukhoa0 = Target.Offset(, -3)
    mcv0 = Target.Offset(, -4).Value
    mcv1 = Target.Offset(, -1).Value
    With Sheets("Danh muc NT cong viec")
        rws = .Range("D" & Rows.Count).End(xlUp).Row
        For i = rws To 9 Step -1
            If .Range("D" & i).Value = mcv1 And .Range("D" & i + 1).Value = mcv0 Then
                If Target.Value = "" Then
                    .Range("D" & i).EntireRow.Delete
                Else
                    .Range("G" & i).Value = Replace(.Range("G" & i + 1).Value, tukhoa0, Target.Value)
                End If
                Exit For
            End If
        Next i
    End With
End If

If Target.Column = 9 Then
    tukhoa0 = Target.Offset(, -6)
    mcv0 = Target.Offset(, -7).Value
    mcv1 = Target.Offset(, -4).Value
    With Sheets("Danh muc NT cong viec")
        rws = .Range("D" & Rows.Count).End(xlUp).Row
        For i = rws To 9 Step -1
            If .Range("D" & i).Value = mcv1 And .Range("D" & i + 1).Value = mcv0 Then
                .Range("H" & i + 2).Value = Replace(.Range("G" & i + 1).Value, tukhoa0, Target.Value)
                Exit For
            End If
        Next i
    End With
End If

If Target.Column = 5 Then
    mcv0 = Target.Offset(, -3).Value
    With Sheets("Danh muc NT cong viec")
        rws = .Range("D" & Rows.Count).End(xlUp).Row
        For i = rws To 9 Step -1
            If .Range("D" & i).Value = mcv0 And .Range("A" & i).Value = .Range("A" & i - 1).Value Then
                .Range("D" & i - 1).Value = Target.Value
                Exit For
            End If
        Next i
    End With
End If
End Sub
 
Web KT
Back
Top Bottom