Nhờ trợ giúp tham chiếu công thức trong Excel bằng VBA

Liên hệ QC

Phanhanhdai

Thành viên tiêu biểu
Tham gia
16/3/08
Bài viết
733
Được thích
1,876
Nghề nghiệp
Thiết kế công trình
Trong xây dựng công trình, tại bảng phân tích vật tư bọn em có rất nhiều công việc (Sheet khoảng 10.000 dòng), khi chạy chương trình dự toán xong bọn em nhiều khi phải chèn rât nhiều công việc mới vào sau đó tham chiếu bằng tay sao cho ứng với mỗi công việc cột Vật tư = thi công X định mức. Bây giờ giả sử em xóa hoàn toàn công thức tại cột vật tư (cột G tại file đính kèm), có cách nào viết chương trình VBA sao cho khi chạy VBA (có thể ấn vào nút Botton chẳng hạn) là lập tức cột G lại tham chiếu (dạng Funtion) với cột E và F như trước khi xóa không. Mong các bác cao thủ VBA giúp đỡ
[FONT=.VnTime] [/FONT]
 
Lần chỉnh sửa cuối:
Trong xây dựng công trình, tại bảng phân tích vật tư bọn em có rất nhiều công việc (Sheet khoảng 10.000 dòng), khi chạy chương trình dự toán xong bọn em nhiều khi phải chèn rât nhiều công việc mới vào sau đó tham chiếu bằng tay sao cho ứng với mỗi công việc cột Vật tư = thi công X định mức. Bây giờ giả sử em xóa hoàn toàn công thức tại cột vật tư (cột G tại file đính kèm), có cách nào viết chương trình VBA sao cho khi chạy VBA (có thể ấn vào nút Botton chẳng hạn) là lập tức cột G lại tham chiếu (dạng Funtion) với cột E và F như trước khi xóa không. Mong các bác cao thủ VBA giúp đỡ
Chọn cột G và chạy Macro này
PHP:
Sub Text()
For Each Rng In Selection
    If Rng.Offset(, -1) <> "" Then
        Rng.Formula = "=" & Rng.Offset(, -1).Address & "*" & Rng.Offset(, -2).End(xlUp).Address
    End If
Next
End Sub
Sửa lại cho phù hợp với chương trình của bạn.
 
Upvote 0
Chọn cột G và chạy Macro này
PHP:
Sub Text()
For Each Rng In Selection
    If Rng.Offset(, -1) <> "" Then
        Rng.Formula = "=" & Rng.Offset(, -1).Address & "*" & Rng.Offset(, -2).End(xlUp).Address
    End If
Next
End Sub
Sửa lại cho phù hợp với chương trình của bạn.
Em đã thử rồi chương trình chạy được rất đúng ý em nhờ. Vì em chưa biết nhiều về VBA mong anh có thể giải thích Code hộ em được không ạh.
 
Lần chỉnh sửa cuối:
Upvote 0
Chọn cột G và chạy Macro này
Sửa lại cho phù hợp với chương trình của bạn.
Quả thật nếu biết VBA thì nhiều khi nó giúp công việc của mỗi người nhẹ đi rất nhiều mà không phải tham chiếu bằng tay. Em xin mạn phép nhờ các anh giúp bài này tương tự như bài trước dùng VBA, mong anh và mọi người giúp đỡ.
 
Upvote 0
Quả thật nếu biết VBA thì nhiều khi nó giúp công việc của mỗi người nhẹ đi rất nhiều mà không phải tham chiếu bằng tay. Em xin mạn phép nhờ các anh giúp bài này tương tự như bài trước dùng VBA, mong anh và mọi người giúp đỡ.
PHP:
Sub Text()
R = 6
For Each Rng In Selection
    If Rng = "Cong" Then
        Cells(R, 10).Formula = "=" & Rng.Offset(, 1).Address
        R = R + 1
    End If
Next
End Sub
 
Upvote 0
Quả thật nếu biết VBA thì nhiều khi nó giúp công việc của mỗi người nhẹ đi rất nhiều mà không phải tham chiếu bằng tay. Em xin mạn phép nhờ các anh giúp bài này tương tự như bài trước dùng VBA, mong anh và mọi người giúp đỡ.
Sau bạn không dùng AutoFilter nhỉ? AutoFilter cột Dien giai với điều kiện lọc = Cong rồi copy cột D paste sang cột J? Khó khăn gì đâu chứ
 
