thanhduc_iit
Thành viên chính thức


- Tham gia
- 2/4/11
- Bài viết
- 55
- Được thích
- 2
Quá đúng yêu cầu rồi bác ạ, cảm ơn bác nhiềuBạn thử sử dụng code này xem sao:
[GPECODE=vb]Sub ThayThe()
Dim i As Long
With Sheet1
For i = 2 To .[A65000].End(3).Row
If .Cells(i, 1) = "AA" Or .Cells(i, 1) = "BF" Or .Cells(i, 1) = "EC" Then
.Cells(i, 1).Value = "XX"
End If
If .Cells(i, 1) = "TR" Or .Cells(i, 1) = "OP" Or .Cells(i, 1) = "HG" Then
.Cells(i, 1).Value = "YY"
End If
Next
End With
End Sub[/GPECODE]
P/S: trông cái đoạn or ... or hơi nông dân (kiểu mò mẫm)... mong các thành viên khác có giải pháp NGON hơn.
Sub ThayLai()
Dim J As Long, Rws As Long, T1 As Long, T2 As Long
Dim Rng As Range
On Error Resume Next
Tmr = Timer()
Rws = [A7].CurrentRegion.Rows.Count
T1 = 2 + Rws \ 3: T2 = 2 * Rws \ 3
Set Rng = Cells(1, "A").Resize(T1)
Rng.Replace What:="XX", Replacement:="AA", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Rng.Replace What:="YY", Replacement:="TR", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Set Rng = Cells(T1, "A").Resize(T1)
Rng.Replace What:="XX", Replacement:="BF", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Rng.Replace What:="YY", Replacement:="OP", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Set Rng = Cells(T2, "A").Resize(T1)
Rng.Replace What:="XX", Replacement:="EC", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Rng.Replace What:="YY", Replacement:="HG", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
[e4].Value = Timer() - Tmr
End Sub
Như thế này có lẻ bớt nông dân tẹo, mặc dù ít ai thèm kiểu nàyBạn thử sử dụng code này xem sao:
[GPECODE=vb]Sub ThayThe()
Dim i As Long
With Sheet1
For i = 2 To .[A65000].End(3).Row
If .Cells(i, 1) = "AA" Or .Cells(i, 1) = "BF" Or .Cells(i, 1) = "EC" Then
.Cells(i, 1).Value = "XX"
End If
If .Cells(i, 1) = "TR" Or .Cells(i, 1) = "OP" Or .Cells(i, 1) = "HG" Then
.Cells(i, 1).Value = "YY"
End If
Next
End With
End Sub[/GPECODE]
P/S: trông cái đoạn or ... or hơi nông dân (kiểu mò mẫm)... mong các thành viên khác có giải pháp NGON hơn.
Sub thaythe()
Dim data(), i
With Sheet1
data = .Range(.[A2], .[A65536].End(3)).Value
For i = 1 To UBound(data)
Select Case data(i, 1)
Case "AA", "BF", "EC"
data(i, 1) = "XX"
Case "TR", "OP", "HG"
data(i, 1) = "YY"
End Select
Next
.[A2].Resize(i - 1) = data
End With
End Sub
Xin phép spam 1 phát.. lâu lắm mới thấy a Hải.. thấy nhớ nhớ kiểu quái chiêu của anh mới chết chứ.. ặc ặc. Chắc dạo này anh bận?Như thế này có lẻ bớt nông dân tẹo, mặc dù ít ai thèm kiểu này
PHP:Sub thaythe() Dim data(), i With Sheet1 data = .Range(.[A2], .[A65536].End(3)).Value For i = 1 To UBound(data) Select Case data(i, 1) Case "AA", "BF", "EC" data(i, 1) = "XX" Case "TR", "OP", "HG" data(i, 1) = "YY" End Select Next .[A2].Resize(i - 1) = data End With End Sub
Thì đã nói rồi, ít ai thèm kiểu này mà. Lạy trời cho có 1000 lần OR thì biết đá biết vàngXin phép spam 1 phát.. lâu lắm mới thấy a Hải.. thấy nhớ nhớ kiểu quái chiêu của anh mới chết chứ.. ặc ặc. Chắc dạo này anh bận?
Cơ mà e có đọc cuốn của Kyo thì khuyên dùng if.. end if hơn là select case?
Anh nói e mới để ý.. đúng là 1000 lần or thì đi ma teo luôn. Chưa kể đến việc việc thay thế có phân biệt chữ hoa, chữ thường?Thì đã nói rồi, ít ai thèm kiểu này mà. Lạy trời cho có 1000 lần OR thì biết đá biết vàng
Tốt nhất bạn đưa dữ liệu thật lên. Như thế sẽ có giải pháp tốt hơn.Em đang dùng code của bác Cá Ngừ F1 nhưng với dữ liệu lớn thì nó chạy khá lâu
Các code khác thì có cái chạy được, cái k. Hình như chưa đúng yêu cầu ạ
Em đang dùng code của bác Cá Ngừ F1 nhưng với dữ liệu lớn thì nó chạy khá lâu
Các code khác thì có cái chạy được, cái k. Hình như chưa đúng yêu cầu ạ
Cảm ơn bác.(/ới dữ liệu của bạn, macro chạy < 0.2" (tạm chấp nhận được)
Cảm ơn bác.
Nhưng khi file đầu vào chỉ có duy nhất 1 cột A thì k thể chạy được.
Option Explicit
Sub TimVaThayThe()
Dim SoThay, Cls As Range
Dim Tmr As Double
3 Sheets("ngoai").Select: Tmr = Timer()
For Each Cls In Range([E2], [E2].End(xlDown))
5 If Cls.Row < 14 Then SoThay = "'93002" Else SoThay = "'93005"
Columns("A:A").Replace What:=Cls.Value, Replacement:=SoThay, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
7 Next Cls
[c1].Value = Timer() - Tmr
End Sub
Vướng ngay chổ này bác ạ. Vì file đưa vào sẽ k có dữ liệu ở cột EVậy là bạn chưa đọc được & diễn dịch ngôn ngữ VBA ra tiếng Việt rồi!
Để mình làm cho vậy nha:
D4: Tạo vòng lặp duyệt các ô từ [E2] cho đến dòng cuối của cột [E] có dữ liệu;PHP:Option Explicit Sub TimVaThayThe() Dim SoThay, Cls As Range Dim Tmr As Double 3 Sheets("ngoai").Select: Tmr = Timer() For Each Cls In Range([E2], [E2].End(xlDown)) 5 If Cls.Row < 14 Then SoThay = "'93002" Else SoThay = "'93005" Columns("A:A").Replace What:=Cls.Value, Replacement:=SoThay, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 7 Next Cls [c1].Value = Timer() - Tmr End Sub
Nếu trên trang tính chưa có vùng này thì bạn cần đưa vô;
Nếu không thể đưa vô vùng cột [E] vì lí do nào đó thì fải sửa lại nội dung dòng lệnh này trong macro
Thì bạn phải chế thêm cột E vào (nên làm thế), chả nhẽ bạn phải nhập tay vào code từng giá trị 1.Vướng ngay chổ này bác ạ. Vì file đưa vào sẽ k có dữ liệu ở cột E
Không đưa vào sao biết cái gì thay bằng cái gì?
Tao 1 sheet khác chứa cái gì thay bằng cái gì như file này xem sao.
Sub ThayTheNGOAI()
Dim i As Long
With Worksheets("NGOAI")
Tmr = Timer()
For i = 2 To .UsedRange.Rows.Count
'-----QUY DOI NOI KCB-----
'Vi Thuy 93002
If .Cells(i, 6) = "93048" Or .Cells(i, 6) = "93049" Or .Cells(i, 6) = "93050" Or .Cells(i, 6) = "93051" Or .Cells(i, 6) = "93052" Or .Cells(i, 6) = "93053" Or .Cells(i, 6) = "93054" Or .Cells(i, 6) = "93055" Or .Cells(i, 6) = "93056" Or .Cells(i, 6) = "93057" Or .Cells(i, 6) = "93079" Or .Cells(i, 6) = "93080" Then
.Cells(i, 6).Value = "'93002"
End If
'Chau Thanh 93005
If .Cells(i, 6) = "93026" Or .Cells(i, 6) = "93027" Or .Cells(i, 6) = "93028" Or .Cells(i, 6) = "93029" Or .Cells(i, 6) = "93030" Or .Cells(i, 6) = "93031" Or .Cells(i, 6) = "93032" Or .Cells(i, 6) = "93033" Or .Cells(i, 6) = "93074" Or .Cells(i, 6) = "93087" Or .Cells(i, 6) = "93088" Then
.Cells(i, 6).Value = "'93005"
End If
Next
MsgBox Timer() - Tmr
End With
End Sub
Bài #18 bạn có thể dùng 2 cột thay cái gì bằng cái gì ở sheet khác, hàng ngàn dòng cũng được sao không thử làm, lại muốn đưa hết vào code cho rối mắt và muốn điều chỉnh cũng tìm "lé con mắt"?Do k có dữ liệu cột E nên em đưa vào code như trên thì nó chạy khá làm chậm với dữ liệu lớnMã:Sub ThayTheNGOAI() ..................... End Sub
![]()
Đây cũng là 1 gợi ý hay bác nhỉThì bạn phải chế thêm cột E vào (nên làm thế), chả nhẽ bạn phải nhập tay vào code từng giá trị 1.
Dùng cách này của bác nhanh thật.Bài #18 bạn có thể dùng 2 cột thay cái gì bằng cái gì ở sheet khác, hàng ngàn dòng cũng được sao không thử làm, lại muốn đưa hết vào code cho rối mắt và muốn điều chỉnh cũng tìm "lé con mắt"?
Híc!
File bác Ba Tê hay quá, nhưng em có công việc yêu cầu khó hơn, không biết có được không, em đã sửa File bác Ba Tê một tý theo yêu cầu. Mong các bác giúp đỡKhông đưa vào sao biết cái gì thay bằng cái gì?
Tao 1 sheet khác chứa cái gì thay bằng cái gì như file này xem sao.
File bác Ba Tê hay quá, nhưng em có công việc yêu cầu khó hơn, không biết có được không, em đã sửa File bác Ba Tê một tý theo yêu cầu. Mong các bác giúp đỡ
Public Sub GPE_XYZ()
Dim sArr(), dArr(), tArr(), I As Long, J As Long, N As Long, L As Long
tArr = Sheets("GPE").Range("A2", Sheets("GPE").Range("A2").End(xlDown)).Resize(, 2).Value
With Sheets("ngoai")
sArr = .Range("A2", .Range("A2").End(xlDown)).Value
ReDim dArr(1 To UBound(sArr), 1 To 1)
For I = 1 To UBound(sArr)
For J = 1 To UBound(tArr)
N = InStr(sArr(I, 1), tArr(J, 1))
If N Then
L = Len(tArr(J, 1))
dArr(I, 1) = Left(sArr(I, 1), N - 1) & tArr(J, 2) & Mid(sArr(I, 1), N + L, Len(sArr(I, 1)))
Exit For
End If
Next J
Next I
.Range("C2").Resize(I - 1) = dArr
End With
End Sub
Thanks bác nhiều, cho em hỏi thêm là nếu như không thấy giá trị thay thế ở cột A thì cột C trả về đúng cột A (hiện tại là nếu A có giá trị thay thế thì C=A', nếu không rỗng) được không ạHên xui nhé. Đẹp thì xui còn xấu thì hên.
PHP:Public Sub GPE_XYZ() Dim sArr(), dArr(), tArr(), I As Long, J As Long, N As Long, L As Long tArr = Sheets("GPE").Range("A2", Sheets("GPE").Range("A2").End(xlDown)).Resize(, 2).Value With Sheets("ngoai") sArr = .Range("A2", .Range("A2").End(xlDown)).Value ReDim dArr(1 To UBound(sArr), 1 To 1) For I = 1 To UBound(sArr) For J = 1 To UBound(tArr) N = InStr(sArr(I, 1), tArr(J, 1)) If N Then L = Len(tArr(J, 1)) dArr(I, 1) = Left(sArr(I, 1), N - 1) & tArr(J, 2) & Mid(sArr(I, 1), N + L, Len(sArr(I, 1))) Exit For End If Next J Next I .Range("C2").Resize(I - 1) = dArr End With End Sub
Thanks bác nhiều, cho em hỏi thêm là nếu như không thấy giá trị thay thế ở cột A thì cột C trả về đúng cột A (hiện tại là nếu A có giá trị thay thế thì C=A', nếu không rỗng) được không ạ
..................................................
If N = 0 Then dArr(I, 1) = sArr(I, 1)
Next J
Em muôn phiền bác thêm tý nữa ạ. Khi nhập liệu ở cột A thì cột B tự chạy chứ không phải click nút "GPE"Chữa cháy. Thêm 1 dòng này vào trên dòng Next J:
PHP:.................................................. If N = 0 Then dArr(I, 1) = sArr(I, 1) Next J
đã tự nhảy, nhưng dữ liệu chuyển bị sai. mong anh chị xem sửa giúp vớiEm muôn phiền bác thêm tý nữa ạ. Khi nhập liệu ở cột A thì cột B tự chạy chứ không phải click nút "GPE"