Code VBA làm việc: Cột B là "PKL*" thì cột N là "PF1"

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

LuuAnh980

Thành viên tiêu biểu
Tham gia
28/9/22
Bài viết
452
Được thích
104
Giới tính
Nữ
Chào các anh chị!!!
Viết dùm em đoạn code khi cột B là chuỗi "PKL*" thì cột N là PF1" ạ.
 
Em xin diễn giải như sau ạ:
cột B có nhiều dữ liệu, nếu cột B mà có chuỗi "PKL*" thì cột N sẽ là "PF1" xét cho tới dòng cuối của cột B ạ.
Mong các anh chị viết dùm code ạ.
 
Upvote 0
Em record Marcro
Mã:
Sub Macro1()
'
' Macro1 Macro
'

'
    Range("O6").Select
    ActiveCell.FormulaR1C1 = "PF!"
    Range("O6").Select
    ActiveCell.FormulaR1C1 = "PK1"
    Range("O7").Select
    Selection.FillDown
    Range("O8").Select
    Selection.FillDown
    Range("O9").Select
End Sub
Sao nó kỳ quá.
 
Upvote 0
Em record Marcro
Mã:
Sub Macro1()
'
' Macro1 Macro
'

'
    Range("O6").Select
    ActiveCell.FormulaR1C1 = "PF!"
    Range("O6").Select
    ActiveCell.FormulaR1C1 = "PK1"
    Range("O7").Select
    Selection.FillDown
    Range("O8").Select
    Selection.FillDown
    Range("O9").Select
End Sub
Sao nó kỳ quá.
Điền 1 ô công thức xong kéo xuống
 
Upvote 0
Đây anh @BuiQuangThuan ơi:
Mã:
Sub Macro2()
'
' Macro2 Macro
'

'
    Range("N5").Select
    ActiveCell.FormulaR1C1 = "=IF(LEFT(RC[-12],3)=""PKL"",""PF1"","""")"
    Range("N5").Select
    Selection.AutoFill Destination:=Range("N5:N14"), Type:=xlFillDefault
    Range("N5:N14").Select
End Sub
Bài đã được tự động gộp:

À, quên, em xin đính chính lại là:
Cột N đã có chuỗi, nhưng không phải là "PF1", bây giờ em muốn đổi chuỗi của cột N dựa theo chuỗi cột B, nếu chuỗi cột B là "PKL*" thì chuỗi cột N đổi là "PF1", còn chuỗi cột B không phải là "PKL*" thì chuỗi cột N không đỏi (như cũ).
Mong các anh giúp đỡ.
 
Lần chỉnh sửa cuối:
Upvote 0
Đại để là vầy xem sao:

PHP:
Sub TimKiem()
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String:            Dim Rws As Long
 
 Rws = [B2].UsedRange.Rows.Count
 Set Rng = [B2].Resize(Rws)
 Set sRng = Rng.Find("PKL", , xlFormulas, xlPart)
 If Not sRng Is Nothing Then
    MyAdd = sRng.Address
    Do
        Cells(sRng.Row, "N").Value = "PF1"
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
 End If
End Sub
 
Upvote 0
Sao em chạy code không được Bác @SA_DQ ???
Bài đã được tự động gộp:

lỗi này :
loi9.png
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy thì sửa lại dòng lệnh này & xin lỗi bạn nha:
Rws = Sheet1.UsedRange.Rows.Count
 
Upvote 0
Cám ơn Bác @SA_DQ nhiều!!!!
Đúng rồi.
Chúc Bác ngày mới VUI VẺ!!!!!
 
Upvote 0
Điều kiện của bạn khá đặc thù cho nên có hai điều cần để ý:
1. hiệu quả của giải thuật tùy thuộc vào tỷ lệ dữ liệu mang dạng cấn xét. Nếu tỷ lệ nhỏ thì dùng cách ở bài #7 (nhảy tới dòng thỏa điều kiện). Nhưng nếu tỷ lệ lớn thì dùng cách duyệt suốt hiệu quả hơn.
2. vì nơi chép kết quả vào có sẵn dữ liệu nên không thể chạy code trên 1 lần. Người sử dụng nên cẩn thận bằng cách save file trước khi chạy.

Mã:
Sub t()
' nếu dữ liệu ở cột N trống thì xét dòng tương ứng cột B.
' nếu B ở dạng PKL* thì ghi "PF1" vào N
' chú ý: code này chỉ hữu hiệu nếu số lượng thỏa điều kiện tương dối cao (>20%?)
lRow = Cells(Rows.Count, "B").End(xlUp).Row
aB = Range("b1:b" & lRow).Value2
aN = Range("n1:n & lRow).Value2
cCount = 0 ' đếm số chỉnh sửa
For  i= 1 To lRow
  If aN(i, 1) <> "" Then ' chỉ xét nếu N không có dữ liệu
    If Left(aB(i, 1), 3) = "PLK" Then
      aN(i, 1) = "PK1"
      cCount = cCount + 1
    End If
  End If
Next i
Range("N1").Resize(lRow, 1).Value2 = aN
MsgBox "Finito! Number of cells changed: " & cCount
End Sub
 
Upvote 0
Cám ơn bác @VetMini nhiều ạ. Em xin nói rỏ thao tác của em là:
Em chạy code lấy dữ liệu của anh @Hoàng Tuấn 868 lấy dữ liệu của sheet1 file B đập vào file A sheet1. Cột N của fileB có sẵn chuỗi rồi, nhưng chuỗi đó có chuỗi không đúng ý, nên em mới dò theo cột B, nếu chuỗi cột B là "PKL*" thì chuỗi cột N là "PF1", còn không phải thì vẫn giữ nguyên chuỗi cũ của cột N. File làm theo tháng, nên dữ liệu cỡ 3000 dòng. Có gì mong bác @VetMini giúp đỡ.
 
Upvote 0
... File làm theo tháng, nên dữ liệu cỡ 3000 dòng. ...
Ở bài trên tôi có nói rõ là với vấn để này, TỶ LỆ mới quan trọng với thuật toán. Con số tổng dữ liệu không quan trọng bằng.
Đây là một bài toán theo tiếng nghề là mẫu không xác định (multiple solution model). Người viết code phải thống kê dữ liệu mới biết mẫu nào áp dụng tốt hơn.

Ví dụ bạn có 3000 dòng và 600 dòng cần thay đổi thì tỷ lệ là 20%, giải thuật của tôi mới tốt.
Nếu chỉ có 200 dòng (6,7%) cần thay đổi thì giải thuật bài #7 có lẽ tốt hơn.
 
Upvote 0
Web KT

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

Back
Top Bottom