Làm Macro tìm, thay thế & lưu file số lượng lớn.

Liên hệ QC

catherine177

Thành viên mới
Tham gia
23/10/18
Bài viết
3
Được thích
0
Dạ chào mọi người.
Hiện tại mình đang tạo 1 macro theo yêu cầu sau: Tìm & thay giá trị 4 cột sau đó lưu file theo thứ tự từ 01 đến một số nào đó mình muốn.
Các bước mình làm là:
  1. Chọn cột đầu tiên -> Find 01 -> Replace 01 thành 02 -> Close
  2. Tiếp tục các cột còn lại
  3. Lưu file 01
  4. Rồi cứ thế làm tiếp theo thứ tự 02, 03, 04 .... 200 -> sau khi chạy xong ta sẽ được 200 files với tên từ 01->200 (mỗi file đã được thay giá trị đúng)
Mình có được module mẫu như sau:
Columns("A:A").Select
ExecuteExcel4Macro _
"FORMULA.REPLACE(""01"",""02"",2,1,FALSE,FALSE,,FALSE,FALSE,FALSE,FALSE)"
Columns("B:B").Select
ExecuteExcel4Macro _
"FORMULA.REPLACE(""01"",""02"",2,1,FALSE,FALSE,,FALSE,FALSE,FALSE,FALSE)"
Columns("Z:Z").Select
ExecuteExcel4Macro _
"FORMULA.REPLACE(""2001"",""2002"",2,1,FALSE,FALSE,,FALSE,FALSE,FALSE,FALSE)"
Columns("AO:AO").Select
ExecuteExcel4Macro _
"FORMULA.REPLACE(""2001"",""2002"",2,1,FALSE,FALSE,,FALSE,FALSE,FALSE,FALSE)"
Path = "/Users/catherine/Documents/Excel/Test//"
Path = "/Users/catherine/Documents/Excel/Test/Export//"
ActiveWorkbook.SaveAs Filename:= _
"/Users/catherine/Documents/Excel/Test/Export/Macro 02.xls" _
, FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

Mà mình cần làm tới khoảng 200 số thì không biết có cách tiện hơn ko ạ, mình tìm tòi, nghiên cứu thì có thể dùng thêm lệnh for ... mà đến đây là chịu.
Có ai biết có thể hướng dẫn mình với được ko ạ?

Cảm ơn mọi người trước ạ
 

File đính kèm

  • Macro 01b.xls
    322 KB · Đọc: 8
Dạ chào mọi người.
Hiện tại mình đang tạo 1 macro theo yêu cầu sau: Tìm & thay giá trị 4 cột sau đó lưu file theo thứ tự từ 01 đến một số nào đó mình muốn.
Các bước mình làm là:
  1. Chọn cột đầu tiên -> Find 01 -> Replace 01 thành 02 -> Close
  2. Tiếp tục các cột còn lại
  3. Lưu file 01
  4. Rồi cứ thế làm tiếp theo thứ tự 02, 03, 04 .... 200 -> sau khi chạy xong ta sẽ được 200 files với tên từ 01->200 (mỗi file đã được thay giá trị đúng)
Mình có được module mẫu như sau:
Columns("A:A").Select
ExecuteExcel4Macro _
"FORMULA.REPLACE(""01"",""02"",2,1,FALSE,FALSE,,FALSE,FALSE,FALSE,FALSE)"
Columns("B:B").Select
ExecuteExcel4Macro _
"FORMULA.REPLACE(""01"",""02"",2,1,FALSE,FALSE,,FALSE,FALSE,FALSE,FALSE)"
Columns("Z:Z").Select
ExecuteExcel4Macro _
"FORMULA.REPLACE(""2001"",""2002"",2,1,FALSE,FALSE,,FALSE,FALSE,FALSE,FALSE)"
Columns("AO:AO").Select
ExecuteExcel4Macro _
"FORMULA.REPLACE(""2001"",""2002"",2,1,FALSE,FALSE,,FALSE,FALSE,FALSE,FALSE)"
Path = "/Users/catherine/Documents/Excel/Test//"
Path = "/Users/catherine/Documents/Excel/Test/Export//"
ActiveWorkbook.SaveAs Filename:= _
"/Users/catherine/Documents/Excel/Test/Export/Macro 02.xls" _
, FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

