Nhờ giúp đỡ chuyển đoạn text thành công thức! (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

phambahoang

Thành viên mới
Tham gia
26/12/15
Bài viết
31
Được thích
1
Tình hình là mình tìm trên google khá lâu nhưng do mình không biết diễn đạt thế nào vì mình không biết về VBA (hiện tại đang tìm hiểu)
Vấn đề của mình là mình có 1 file excel tổng tên là (A.xlsm) để nhập các dữ liệu dùng chung, mình gõ toàn bộ các công thức phải sử dụng cho các file excel (B1, B2, B3, .......Bn.xlsm) và các dữ liệu chung cần lấy vào đây.
Mình đang khá đau đầu do công thức của mình thì khả năng bị thay đổi là rất lớn vì nó không hề cố định bởi mình vừa làm vừa sửa mà trong khi các file excel (B1, B2, B3, .......Bn) này vẫn đang sử dụng nên mỗi lần thay đổi vậy mình phải vào từng file để sửa thực sự rất mất công, thậm chí có khi quên quên nhớ nhớ.
Nên mình mới nghĩ là nếu như có thể dồn hết công thức vào 1 file tổng (A) rồi từ đó mình chỉ việc sửa ở file tổng (A) thì các file kia có thể cập nhật theo thì đỡ mất công hơn.
Tìm thôi hồi thử cả INDIRECT nhưng không hợp lý vì có hàm dài quá thêm indirect vào thì bị dài quá số kí tự.
Xin các cao nhân có thể chỉ, tư vấn cho mình cách giải quyết vấn đề này với được không?
Bài đã được tự động gộp:

Ví dụ như công thức này: LOOKUP(2;1/((A1=DV_FULL_VT)*([DATA.xlsx]DATAA!A54=NV1_));TEN)
Mình muốn copy từ bên file tổng (A) sang các file (B1, B2, B3, .......Bn) và nó tự thêm dấu = vào để chạy luôn công thức tại các file (B1, B2, B3, .......Bn).
 
Bạn trình bày vấn đề rối quá và cũng không có file ví dụ
Theo mình đoán thì vấn đề của bạn là:
- Có File tổng và các file con (có cùng cấu trúc cột dòng và tên sheet hoặc tối thiểu là vị trí sheet trên Sheet tabs)
- Khi bạn cập nhập công thức ở File tổng ứng với ô A1 B2 C3 ... của sheet ABC chẳng hạn thì các file consheet ABC cũng phải tự động cập nhập lại công tức giống như công thức của ô A1 B2 C3 ... đúng không?
 
Upvote 0
Bạn trình bày vấn đề rối quá và cũng không có file ví dụ
Theo mình đoán thì vấn đề của bạn là:
- Có File tổng và các file con (có cùng cấu trúc cột dòng và tên sheet hoặc tối thiểu là vị trí sheet trên Sheet tabs)
- Khi bạn cập nhập công thức ở File tổng ứng với ô A1 B2 C3 ... của sheet ABC chẳng hạn thì các file consheet ABC cũng phải tự động cập nhập lại công tức giống như công thức của ô A1 B2 C3 ... đúng không?
Đúng vậy bạn ơi. Mình đang tìm cách để làm như vậy.
 
Upvote 0
Mình gửi file mẫu lên mong các bạn chỉ giúp cho, xin cảm ơn!
 

File đính kèm

Upvote 0
bạn tham khảo.
có 1 file công thức (A). và các file dữ liệu Data 1, 2,...
Khi bạn sửa file công thức A => file B. thì tạo foder mới và nạp các file dữ liệu vào file công thức B để có bảng tính theo từng file dữ liệu như B1,B2,...
Mình thấy cách này giống như cách mình đang sử dụng CSDL
 
Upvote 0
bạn tham khảo.
có 1 file công thức (A). và các file dữ liệu Data 1, 2,...
Khi bạn sửa file công thức A => file B. thì tạo foder mới và nạp các file dữ liệu vào file công thức B để có bảng tính theo từng file dữ liệu như B1,B2,...
Mình thấy cách này giống như cách mình đang sử dụng CSDL
Nói thật là mình không có kinh nghiệm về excel và CSDL và VBA thì mới chỉ đang đọc và tìm hiểu nên mình chả rõ là làm theo phương pháp nào tốt hơn, nên mình chắc là cái nào có thể làm được và sau này có thể chỉnh sửa được thì tốt hơn vì như đã nói là vẫn vừa làm vừa sửa.
 
Upvote 0
Mình gửi file mẫu lên mong các bạn chỉ giúp cho, xin cảm ơn!
Mình thấy file của bạn có vấn đề là ở file B.xlsm có đặt tên dựa vào file A.xlsm để xác định tham chiếu trong công thức ... trường hợp phạm vi dữ liệu ở File A.xlsm tăng lên => Name ở file B.xlsm cũng phải thay đổi theo
Vấn đề thứ 2 là cái đích cuối cùng phải chăng là từ data file tổng A.xlsm (đã bao gồm các trường được xử lý bởi công thức) xuất sang file B.xlsm, C.xlsm, ... theo điều kiện nào đó. Việc giữ nguyên công thức khi trích ra các file B.xlsm, C.xlsm có cần thiết không hay chỉ cần giá trị sau khi cập nhập công thức ở File tổng A.xlsm là đủ?
Mình gợi ý ở đây là: File A.xlsm bạn cứ edit chỉnh sửa thoải mái => chỉ việc đưa ra tiêu chí điều kiện trích xuất giá trị sau cập nhập file A ra file B.xlsm, C.xlsm, ... vào 1 folder chỉ định thì sẽ dễ dàng hơn
 
Upvote 0
Mình thấy file của bạn có vấn đề là ở file B.xlsm có đặt tên dựa vào file A.xlsm để xác định tham chiếu trong công thức ... trường hợp phạm vi dữ liệu ở File A.xlsm tăng lên => Name ở file B.xlsm cũng phải thay đổi theo
Vấn đề thứ 2 là cái đích cuối cùng phải chăng là từ data file tổng A.xlsm (đã bao gồm các trường được xử lý bởi công thức) xuất sang file B.xlsm, C.xlsm, ... theo điều kiện nào đó. Việc giữ nguyên công thức khi trích ra các file B.xlsm, C.xlsm có cần thiết không hay chỉ cần giá trị sau khi cập nhập công thức ở File tổng A.xlsm là đủ?
Mình gợi ý ở đây là: File A.xlsm bạn cứ edit chỉnh sửa thoải mái => chỉ việc đưa ra tiêu chí điều kiện trích xuất giá trị sau cập nhập file A ra file B.xlsm, C.xlsm, ... vào 1 folder chỉ định thì sẽ dễ dàng hơn
1.Do mình đặt tên dựa vào file A là vì mình có dữ liệu cần dùng chung ở đây, dữ liệu này là 1 căn cứ, điều kiện để công thức của mình hoạt động.

2.Mục tiêu duy nhất của mình là
Ví dụ như công thức này: LOOKUP(2;1/((A1=DV_FULL_VT)*([DATA.xlsx]DATAA!A54=NV1_));TEN)

(Cái công thức này mình sẽ tách nó thành từng ô dữ liệu rồi dùng hàm CONCATENATE để ghép nó lại bên file tổng A sau đó copy sang file B và click vào ô thêm bằng tay cái dấu = vào đằng trước nội dung copy sang để nó trở thành công thức).

Hiện tại mình đang dùng thử record Marco làm như trên nhưng có điều trong code nó bê nguyên cả cái công thức vào chứ không lấy mỗi cái ô chứa công thức dẫn đến nó fix cứng luôn cái lệnh và chỉ có thể thay đổi thủ công, không hiểu làm sao để nó tự động làm được cái việc là:
copy từ bên file tổng (A) sang 1 ô của sheet được chỉ định trong file (B) và nó tự thêm dấu = vào để chạy luôn công thức tại các file (B) này.

3.Do cái đặc thù các file của mình luôn biến động, mỗi file B khi sinh ra lại được sử dụng trong 1 khoảng thời gian dài và nó luôn có những cập nhật khác bằng tay ngoài công thức. Nên mình sợ nếu như xuất ra 1 file vào thư mục khác nó không phù hợp với nhu cầu của mình hiện tại.

Liệu cái yêu cầu của mình có bị vô lý không?
 
Upvote 0
1.Do mình đặt tên dựa vào file A là vì mình có dữ liệu cần dùng chung ở đây, dữ liệu này là 1 căn cứ, điều kiện để công thức của mình hoạt động.

2.Mục tiêu duy nhất của mình là
Ví dụ như công thức này: LOOKUP(2;1/((A1=DV_FULL_VT)*([DATA.xlsx]DATAA!A54=NV1_));TEN)

(Cái công thức này mình sẽ tách nó thành từng ô dữ liệu rồi dùng hàm CONCATENATE để ghép nó lại bên file tổng A sau đó copy sang file B và click vào ô thêm bằng tay cái dấu = vào đằng trước nội dung copy sang để nó trở thành công thức).

Hiện tại mình đang dùng thử record Marco làm như trên nhưng có điều trong code nó bê nguyên cả cái công thức vào chứ không lấy mỗi cái ô chứa công thức dẫn đến nó fix cứng luôn cái lệnh và chỉ có thể thay đổi thủ công, không hiểu làm sao để nó tự động làm được cái việc là:
copy từ bên file tổng (A) sang 1 ô của sheet được chỉ định trong file (B) và nó tự thêm dấu = vào để chạy luôn công thức tại các file (B) này.

3.Do cái đặc thù các file của mình luôn biến động, mỗi file B khi sinh ra lại được sử dụng trong 1 khoảng thời gian dài và nó luôn có những cập nhật khác bằng tay ngoài công thức. Nên mình sợ nếu như xuất ra 1 file vào thư mục khác nó không phù hợp với nhu cầu của mình hiện tại.

Liệu cái yêu cầu của mình có bị vô lý không?
Tôi chưa xem file của bạn. Tôi ví dụ bằng 1 trường hợp đơn giản. Tôi có 1 chuỗi công thức tại G2 là VLOOKUP(F2;B3:C5;2;0). Giờ tôi chạy câu lệnh sau:
Range("H3").Formula = "=" & Replace(Range("G2"), ";", ",")
File:
 

File đính kèm

Upvote 0
...Vấn đề của mình là mình có 1 file excel tổng tên là (A.xlsm) để nhập các dữ liệu dùng chung, mình gõ toàn bộ các công thức phải sử dụng cho các file excel (B1, B2, B3, .......Bn.xlsm) và các dữ liệu chung cần lấy vào đây.
Mình đang khá đau đầu do công thức của mình thì khả năng bị thay đổi là rất lớn vì nó không hề cố định bởi mình vừa làm vừa sửa mà trong khi các file excel (B1, B2, B3, .......Bn) này vẫn đang sử dụng nên mỗi lần thay đổi vậy mình phải vào từng file để sửa thực sự rất mất công, thậm chí có khi quên quên nhớ nhớ....
Các file B này đang sử dụng cụ thể là thế nào:

Quá trình sử dụng làm thay đổi công thức hay là thay đổi vùng tham chiếu?
Hay là có thể mất công thức?
 
Upvote 0
@phambahoang
Đã xem file của bạn, tôi thấy dùng VBA điền công thức ổn mà. Thử đoạn code sau để điền công thức chứa tại B2 file nguồn vào D6 file đích:
Rich (BB code):
Sub GPE()
    Dim sWb As Workbook, dWb As Workbook
    Dim CongThuc As String, fPath As String
    Application.ScreenUpdating = False
    Set sWb = ThisWorkbook
    fPath = ThisWorkbook.Path & "\"
    Set dWb = Workbooks.Open(ThisWorkbook.Path & "\" & "B.xlsm")
    CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
    dWb.Sheets("Sheet1").Range("D6").Formula = CongThuc
    dWb.Close True
    Set sWb = Nothing
    Set dWb = Nothing
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Tôi chưa xem file của bạn. Tôi ví dụ bằng 1 trường hợp đơn giản. Tôi có 1 chuỗi công thức tại G2 là VLOOKUP(F2;B3:C5;2;0). Giờ tôi chạy câu lệnh sau:
Range("H3").Formula = "=" & Replace(Range("G2"), ";", ",")
File:
Đúng là ý tưởng của m là vậy. Em đã chạy thử code của bác cũng ok và theo như em hiểu được chút thì có vẻ ngắn gọn và hiệu quả, em chỉ nghĩ vậy thôi.

@phambahoang
Đã xem file của bạn, tôi thấy dùng VBA điền công thức ổn mà. Thử đoạn code sau để điền công thức chứa tại B2 file nguồn vào D6 file đích:
Rich (BB code):
Sub GPE()
    Dim sWb As Workbook, dWb As Workbook
    Dim CongThuc As String, fPath As String
    Application.ScreenUpdating = False
    Set sWb = ThisWorkbook
    fPath = ThisWorkbook.Path & "\"
    Set dWb = Workbooks.Open(ThisWorkbook.Path & "\" & "B.xlsm")
    CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
    dWb.Sheets("Sheet1").Range("D6").Formula = CongThuc
    dWb.Close True
    Set sWb = Nothing
    Set dWb = Nothing
    Application.ScreenUpdating = True
End Sub
Code của bác đúng như cái em đang diễn tả luôn, công nhận VBA nó chạy nhanh và mượt hơn là hàm, chứ hàm nào dài chạy mãi mới xong, trong khi VBA vù cái ra luôn.

Mừng quá các bác ạ, đêm qua em mày mò mãi tìm trên mạng có 1 trang bên nước ngoài họ code thành hàm chuyển đổi luôn. Nhưng đúng là học cách làm VBA để làm theo ý tưởng và nhu cầu của mình sướng ghê. Thật sự cám ơn các bác rất nhiều, nếu được xin mời các bác cafe chém gió hoặc 1 chầu nhậu nếu các bác hứng thú, em ở hà nội ạ, cuối tuần thứ 7 nếu các bác rảnh thì anh em giao lưu ạ.
 
Upvote 0
Set dWb = Workbooks.Open(ThisWorkbook.Path & "\" & "B.xlsm")

Với dòng code này em chỉ có thể mở file với tên cố định, nếu bây giờ nếu muốn mở tất cả file dạng xlsm tại thư mục chỉ định (VD: D:\DATA) thì phải chỉnh lại như thế nào, giúp em với bác ơi.
 
Upvote 0
Set dWb = Workbooks.Open(ThisWorkbook.Path & "\" & "B.xlsm")

Với dòng code này em chỉ có thể mở file với tên cố định, nếu bây giờ nếu muốn mở tất cả file dạng xlsm tại thư mục chỉ định (VD: D:\DATA) thì phải chỉnh lại như thế nào, giúp em với bác ơi.
Bạn thay bằng Sub sau
Rich (BB code):
Sub GPE()
    Dim sWb As Workbook, dWb As Workbook
    Dim CongThuc As String, Fullname, arrPath
    Application.ScreenUpdating = False
    Set sWb = ThisWorkbook
    arrPath = Application.GetOpenFilename(Title:="Chon cac file can lam.", _
    FileFilter:="Excel Files *.xls* (*.xls*),", MultiSelect:=True)
    On Error GoTo Arr
    If arrPath = False Then
        MsgBox "Không có file nào.", vbExclamation, "Sorry!"
        Exit Sub
    Else
Arr:
        For Each Fullname In arrPath
            Set dWb = Workbooks.Open(Fullname)
            CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
            dWb.Sheets("Sheet1").Range("E6").Formula = CongThuc
            dWb.Close True
        Next
    End If
    Set sWb = Nothing
    Set dWb = Nothing
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Bạn thay bằng Sub sau
Rich (BB code):
Sub GPE()
    Dim sWb As Workbook, dWb As Workbook
    Dim CongThuc As String, Fullname, arrPath
    Application.ScreenUpdating = False
    Set sWb = ThisWorkbook
    arrPath = Application.GetOpenFilename(Title:="Chon cac file can lam.", _
    FileFilter:="Excel Files *.xls* (*.xls*),", MultiSelect:=True)
    On Error GoTo Arr
    If arrPath = False Then
        MsgBox "Không có file nào.", vbExclamation, "Sorry!"
        Exit Sub
    Else
Arr:
        For Each Fullname In arrPath
            Set dWb = Workbooks.Open(Fullname)
            CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
            dWb.Sheets("Sheet1").Range("E6").Formula = CongThuc
            dWb.Close True
        Next
    End If
    Set sWb = Nothing
    Set dWb = Nothing
    Application.ScreenUpdating = True
End Sub
Quá ok bác ạ, không có gì phải bàn. Em cám ơn sự nhiệt tình của bác, trân trọng mời bác cùng mọi người đã phản hồi trong chủ đề giúp em 1 bữa nhậu để giao lưu vào cuối tuần này luôn cũng được. Xin cảm ơn!
 
Upvote 0
Quá ok bác ạ, không có gì phải bàn. Em cám ơn sự nhiệt tình của bác, trân trọng mời bác cùng mọi người đã phản hồi trong chủ đề giúp em 1 bữa nhậu để giao lưu vào cuối tuần này luôn cũng được. Xin cảm ơn!
Giá như tôi ở Hà Nội. Haha.
 
Upvote 0
Bác nào đi được tầm 11h trưa nay qua bia hơi hải xồm nguyễn công trứ (đối diện vườn hoa pasteur). Các bác xem có tiện đường không, nếu không bố trí địa điểm thuận tiện hơn.
 
Upvote 0
bác nào đi được thì gửi số điện thoại qua inbox giúp em để em chủ động liên lạc nhé, mong được gặp gỡ mọi người.
 
Upvote 0
Bạn thay bằng Sub sau
Rich (BB code):
Sub GPE()
    Dim sWb As Workbook, dWb As Workbook
    Dim CongThuc As String, Fullname, arrPath
    Application.ScreenUpdating = False
    Set sWb = ThisWorkbook
    arrPath = Application.GetOpenFilename(Title:="Chon cac file can lam.", _
    FileFilter:="Excel Files *.xls* (*.xls*),", MultiSelect:=True)
    On Error GoTo Arr
    If arrPath = False Then
        MsgBox "Không có file nào.", vbExclamation, "Sorry!"
        Exit Sub
    Else
Arr:
        For Each Fullname In arrPath
            Set dWb = Workbooks.Open(Fullname)
            CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
            dWb.Sheets("Sheet1").Range("E6").Formula = CongThuc
            dWb.Close True
        Next
    End If
    Set sWb = Nothing
    Set dWb = Nothing
    Application.ScreenUpdating = True
End Sub
Xin phép làm phiền bạn thêm 1 lần nữa, mình muốn hỏi thêm là:
CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
dWb.Sheets("Sheet1").Range("E6").Formula = CongThuc
Mình muốn gán các giá trị có chữ màu Xanh này vào công thức dựa vào nội dung của 3 ô trong file Nguồn nhờ bạn chỉnh lại code giúp mình với, mình có tìm hiểu thấy người ta sử dụng code (If Target.Address = "$B$2" Then) nhưng không biết thay thế vào chỗ Range("B2") kiểu gì mà cũng mày mò mãi không ra được.
Và trong code lấy ô nguồn CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",") mình muốn lấy thêm 1 vị trí khác nữa ngoài ô B2 chẳng hạn B5 thì mình đang phải khai thêm như thế này
Dim CongThuc As String
Dim CongThuc1 As String
CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
dWb.Sheets("Sheet1").Range("E6").Formula = CongThuc
CongThuc1 = Replace("=" & sWb.Sheets("Sheet1").Range("B5"), ";", ",")
dWb.Sheets("Sheet1").Range("E10").Formula = CongThuc1
Liệu có thể làm nó ngắn gọn hơn được không. Nhờ bạn hỗ trợ giúp mình nhé.
 
Upvote 0
Xin phép làm phiền bạn thêm 1 lần nữa, mình muốn hỏi thêm là:
CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
dWb.Sheets("Sheet1").Range("E6").Formula = CongThuc
Mình muốn gán các giá trị có chữ màu Xanh này vào công thức dựa vào nội dung của 3 ô trong file Nguồn nhờ bạn chỉnh lại code giúp mình với, mình có tìm hiểu thấy người ta sử dụng code (If Target.Address = "$B$2" Then) nhưng không biết thay thế vào chỗ Range("B2") kiểu gì mà cũng mày mò mãi không ra được.
Và trong code lấy ô nguồn CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",") mình muốn lấy thêm 1 vị trí khác nữa ngoài ô B2 chẳng hạn B5 thì mình đang phải khai thêm như thế này
Dim CongThuc As String
Dim CongThuc1 As String
CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
dWb.Sheets("Sheet1").Range("E6").Formula = CongThuc
CongThuc1 = Replace("=" & sWb.Sheets("Sheet1").Range("B5"), ";", ",")
dWb.Sheets("Sheet1").Range("E10").Formula = CongThuc1
Liệu có thể làm nó ngắn gọn hơn được không. Nhờ bạn hỗ trợ giúp mình nhé.
If Target.Address = "$B$2" là điều kiện để dùng trong các sự kiện của Worksheet chứ ở đây không liên quan gì

Nếu chỉ vài ba ô thì bạn cứ làm tuần tự như thế cũng được nhưng không cần khai thêm CongThuc1. Cứ dùng lại biến CongThuc, nó tự bỏ giá trị cũ và lấy giá trị mới. Còn nếu cả chục ô cần làm thì phải dùng cách khác.
 
Upvote 0
Xin phép làm phiền bạn thêm 1 lần nữa, mình muốn hỏi thêm là:
CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
dWb.Sheets("Sheet1").Range("E6").Formula = CongThuc
Mình muốn gán các giá trị B2, sheet1, E6 này vào công thức dựa vào nội dung của 3 ô trong file Nguồn dạng như dùng indirect của excel nhờ bạn chỉnh lại code giúp mình với hoặc chỉ m cách làm được thì tốt quá.
 
Upvote 0
Xin phép làm phiền bạn thêm 1 lần nữa, mình muốn hỏi thêm là:
CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
dWb.Sheets("Sheet1").Range("E6").Formula = CongThuc
Mình muốn gán các giá trị B2, sheet1, E6 này vào công thức dựa vào nội dung của 3 ô trong file Nguồn dạng như dùng indirect của excel nhờ bạn chỉnh lại code giúp mình với hoặc chỉ m cách làm được thì tốt quá.
Bạn đưa file với công thức cụ thể chứ tôi không hiểu bạn muốn gì?
 
Upvote 0
Muốn chơi cái trò lắc léo này thì phải biết Debug. Chạy thử và xem từng giai đoạn diễn biến, kiểm soát từng ký tự một.
Không chịu debug mà cứ hỏi code thì thể nào cũng ra kết quả sai bấy.
 
Upvote 0
Xin phép làm phiền bạn thêm 1 lần nữa, mình muốn hỏi thêm là:
CongThuc = Replace("=" & sWb.Sheets("Sheet1").Range("B2"), ";", ",")
dWb.Sheets("Sheet1").Range("E6").Formula = CongThuc
Mình muốn gán các giá trị B2, sheet1, E6 này vào công thức dựa vào nội dung của 3 ô trong file Nguồn dạng như dùng indirect của excel nhờ bạn chỉnh lại code giúp mình với hoặc chỉ m cách làm được thì tốt quá.
Chừ hết men trong người nên hiểu rồi. Cách chân phương là đặt 3 biến Cell1, Cell2, Cell3 chứa giá trị của 3 ô: Cell1 = Range("A1"), Cell2 = Range("B1"), Cell3 = Range("C1"). Trong đó
A1 chứa chuỗi B2
B1 chứa Sheet1
C1 chứa E6

Range("A1") được hiểu là ActiveSheet.Range("A1")

Thay 3 biến đó vào công thức kia thôi, ví dụ
CongThuc = Replace("=" & sWb.Sheets(Cell2).Range(Cell1), ";", ",")
 
Upvote 0
Chừ hết men trong người nên hiểu rồi. Cách chân phương là đặt 3 biến Cell1, Cell2, Cell3 chứa giá trị của 3 ô: Cell1 = Range("A1"), Cell2 = Range("B1"), Cell3 = Range("C1"). Trong đó
A1 chứa chuỗi B2
B1 chứa Sheet1
C1 chứa E6

Range("A1") được hiểu là ActiveSheet.Range("A1")

Thay 3 biến đó vào công thức kia thôi, ví dụ
CongThuc = Replace("=" & sWb.Sheets(Cell2).Range(Cell1), ";", ",")
Bác có thể giải thích thêm cho em 1 chút, em chưa hiểu chỗ này lắm
Cell2 = Range("B1"),
B1 chứa Sheet1

CongThuc = Replace("=" & sWb.Sheets(Cell2).Range(Cell1), ";", ",")

Mà như em hiểu thì ở trong đoạn code này nó là string, bây giờ em đang gán Dim Cell2 As Range cơ, em chưa hiểu chỗ này lắm, xin nhờ bác chỉ thêm giúp em.
 
Upvote 0
Bác có thể giải thích thêm cho em 1 chút, em chưa hiểu chỗ này lắm
Cell2 = Range("B1"),
B1 chứa Sheet1

CongThuc = Replace("=" & sWb.Sheets(Cell2).Range(Cell1), ";", ",")

Mà như em hiểu thì ở trong đoạn code này nó là string, bây giờ em đang gán Dim Cell2 As Range cơ, em chưa hiểu chỗ này lắm, xin nhờ bác chỉ thêm giúp em.
Cell1, Cell2 là biến string mà.
 
Upvote 0
Sub GPE()
Dim sWb As Workbook, dWb As Workbook
Dim CongThuc As String, Fullname, arrPath
'bien source
Dim wsSR1 As String
Dim celSR1 As String
Dim celSR2 As String
'bien destination
Dim wsDES1 As String
Dim celDES1 As String
Dim celDES2 As String
Application.ScreenUpdating = False
Set sWb = ThisWorkbook
'gan source
wsSR1 = Range("E3")
celSR1 = Range("E4").Value
celSR2 = Range("E5").Value
'gan destination
wsDES1 = Range("E7")
celDES1 = Range("E8").Value
celDES2 = Range("E9").Value
arrPath = Application.GetOpenFilename(Title:="Chon cac file can lam.", _
FileFilter:="Excel Files *.xls* (*.xls*),", MultiSelect:=True)
On Error GoTo Arr
If arrPath = False Then
MsgBox "Không có file nào.", vbExclamation, "Sorry!"
Exit Sub
Else
Arr:
For Each Fullname In arrPath
Set dWb = Workbooks.Open(Fullname)
CongThuc = Replace("=" & sWb.Sheets(wsSR1).Range(celSR1), ";", ",") 'source
dWb.Sheets(wsDES1).Range(celDES1).Formula = CongThuc 'destination
CongThuc = Replace("=" & sWb.Sheets(wsSR1).Range(celSR2), ";", ",")
dWb.Sheets(wsDES1).Range(celDES2).Formula = CongThuc
dWb.Close True
Next
End If
Set sWb = Nothing
Set dWb = Nothing
Application.ScreenUpdating = True
End Sub


Lúc đầu em không gán Value vào đây toàn báo lỗi
gán vào là ok ngay celSR1 = Range("E4").Value
em cũng tìm hiểu cách debug nhưng cũng đang chưa hiểu rõ lắm, chắc phải tìm hiểu thêm.
Cám ơn bác Maika8008 đã tận tình hướng dẫn, may quá cuối cùng cũng ok.
 
Upvote 0

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

Back
Top Bottom