Upvote 0
Sau bạn không dùng AutoFilter nhỉ? AutoFilter cột Dien giai với điều kiện lọc = Cong rồi copy cột D paste sang cột J? Khó khăn gì đâu chứ
Cảm ơn anh đã chỉ bảo, nhưng công việc thực tế của em dữ liệu khoảng mấy ngàn dòng. Bài toán của em thực tế phần giả sử bị xóa đi ở bài 2 nó nằm ở Sheet khác (tức Sheet kết quả lấy số liệu từ Sheet bên cạnh). Em muốn sử dụng cách trên vì nó rất hay là khi copy nó vẫn giữ được tham chiếu khi (thay đổi đầu vào thì đầu ra thay đổi) vì thực tế trước khi dự thầu bọn em phải thay đổi giá trị vật tư rất nhiều phương án. Xin cảm ơn anh đã quan tâm
 
Upvote 0
Xin anh chỉ bảo nếu phần dữ liệu xóa đi giả sử ở Sheet khác

PHP:
Sub Text()
R = 6
For Each Rng In Selection
    If Rng = "Cong" Then
        Cells(R, 10).Formula = "=" & Rng.Offset(, 1).Address
        R = R + 1
    End If
Next
End Sub
Anh ơi nếu vùng xóa đi của em mà nằm ở Sheet bên cạnh thì có làm được cách như vừa rồi không ạh (tức chuyển cột H đến cột J sang Sheet mới ý ạh). Chân thành cảm ơn 2 anh rất nhiều. Kiến thức vừa rồi chắc chắn sẽ giúp ích rất nhiều cho công việc của em.
 
Upvote 0
Anh ơi nếu vùng xóa đi của em mà nằm ở Sheet bên cạnh thì có làm được cách như vừa rồi không ạh (tức chuyển cột H đến cột J sang Sheet mới ý ạh). Chân thành cảm ơn 2 anh rất nhiều. Kiến thức vừa rồi chắc chắn sẽ giúp ích rất nhiều cho công việc của em.
Thì sửa lại một chút
PHP:
Sub Text()
R = 6
For Each Rng In Selection
    If Rng = "Cong" Then
        Sheets("TenSheetKQ").Cells(R, 10).Formula = "=" & Rng.Offset(, 1).Address
        R = R + 1
    End If
Next
End Sub
Sửa lại vị trí Cell kết quả cho chính xác.
 
Upvote 0
Chọn cột G và chạy Macro này
PHP:
Sub Text()
For Each Rng In Selection
    If Rng.Offset(, -1) <> "" Then
        Rng.Formula = "=" & Rng.Offset(, -1).Address & "*" & Rng.Offset(, -2).End(xlUp).Address
    End If
Next
End Sub
Sửa lại cho phù hợp với chương trình của bạn.
Các bác vui lòng cho em hỏi nếu em muốn thành phần Rng.Offset(, -2).End(xlUp).Address trong công thức trên chỉ lấy giá trị tuyệt đối theo hàng mà không theo cột hoặc là giá trị tương đối (Công thức anh hữu Thắng làm là tham chiếu sang tuyệt đối) thì làm như thế nào ah?
 
Upvote 0
Em mới chập chứng bước vào VBA, em đọc và cũng hiểu được phần nào nội dung anh viết. Nhưng có một số từ khóa em không hiểu là gì (chỉ đoàn mò thôi) Rất mong anh giải thích hộ em các từ khóa sau (Rng;Address;End(xlUp))ghĩa dịch ra tiếng Việt là gì ạh.
 
Upvote 0
Các bác vui lòng cho em hỏi nếu em muốn thành phần Rng.Offset(, -2).End(xlUp).Address trong công thức trên chỉ lấy giá trị tuyệt đối theo hàng mà không theo cột hoặc là giá trị tương đối (Công thức anh hữu Thắng làm là tham chiếu sang tuyệt đối) thì làm như thế nào ah?
Sửa lại thế này:
Địa chỉ tương đối:
PHP:
Sub Text()
For Each Rng In Selection
    If Rng.Offset(, -1) <> "" Then
        Rng.Formula = "=" & Rng.Offset(, -1).Address & "*" & Replace(Rng.Offset(, -2).End(xlUp).Address, "$", "")
    End If
Next
End Sub
Địa chỉ hỗn hợp:
PHP:
Sub Text()
For Each Rng In Selection
    If Rng.Offset(, -1) <> "" Then
        Rng.Formula = "=" & Rng.Offset(, -1).Address & "*" & Mid(Rng.Offset(, -2).End(xlUp).Address, 2, 20)
    End If
Next
End Sub
 
Upvote 0
Xin nhờ anh giải quyết một bài toán nữa

Em xin phiền anh giúp em bài toán nữa như các bài toán trên. Các ô màu đỏ em làm mẫu cho các công việc sau (làm sao khi xóa đi chạy VBA nó lại ra như cũ)
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom