Nhờ giúp sửa lại đoạn code sau

Liên hệ QC

trantuonganh2008

Thành viên thường trực
Tham gia
8/11/08
Bài viết
305
Được thích
53
Mình vừa sưu tầm đoạn code này. Cho mình hỏi bây giờ muốn xóa những dòng có chữ "giảm giá 15" thì phải sửa như thế nào? Nhờ các cao thủ ra tay! Cám ơn nhiều!
Mã:
 [B]Sub DeleteRowsSecondFastest()[/B] Dim rTable As Range Dim rCol As Range, rCell As Range Dim lCol As Long Dim xlCalc As XlCalculation Dim vCriteria  On Error Resume Next    'Determine the table range      With Selection          If .Cells.Count > 1 Then              Set rTable = Selection          Else                          Set rTable = .CurrentRegion              On Error GoTo 0          End If     End With        'Determin if table range is valid     If rTable Is Nothing Or rTable.Cells.Count = 1 Or WorksheetFunction.CountA(rTable) < 2 Then         MsgBox "Could not determine you table range.", vbCritical, "Ozgrid.com"         Exit Sub     End If     'Get the criteria in the form of text or number.     vCriteria = Application.InputBox(Prompt:="Type in the criteria that macthing rows should be deleted. " _     & "If the criteria is in a cell, point to the cell with your mouse pointer", _     Title:="CONDITIONAL ROW DELETION CRITERIA", Type:=1 + 2)     'Go no further if they Cancel.     If vCriteria = "False" Then Exit Sub         'Get the relative column number where the criteria should be found     lCol = Application.InputBox(Prompt:="Type in the relative number of the column where " _      & "the criteria can be found.", Title:="CONDITIONAL ROW DELETION COLUMN NUMBER", Type:=1)     'Cancelled     If lCol = 0 Then Exit Sub         'Set rCol to the column where criteria should be found     Set rCol = rTable.Columns(lCol)     'Set rCell to the first data cell in rCol     Set rCell = rCol.Cells(2, 1)    'Store current Calculation then switch to manual.    xlCalc = Application.Calculation    Application.Calculation = xlCalculationManual   'Loop and delete as many times as vCriteria exists in rCol    For lCol = 1 To WorksheetFunction.CountIf(rCol, vCriteria)         Set rCell = rCol.Find(What:=vCriteria, After:=rCell, LookIn:=xlValues, _             LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _             MatchCase:=False).Offset(-1, 0)             rCell.Offset(1, 0).EntireRow.Delete    Next lCol    'Put back calculation to how it was.    Application.Calculation = xlCalc    On Error GoTo 0 [B]End Sub[/B]
 
Lần chỉnh sửa cuối:
Sửa thì tôi không biết sửa nhưng tôi có thể viết cho bạn một đoạn code khác thực hiện yêu cầu của bạn.
Bạn thử code này thử xem sao:
Mã:
Sub DelRow()
Dim Str As String
Str = Application.InputBox("Enter String", "Delete Row")
Del:
On Error GoTo Ext
Cells.Find(What:=Str).EntireRow.Delete
GoTo Del
Ext:
End Sub
 
Upvote 0
Macro của bạn đây

PHP:
Option Explicit
Sub DeleteRowsFor()
 Dim Rng As Range, sRng As Range, dRng As Range
 Dim MyAdd As String, StrC As String
 
