Nhờ giúp đỡ chuyển đoạn text thành công thức!

Liên hệ QC

phambahoang

Thành viên mới
Tham gia
26/12/15
Bài viết
28
Đượ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

  • A.xlsm
    10.6 KB · Đọc: 17
  • B.xlsm
    13.4 KB · Đọc: 14
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

  • UpdateCongThuc.xlsm
    13.3 KB · Đọc: 8
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
Web KT

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

Back
Top Bottom