Mà mình cần làm tới khoảng 200 số thì không biết có cách tiện hơn ko ạ, mình tìm tòi, nghiên cứu thì có thể dùng thêm lệnh for ... mà đến đây là chịu.
Có ai biết có thể hướng dẫn mình với được ko ạ?

Cảm ơn mọi người trước ạ
bạn gửi file lên chứ nói thế này ko ai đọc đâu thường thì nhìn vào file rồi mới tìm cách giải nhé
 
Dạ chào mọi người.
Có ai biết có thể hướng dẫn mình với được ko ạ?
Cảm ơn mọi người trước ạ

File ví dụ của bạn đâu, 01 trong 1 cells là chuỗi, vậy dữ liệu của bạn là số hay chuỗi
số thứ tự có vẻ lạ, 01 đến 2002, sao không phải là 1 - 2002, không thì phải là 0001 - 2002
 
bạn gửi file lên chứ nói thế này ko ai đọc đâu thường thì nhìn vào file rồi mới tìm cách giải nhé
bạn gửi file lên chứ nói thế này ko ai đọc đâu thường thì nhìn vào file rồi mới tìm cách giải nhé
Dạ mình đã đính kèm file lên rồi đó ạ.
Bạn xem giúp mình với nhé.
Bài đã được tự động gộp:

File ví dụ của bạn đâu, 01 trong 1 cells là chuỗi, vậy dữ liệu của bạn là số hay chuỗi
số thứ tự có vẻ lạ, 01 đến 2002, sao không phải là 1 - 2002, không thì phải là 0001 - 2002
Dạ trong một cột của mình vừa có chuỗi vừa số luôn, cái cần thay là số.
Còn số thứ tự là 01 đến khoảng 200 đó.
Tìm 2002 để nó ko bị nhầm với số khác trong 1 Cell, vì trong 1 cell có thể có số trùng nếu tìm ko chi tiết nó thay giá trị khác là sai luôn.
Bạn xem giúp mình với nhé
 
Dạ mình đã đính kèm file lên rồi đó ạ.
Bạn xem giúp mình với nhé.
Bài đã được tự động gộp:


Dạ trong một cột của mình vừa có chuỗi vừa số luôn, cái cần thay là số.
Còn số thứ tự là 01 đến khoảng 200 đó.
Tìm 2002 để nó ko bị nhầm với số khác trong 1 Cell, vì trong 1 cell có thể có số trùng nếu tìm ko chi tiết nó thay giá trị khác là sai luôn.
Bạn xem giúp mình với nhé
bạn làm ví dụ cụ thể đi nhé
 
Dạ mình đã đính kèm file lên rồi đó ạ.
Bạn xem giúp mình với nhé.
Bài đã được tự động gộp:


Dạ trong một cột của mình vừa có chuỗi vừa số luôn, cái cần thay là số.
Còn số thứ tự là 01 đến khoảng 200 đó.
Tìm 2002 để nó ko bị nhầm với số khác trong 1 Cell, vì trong 1 cell có thể có số trùng nếu tìm ko chi tiết nó thay giá trị khác là sai luôn.
Bạn xem giúp mình với nhé
Khó hiểu quá. replace canhan-01 thành canhan-02
hay là tìm thấy 01 là tăng lên 1 đổi lại chuỗi rồi tạo 1 file
canhan-01 canhan-02
canhan-01 canhan-03
canhan-01 canhan-04
Trên kia nói 4 cột, trong file có 2 cột
Còn lưu file 01 là file gì, phải chăng lưu dữ liệu, và lưu file vào đâu
 
Lần chỉnh sửa cuối:
Khó hiểu quá. replace canhan-01 thành canhan-02
hay là tìm thấy 01 là tăng lên 1 đổi lại chuỗi rồi tạo 1 file
canhan-01 canhan-02
canhan-01 canhan-03
canhan-01 canhan-04
Trên kia nói 4 cột, trong file có 2 cột
Còn lưu file 01 là file gì, phải chăng lưu dữ liệu, và lưu file vào đâu
Trong file đổi thêm 2 cột (Z:Z), (AO,AO) nữa đó Bạn, đổi 2001 đó.