3 StrC = Range("GGia")  '<=|'
 Set Rng = Range([b1], [B65500].End(xlUp))
 Set sRng = Rng.Find(StrC, , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
   MyAdd = sRng.Address
   Do
      If dRng Is Nothing Then
         Set dRng = sRng
      Else
         Set dRng = Union(dRng, sRng)
      End If
      Set sRng = Rng.FindNext(sRng)
   Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
 End If
 dRng.EntireRow.Delete
End Sub

Hướng dẫn cách dùng:

(1) Bạn chọn 1 ô xa xăm nào đó trên trang tính, nhập vô đó chuỗi 'Giảm giá 15' & gán tên cho nó là 'GGia' (Xem them dòng lệnh số 3)

(2) Macro đang tìm trên cột 'B' dòng chữ 'Giảm giá' nêu trên, Bạn cần tìm chúng trên cột nào khác thì đổi lại dòng lệnh 4

Hãy thử & . . . chúc vui.
 
Upvote 0
Hi, Code của bạn Huuthang thi khi chạy nó đứng im luôn, còn code của bạn HYen17 khi chạy thì báo lỗi. Bạn nói nhập chuỗi "Giảm giá 15" rồi gán tên "GGia" cho nó là sao mình không hiểu. Bạn cố gắng giải thích rõ dùm mình nhé. Cám ơn hai bạn nhiều!!! Thân
 
Lần chỉnh sửa cuối:
Upvote 0
Hi,
Code của bạn Huuthang thi khi chạy nó đứng im luôn, còn code của bạn HYen17 khi chạy thì báo lỗi. Bạn nói nhập chuỗi "Giảm giá 15" rồi gán tên "GGia" cho nó là sao mình không hiểu. Bạn cố gắng giải thích rõ dùm mình nhé. Cám ơn hai bạn nhiều!!!

Thân
Nghĩa là giả sử bạn nhập "Giảm giá 15" tại ô H15 thì bạn phải thay Range("GGia") bằng Range("H15").
Chúc bạn thành công. Thân
 
Upvote 0
Nghĩa là giả sử bạn nhập "Giảm giá 15" tại ô H15 thì bạn phải thay Range("GGia") bằng Range("H15").
Chúc bạn thành công. Thân
Làm cách này cũng được. Nhưng mà ý HYen17 chắc là đặt name cell H15 là GGia.
Hi,
Code của bạn Huuthang thi khi chạy nó đứng im luôn, còn code của bạn HYen17 khi chạy thì báo lỗi. Bạn nói nhập chuỗi "Giảm giá 15" rồi gán tên "GGia" cho nó là sao mình không hiểu. Bạn cố gắng giải thích rõ dùm mình nhé. Cám ơn hai bạn nhiều!!!

Thân
Chắc tại dữ liệu của bạn quá lớn. Code trước của tôi là xóa lần lượt từng dòng nên tốc độ chậm. Bạn thử Code này xem.
PHP:
Sub DelRow()
Dim Rng As Range, DelRng As Range
Dim Str As String
Str = Application.InputBox("Enter String", "Delete Row")
For Each Rng In Selection
If LCase(Rng) Like "*" & LCase(Str) & "*" Then
    If DelRng Is Nothing Then
    Set DelRng = Rng
    Else
    Set DelRng = Union(DelRng, Rng)
    End If
End If
Next
If Not DelRng Is Nothing Then
DelRng.EntireRow.Delete
End If
End Sub
Quét chọn cột dữ liệu muốn tìm kiếm và chạy Macro. Nhập chuỗi tìm kiếm vào InputBox
 
Upvote 0
Chắc tại dữ liệu của bạn quá lớn. Code trước của tôi là xóa lần lượt từng dòng nên tốc độ chậm. Bạn thử Code này xem.

Bạn đã thử chưa vậy?
Tốc độc tìm kiếm sẽ nhanh hơn vòng lặp For . . Next là cái chắc; Nên mình khuyên tác giả xài cái của mình, sẽ nhanh hơn nhiều!
 
Upvote 0
Bạn đã thử chưa vậy?
Tốc độc tìm kiếm sẽ nhanh hơn vòng lặp For . . Next là cái chắc; Nên mình khuyên tác giả xài cái của mình, sẽ nhanh hơn nhiều!
Ủa? Tôi đâu có nhận xét gì về code của bạn đâu. Tôi nói là nói đoạn code của tôi kìa. Code trước của tôi. Tìm thấy dòng nào xóa ngay dòng đó nên nó chậm. Bây giờ tôi gộp lại nên đương nhiên là nhanh hơn. Tôi chỉ so sánh những đoạn code của tôi thôi.
 
Upvote 0
Ẹc... Ẹc...
Tôi dám cá dù For.. hay Find gì thì cũng không thể nào nhanh bằng AutoFilter... Thử xem!
Với AutoFilter tôi làm bằng tay còn được nữa là...
Tôi đề nghị chủ Topic cho file đính kèm lên đây, ta sẽ thí nghiệm!
 
Upvote 0
Ẹc... Ẹc...
Tôi dám cá dù For.. hay Find gì thì cũng không thể nào nhanh bằng AutoFilter... Thử xem!
Với AutoFilter tôi làm bằng tay còn được nữa là...
Tôi đề nghị chủ Topic cho file đính kèm lên đây, ta sẽ thí nghiệm!
Nếu dùng bằng tay thì Find All là nhanh nhất.
 
Upvote 0
Nếu dùng bằng tay thì Find All là nhanh nhất.
Uh... thì đúng là nhanh nhất...
Nhưng còn vụ xóa ROW nữa!
Nếu làm bằng tay thì ta hoàn toàn có thể xóa ROW sau khi bấm Find All ---> Tuy nhiên, viết nó thành code thì e rằng... hơi bị mệt
 
Lần chỉnh sửa cuối:
Upvote 0
Hi ndu96081631, Mình gửi file lên, bạn làm theo yêu cầu mình nhé: Chẳng hạn ở sheet LTHANH (sheet đầu) bạn delete dùm mình dòng 38, dòng 13, dòng 5 rồi sau đó lấy dòng 38 thay thế dòng 5 luôn. Lưu ý là chỉ xóa những dòng này thôi (nói nôm na là cut rồi paste đó). Những dòng dữ liệu thì giữ nguyên không đụng đến nhé. À xin lỗi, dòng 13 chỉ xóa dữ liệu thôi chứ không delete dòng này. Hơi công phu đấy, bạn làm giúp mình nhé. Cám ơn nhiều!!!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hi ndu96081631,
Mình gửi file lên, bạn làm theo yêu cầu mình nhé:
Chẳng hạn ở sheet LTHANH (sheet đầu) bạn delete dùm mình dòng 38, dòng 13, dòng 5 rồi sau đó lấy dòng 38 thay thế dòng 5 luôn. Lưu ý là chỉ xóa những dòng này thôi (nói nôm na là cut rồi paste đó). Những dòng dữ liệu thì giữ nguyên không đụng đến nhé. À xin lỗi, dòng 13 chỉ xóa dữ liệu thôi chứ không delete dòng này. Hơi công phu đấy, bạn làm giúp mình nhé.

Cám ơn nhiều!!!
"Hơi công phu". Vậy ai sẽ làm giúp bạn đây. Vấn đề ở đây là mọi người sẽ đưa ra giải pháp để giúp bạn làm. Chứ nếu yêu cầu không theo nguyên tắc nào hết, phải làm thủ công thì ai giúp bạn được.
 
Upvote 0
Bạn chưa rành việc mô tả công việc!

Mình có yêu cầu:
Với sheet LTHANH bạn delete dùm mình dòng 38, dòng 13, dòng 5 rồi sau đó lấy dòng 38 thay thế dòng 5 luôn.
Với trình tự công việc như vầy, khi xóa dòng 38 thì dòng 39 sẽ thay dòng 38;
Xóa tiếp 2 dòng trên nó, thì dòng 38 đương thời sẽ là dòng 41 thời xa vắng!
Vậy í bạn là chép dòng 38 cũ hay dòng 41 đến dòng 5 thay thế?


À xin lỗi, dòng 13 chỉ xóa dữ liệu thôi chứ không delete dòng này.
Có nghĩa là dòng 13 (cũ/mới) sẽ thay dữ liệu bỡi "", phải không?

Mình đã thấy bài này ở đâu rồi thì phải.

Hãy nói lại trình tự bạn làm bằng tay như thế nào đi;

Hay mình diễn dịch thế này, bạn xem thử & thảo luận thông suốt đã; chứ không công cốc cả lũ ấy chứ!

Trong cột 'A' luôn có dòng 'Giam gia' trước khi chạy macro;
Nhiệm vụ đề ra là tìm & đem hết dòng dữ liệu này lên dòng 5;
Tại [A5] dữ liệu sẽ có nội dung là "Thang 10" ("Thang 11"), (???)
Xóa dòng 13 & dòng trắng 38.
OK?

Chờ tin bạn.
 
Upvote 0
Hi ndu96081631,
Mình gửi file lên, bạn làm theo yêu cầu mình nhé:
Chẳng hạn ở sheet LTHANH (sheet đầu) bạn delete dùm mình dòng 38, dòng 13, dòng 5 rồi sau đó lấy dòng 38 thay thế dòng 5 luôn. Lưu ý là chỉ xóa những dòng này thôi (nói nôm na là cut rồi paste đó). Những dòng dữ liệu thì giữ nguyên không đụng đến nhé. À xin lỗi, dòng 13 chỉ xóa dữ liệu thôi chứ không delete dòng này. Hơi công phu đấy, bạn làm giúp mình nhé.

Cám ơn nhiều!!!
Thế này cho dể hiểu nha:
Bạn hãy nói cho mọi người biết, nếu như công việc trên bạn làm bằng tay thì bạn sẽ tiến hành như thế nào (nói thật chi tiết từng bước thực hiện)
Chứ nghe bạn mô tả tôi vẫn thấy nó lơ mơ thế nào ấy... nhìn dử liệu cũng không hiểu (không hiểu tại sao phải xóa, phải cut, phải paste)
 
Upvote 0
Đơn giản như thế này, làm thủ công nha: - Cut dòng 38, paste vào dòng 5 & dòng 38 phải mất vì khi mình cut rồi paste mình thấy dòng này (dòng 38) vẫn còn. Sau đó xóa dữ liệu dòng 13 nhưng không delete dòng này. Mục đích làm như vậy là chỉ tạo mới cho bảng công nợ thôi. NHưng mình nói chỉ độc lập 1 sheet thôi. Nhờ các bạn làm dùm cho tất cả các sheet luôn. Có nghĩa là: như các bạn thấy ở các sheet sau sheet đầu, việc điều chỉnh giá (Tăng hoặc giảm giá) đều xảy ra cùng một ngày (ở đây là ngày 24). Các bạn chỉ việc viết code sao cho theo yêu cầu trên nhưng với điều kiện là sau ngày thay đổi giá cuối cùng trong tháng - vì trong một tháng có thể thay đổi giá nhiều lần (từ 1 - 3 lần như vậy. Bởi vậy mình muốn xóa dòng của lần thay đổi giá cuối cùng và đưa nó lên đầu. Còn những dòng có giá thay đổi khác thì xóa đi chứ giữ lại làm gì vì qua tháng mới mình chỉ muốn giữ lại dòng giá mới sau cùng thôi. Nói tóm lại, mình muốn khi qua tháng mới (ở đây là tháng 11) thì xóa dòng giá mới sau cùng và đưa lên đầu (dòng 5). Còn dòng có ghi "tháng 10" thì chỉ xóa dữ liệu thôi vì dữ liệu ở dòng này chỉ qua là giá cũ của tháng cũ (tháng 10) thôi. Có gì thắc mắc hỏi thêm nhé. Cám ơn các ca ca, tỷ tỷ nhiều!!!
 
Lần chỉnh sửa cuối:
Upvote 0
Tốn thời gian gê cơ!

- Cut dòng 38, paste vào dòng 5 & dòng 38 phải mất vì khi mình cut rồi paste mình thấy dòng này (dòng 38) vẫn còn.

(*) Xóa dòng này theo tiêu chí gì?, có cụm từ "Giam gia'?.
Vậy trong trang tính có bao nhiều từ "Giam gia" trên cột đó vậy?

(*) Đem đến dòng 5 nguyên si dòng 38 thì không phải, phải không?; Vậy thay vì "Giam gia" sẽ thay bằng cụm từ gì vô đó vậy?

Sau đó xóa dữ liệu dòng 13 nhưng không delete dòng này. Mục đích làm như vậy là chỉ tạo mới cho bảng công nợ thôi.
Có nghĩa là toàn bộ các ô dòng 13 này sẽ có dữ liệu rỗng? Nhưng với tiêi chí là gì để phân biệt các dòng khác?

Bạn phải viết cho người khác hiểu, chứ không phải viết những gì bạn hiểu!
 
Upvote 0
(*) Xóa dòng này theo tiêu chí gì?, có cụm từ "Giam gia'?.
Vậy trong trang tính có bao nhiều từ "Giam gia" trên cột đó vậy?

(*) Đem đến dòng 5 nguyên si dòng 38 thì không phải, phải không?; Vậy thay vì "Giam gia" sẽ thay bằng cụm từ gì vô đó vậy?


Có nghĩa là toàn bộ các ô dòng 13 này sẽ có dữ liệu rỗng? Nhưng với tiêi chí là gì để phân biệt các dòng khác?

Bạn phải viết cho người khác hiểu, chứ không phải viết những gì bạn hiểu!
Em đề nghị GPE nên thêm 1 quy định nữa:
- Muốn làm thành viên chính thức của GPE phải trải qua 1 kỳ thi môn... TIẾNG VIỆT
- Nếu không có khả năng: Nói và viết TIẾNG VIỆT cho người khác hiểu thì xin mời... HỌC THÊM LỚP BỔ TÚC... (6 tháng sau thi tiếp)
--------------------------------------------
Sư phụ cũng rất kiên nhẩn, chứ em đọc xong bài, cứ cảm giác có con gì đó... chạy lên.. chạy xuống ở trong.. cổ họng... ỨC.. ỨC +-+-+-+
 
Upvote 0
Pass la "happy". Các bạn ráng giúp mình nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom