Chương trình Excel VBA tìm kiếm bất kỳ sự xuất hiện nào của chuỗi "Jefferson" trong cột "F" cụ thể và sao chép toàn bộ hàng đó xuống hàng bên dưới. Giữ nguyên tất cả dữ liệu.
Tôi khá mới làm quen với VBA và đã cố gắng trong một tuần để viết chương trình tìm kiếm bất kỳ sự xuất hiện nào của chuỗi "Jefferson" trong cột cụ thể "F" và sao chép toàn bộ hàng đó xuống hàng bên dưới, giữ nguyên tất cả dữ liệu. Nhưng chương trình chỉ sao chép lần xuất hiện đầu tiên và sao chép đè lên dữ liệu ở hàng bên dưới thay vì chèn thêm hàng và sao chép vào hàng đó. Rất mong nhận được sự giúp đỡ. Cảm ơn trước.
Trả lời:
Hãy thử cách này. Đảm bảo bạn đang ở trên trang tính đang hoạt động khi thực hiện thao tác này.
Tùy chọn rõ ràng
Sub FindJeffersonAndFillDown()
Dim myWS As Excel.Worksheet
Dim i As Long
Dim myRange As Excel.Range
Dim myCell As Excel.Range
Dim lRow As Long
Đặt myWS = ActiveSheet
lRow = myWS.Cells(myWS.Rows.Count, 6).End(xlUp).Row
Đối với i = lRow đến 1 Bước -1
Đặt myCell = myWS.Cells(i, 6)
Nếu LCase(myCell.Text) = "jefferson" thì
Đặt myRange = myCell.Offset(1, 0).EntireRow
myRange.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
myRange.Offset(-1, 0).FillDown
Kết thúc nếu
Tiếp theo tôi
MsgBox(Hoàn tất)
End Sub
Trả lời:
Hãy thử cách này. Đảm bảo bạn đang ở trên trang tính đang hoạt động khi thực hiện thao tác này.
Tùy chọn rõ ràng
Sub FindJeffersonAndFillDown()
Dim myWS As Excel.Worksheet
Dim i As Long
Dim myRange As Excel.Range
Dim myCell As Excel.Range
Dim lRow As Long
Đặt myWS = ActiveSheetlRow = myWS.Cells(myWS.Rows.Count, 6).End(xlUp).Row
Đối với i = lRow đến 1 Bước -1
Đặt myCell = myWS.Cells(i, 6)
Nếu LCase(myCell.Text) = "jefferson" thì
Đặt myRange = myCell.Offset(1, 0).EntireRow
myRange.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
myRange.Offset(-1, 0).FillDown
Kết thúc nếuTiếp theo tôi
MsgBox(Hoàn tất)End Sub
Cảm ơn bạn rất nhiều, sự giúp đỡ của bạn rất hữu ích. Tôi vẫn đang học hỏi và diễn đàn này cùng các thành viên rất giàu kiến thức, tôi đã học được rất nhiều điều. Cảm ơn một lần nữa!
Trả lời:
Xin chào, >
>Một lần nữa cảm ơn sự giúp đỡ của bạn. Tôi có một câu hỏi mà tôi đang cố gắng tìm hiểu. Tôi biết bạn đã sử dụng LCase cho "jefferson". Thực ra tôi đang cố gắng tìm một cụm từ bắt đầu bằng >
> "AL-JEFERSON???" >
>Trong đó ??? có thể có nhiều biến thể khác nhau. Tôi có nên sử dụng UCase và cú pháp khác nhau cho "bắt đầu bằng" so với chuỗi chính xác không? Cảm ơn bạn một lần nữa.
Trả lời:
Nếu bạn muốn tìm một cụm từ kết thúc bằng Jefferson, hãy sử dụng cụm từ này.
Nếu LCase(myCell.Text) giống "*jefferson" thì
Nếu bạn muốn tìm thứ gì đó có chứa Jefferson, hãy sử dụng cái này.
Nếu LCase(myCell.Text) giống "*jefferson*" thì
Nếu bạn muốn tìm thứ gì đó bắt đầu bằng Jefferson, hãy dùng cái này.
Nếu LCase(myCell.Text) giống "jefferson" thì
Điều đó có giúp ích gì không?
Trả lời:
Ối, cần phải sửa cái gì đó.
Nếu bạn muốn tìm thứ gì đó bắt đầu bằng Jefferson, hãy dùng cái này.
Nếu LCase(myCell.Text) giống "jefferson*" thì
Tôi quên dấu hoa thị ở cuối.
Trả lời:
Cảm ơn bạn rất nhiều, vậy là xong! Tôi nghĩ thử thách lớn nhất là học các hàm, sau đó là cú pháp rồi đến việc lập kế hoạch chi tiết cho chương trình. Cảm ơn bạn một lần nữa, chúc bạn một ngày tốt lành!
Trả lời:
Xin chào,
Hôm nay tôi đã thực hiện một số thử nghiệm và đoạn mã bên dưới tìm thấy lần xuất hiện đầu tiên của "AL-JEFFERSON CO" và sao chép nó xuống hàng bên dưới, đồng thời đổi màu phông chữ thành vbBlue, tuy nhiên, nó không làm điều tương tự với hai hàng bên dưới nữa. Ví dụ:
hàng 2 AL-JEFFERSON CO doanh số bán hàng - đây là trường hợp đầu tiên, được sao chép
Hàng 3 AL-JEFFERSON CO doanh số bán hàng - đây là bản sao có phông chữ chuyển sang vbBlue
hàng 4 AL-JEFFERSON CO người bán - đây là trường hợp thứ hai không được sao chép
hàng 5 AL-JEFFERSON CO người tiêu dùng - đây là lần thứ ba không được sao chép
Đây là đoạn mã của họ:
Sub Step1_7()Dim myWS As Excel.WorksheetDim i As LongDim myRange As Excel.RangeDim myCell As Excel.RangeDim lRow As LongĐặt myWS = ActiveSheetlRow = myWS.Cells(myWS.Rows.Count, 6).End(xlUp).RowĐối với i = lRow đến 1 Bước -1Đặt myCell = myWS.Cells(i, 6)Nếu Format(myCell.Text) có dạng "AL-JEFFERSON CO*" thìĐặt myRange = myCell.Offset(1, 0).EntireRowmyRange.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbovemyRange.Offset(-1, 0).FillDownmyRange.Offset(-1, 0).Font.Color = vbBlueKết thúc nếuTiếp theo tôiEnd SubĐiều kỳ lạ là nếu tôi chạy riêng chương trình với một sổ làm việc mới và dữ liệu thử nghiệm thì nó hoạt động. Nhưng khi tôi chạy nó cùng với các chương trình con khác sao chép dấu chấm phẩy vào các cột khác nhau thì lại được. Mọi sự giúp đỡ hoặc gợi ý đều rất được trân trọng. Cảm ơn.>
Trả lời:
Tôi nghĩ tôi sẽ thay thế cái này:
Nếu Format(myCell.Text) có dạng "AL-JEFFERSON CO*" thì
với điều này
Nếu lcase(myCell.Text) Like "al*" and _
lcase(mycell.text) like "*jefferson*" and _
lcase(mycell.text) like "*co*" Then
Cái này đang tìm kiếm cái gì đó
- Bắt đầu với "al"
- Chứa từ "jefferson"
- Chứa "co"
Nếu tôi nhớ không nhầm, có một vài biến thể khác nhau của dấu gạch ngang có thể trông giống nhau, nhưng không được nhận diện là giống nhau trong quá trình so sánh.
HTH,
Barb Reinhardt
Trả lời:
Bạn có thể thấy một giải pháp như thế này sẽ hiệu quả hơn:
Nếu Left(LCase(myCell.Text), 2) = "al" Và _
Mid(LCase(myCell.Text), 4, 9) = "jefferson" And _
Mid(LCase(myCell.Text), 14, 2) = "co" Then
Hi vọng điều đó hữu ích.
Chúc mừng!
Giàu có
Trả lời:
Chào Barb, >
>
Tôi vẫn gặp vấn đề tương tự, chương trình tìm thấy chuỗi nhưng chỉ sao chép và dán dòng đầu tiên chứ không phải hai dòng bên dưới. Tôi đang chạy một số chương trình con sao chép và dán trước chương trình con sao chép và dán AL-JEFFERSON CO. Tôi tin rằng đây là vấn đề. Khi tôi sử dụng mã này trên một sổ làm việc mới, nó chạy tốt. Khi tôi chạy đoạn mã này...
Sau khi các chương trình con sao chép và dán trước đó hoàn tất, tôi gọi từng chương trình con một, nhưng nó chỉ sao chép và dán hàng đầu tiên. Tôi không muốn đặt lại định dạng bảng tính vì có những ô cần giữ nguyên màu đỏ (vbRed) đã được sao chép. Tôi chắc chắn rằng các chương trình con khác đang gây ra sự cố, chỉ không biết phải làm thế nào.
Lý do là vì các chương trình con đó phải chạy trước khi tôi có thể sao chép AL-JEFF.....
Mọi ý kiến đóng góp đều được đánh giá cao. Cảm ơn bạn đã dành thời gian.
Comments
Post a Comment