Như thế này: mình gửi lại file ví dụ đơn giản hơn:
Yêu cầu là tìm, thay thế là lưu file đã thay ra 1 thư mục nào đó trên máy tính (thư mục nào cũng được vì mình có thể thay đường dẫn lưu)
Cụ thể:
Cột 1: tìm 01 -> thay thế 01 = 02
Cột 2: tìm 01 -> thay thế 01 = 02
Cột 3: tìm 2001 -> thay thế 2001 = 2002
Cột 4: tìm 2001 -> thay thế 2001 = 2002
Lưu file có tên "vidu 1"

Tiếp theo:
Cột 1: tìm 02 -> thay thế 03 = 03
Cột 2: tìm 02 -> thay thế 02 = 03
Cột 3: tìm 2002 -> thay thế 2002 = 2003
Cột 4: tìm 2002 -> thay thế 2002 = 2003
Lưu file có tên "vidu 2"

tương tự đến 200 ta được:
Cột 1: ten-200
Cột 2: ten 200
Cột 3: 20noidung200200
Cột 4: 20noidung200200
Lưu file "vidu 200"

Sau khi chạy xong thì dc 200 files excel đã thay thế hoàn chỉnh.
 

File đính kèm

  • vidu.xlsx
    43.8 KB · Đọc: 4
Trong file đổi thêm 2 cột (Z:Z), (AO,AO) nữa đó Bạn, đổi 2001 đó.

Như thế này: mình gửi lại file ví dụ đơn giản hơn:
Yêu cầu là tìm, thay thế là lưu file đã thay ra 1 thư mục nào đó trên máy tính (thư mục nào cũng được vì mình có thể thay đường dẫn lưu)
Cụ thể:
Cột 1: tìm 01 -> thay thế 01 = 02
Cột 2: tìm 01 -> thay thế 01 = 02
Cột 3: tìm 2001 -> thay thế 2001 = 2002
Cột 4: tìm 2001 -> thay thế 2001 = 2002
Lưu file có tên "vidu 1"

Tiếp theo:
Cột 1: tìm 02 -> thay thế 03 = 03
Cột 2: tìm 02 -> thay thế 02 = 03
Cột 3: tìm 2002 -> thay thế 2002 = 2003
Cột 4: tìm 2002 -> thay thế 2002 = 2003
Lưu file có tên "vidu 2"

tương tự đến 200 ta được:
Cột 1: ten-200
Cột 2: ten 200
Cột 3: 20noidung200200
Cột 4: 20noidung200200
Lưu file "vidu 200"

Sau khi chạy xong thì dc 200 files excel đã thay thế hoàn chỉnh.

Tôi chỉ giúp bạn Sub tạo ra file. Việc muốn xóa bạn làm bằng tay nhé
Mã:
Sub vidu_Save199file()
    Dim cot1, cot2, cot3, cot4, i, j
    Dim a, b
    Dim Wk As Workbook
  
    With Worksheets(1)
  
        cot1 = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row).Value
        cot2 = .Range("B2:B" & .Range("B" & Rows.Count).End(xlUp).Row).Value
        cot3 = .Range("C2:C" & .Range("C" & Rows.Count).End(xlUp).Row).Value
        cot4 = .Range("D2:D" & .Range("D" & Rows.Count).End(xlUp).Row).Value
  
    For j = 1 To 199
        For i = 1 To UBound(cot1)
            a = CStr(j): b = CStr(j + 1)
            If j <= 9 Then a = "0" & CStr(j)
            If j <= 8 Then b = "0" & CStr(j + 1)
            If Right(cot1(i, 1), 2) = a Then cot1(i, 1) = Replace(cot1(i, 1), a, b)
            If Right(cot2(i, 1), 2) = a Then cot2(i, 1) = Replace(cot2(i, 1), a, b)
            If Right(cot3(i, 1), 2) = a Then cot3(i, 1) = Replace(cot3(i, 1), a, b)
            If Right(cot4(i, 1), 2) = a Then cot4(i, 1) = Replace(cot4(i, 1), a, b)
        Next i
        Set Wk = Workbooks.Add
        Wk.Worksheets(1).[A1:D1].Value = Worksheets(1).[A1:D1].Value
        Wk.Worksheets(1).[A2].Resize(UBound(cot1)) = cot1
        Wk.Worksheets(1).[B2].Resize(UBound(cot2)) = cot2
        Wk.Worksheets(1).[C2].Resize(UBound(cot3)) = cot3
        Wk.Worksheets(1).[D2].Resize(UBound(cot4)) = cot4
        Application.DisplayAlerts = False
            Wk.SaveAs Filename:="Vidu" & j + 1 & ".xlsx"
            wk.close
        Application.DisplayAlerts = True
        Set Wk = Nothing
    Next j
    End With
