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á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
Web KT

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

Back
Top Bottom