End Sub
 
Lần chỉnh sửa cuối:
Tôi chỉ giúp bạn Sub tạo ra file. Việc muốn xóa bạn làm bằng tay nhé
Mã:
Sub vidu_Save199file()
    Dim cot1, cot2, cot3, cot4, i, j
    Dim a, b
    Dim Wk As Workbook
 
    With Worksheets(1)
 
        cot1 = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row).Value
        cot2 = .Range("B2:B" & .Range("B" & Rows.Count).End(xlUp).Row).Value
        cot3 = .Range("C2:C" & .Range("C" & Rows.Count).End(xlUp).Row).Value
        cot4 = .Range("D2:D" & .Range("D" & Rows.Count).End(xlUp).Row).Value
 
    For j = 1 To 199
        For i = 1 To UBound(cot1)
            a = CStr(j): b = CStr(j + 1)
            If j <= 9 Then a = "0" & CStr(j)
            If j <= 8 Then b = "0" & CStr(j + 1)
            If Right(cot1(i, 1), 2) = a Then cot1(i, 1) = Replace(cot1(i, 1), a, b)
            If Right(cot2(i, 1), 2) = a Then cot2(i, 1) = Replace(cot2(i, 1), a, b)
            If Right(cot3(i, 1), 2) = a Then cot3(i, 1) = Replace(cot3(i, 1), a, b)
            If Right(cot4(i, 1), 2) = a Then cot4(i, 1) = Replace(cot4(i, 1), a, b)
        Next i
        Set Wk = Workbooks.Add
        Wk.Worksheets(1).[A1:D1].Value = Worksheets(1).[A1:D1].Value
        Wk.Worksheets(1).[A2].Resize(UBound(cot1)) = cot1
        Wk.Worksheets(1).[B2].Resize(UBound(cot2)) = cot2
        Wk.Worksheets(1).[C2].Resize(UBound(cot3)) = cot3
        Wk.Worksheets(1).[D2].Resize(UBound(cot4)) = cot4
        Application.DisplayAlerts = False
            Wk.SaveAs Filename:="Vidu" & j + 1 & ".xlsx"
        Application.DisplayAlerts = True
        Set Wk = Nothing
    Next j
    End With
End Sub
code này bạn không chọn Ổ để lưu cho nó luôn đi rồi lại đóng lại chứ đi lưu tay chết mệt ra mở 2000 foder 1 luc =))
 
code này bạn không chọn Ổ để lưu cho nó luôn đi rồi lại đóng lại chứ đi lưu tay chết mệt ra mở 2000 foder 1 luc =))
snow25 nhắc mới nhớ Save quên đóng workbook, để sửa lại, Nó lưu ngay trên đường dẫn file hiện tại chứ có 2000 folder gì đâu
 
đúng nhưng không đóng lại mà chạy chậm như rùa ấy.:D
Bạn đừng đùa chứ. Thử ví dụ này xem:
Bạn Mở cửa chạy vào phòng thay đồ mới chạy ra đóng cửa khóa lại
Lặp lại 5 lần nếu 1 phút 30 thì xem như bạn đúng.
 
Web KT
Back
Top Bottom