Cách chèn công thức vào cell bằng VBA (1 người xem)

Liên hệ QC

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

bugatino

Thành viên chính thức
Tham gia
14/7/10
Bài viết
54
Được thích
3
Chào các bạn GPE,

Mình muốn viết macro replace dữ liệu của cell bằng dữ liệu mới dựa vào dữ liệu cũ của ô đó:

ví dụ:

Cell A1 có giá trị 22/10/2013
Cell B2 có giá trị "Công việc 1"

Mình muốn replace "Công việc 1" bằng "[KD-22/10/2013] Công việc 1"

Mình đã viết macro như sau:

PHP:
Sub Replace()Dim Rng As Range
 For Each Rng In Sheets("Sheet1").Range("B2:B41")
    Rng.Formula = "=""[KD-""&TEXT($A$1;""dd/mm/yyyy"")&"] """ & Rng.Value
Next
End Sub

Nhưng nó cứ bị lỗi ở đoạn Rng.Formula =. Các bạn giúp mình sửa lại đoạn macro bên trên với. Hoặc có cách nào thay thế mà không cần dùng macro cũng được.

Cám ơn các bạn nhiều.
 
Chào các bạn GPE,
Mình muốn viết macro replace dữ liệu của cell bằng dữ liệu mới dựa vào dữ liệu cũ của ô đó:
ví dụ:
Cell A1 có giá trị 22/10/2013
Cell B2 có giá trị "Công việc 1"
Mình muốn replace "Công việc 1" bằng "[KD-22/10/2013] Công việc 1"
Mình đã viết macro như sau:
PHP:
Sub Replace()Dim Rng As Range
 For Each Rng In Sheets("Sheet1").Range("B2:B41")
    Rng.Formula = "=""[KD-""&TEXT($A$1;""dd/mm/yyyy"")&"] """ & Rng.Value
Next
End Sub
Nhưng nó cứ bị lỗi ở đoạn Rng.Formula =. Các bạn giúp mình sửa lại đoạn macro bên trên với. Hoặc có cách nào thay thế mà không cần dùng macro cũng được.
Cám ơn các bạn nhiều.
Không biết mục đích của bạn để làm gì, nhưng không được đặt công thức trong cell mình cần tính toán.
Bạn tham khảo code này xem, đặt công thức ở cột C:
[gpecode=vb]
Dim Rng As Range
For Each Rng In Range("B2:B41")
Rng.Offset(, 1).FormulaR1C1 = "=""[KD-""&TEXT(R1C1,""dd/mm/yyyy"")&""] ""&RC[-1]"
Next

[/gpecode]
 
Upvote 0
Mục đích của mình là biến ô B2:B41 từ chỉ chứa dữ liệu bình thường thành ô có chứa công thức nối với ngày ở ô A1 (để khi dữ liệu ngày tháng ở ô A1 thay đổi thì B2:B41 cũng thay đổi) nhưng không muốn dùng thêm 1 cột khác. Nếu sử dụng cột C thì không cần dùng tới macro, chỉ cần sử dụng công thức: ="[KD-"&$A$1&"] "&B2 tại ô C2 và fill xuống dưới là được rồi. Mong nhận được trợ giúp từ các bạn vì mình không chỉ có 1 Sheets như vậy. Nếu chỉ có 1 sheets mình đã làm tay luôn cho tiện rồi.
 
Upvote 0
Nếu bạn đặt công thức tại ô bạn thay thế dữ liệu thì dùng thêm 1 cột phụ như anh Leo, sau đó bạn dùng macro copy sang là được mà.
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Sub Replace()
Dim Rng As Range
    For Each Rng In Range("B2:B41")
        Rng.FormulaR1C1 = "=""[KD-""&TEXT(R1C1,""dd/mm/yyyy"")&""] ""&R1C2"
    Next
End Sub
Cái ô "Công việc 1" nằm ở B2 em ạ, mà người ta lại muốn đặt công thức ngay tại ô cần tính (tham chiếu vòng).
 
Upvote 0
Cái ô "Công việc 1" nằm ở B2 em ạ, mà người ta lại muốn đặt công thức ngay tại ô cần tính (tham chiếu vòng).
Đừng vội, cứ chờ chủ thớt ném cái file lên thì biết liền mà. Đọc mô tả là biết có viết 3 lần cũng hỏng trúng ý đâu.
 
Upvote 0
Cái ô "Công việc 1" nằm ở B2 em ạ, mà người ta lại muốn đặt công thức ngay tại ô cần tính (tham chiếu vòng).
Không phải tham chiếu vòng đâu anh, họ muốn lấy giá trị ở cột B (Rng.value) đó và nối với cái chuỗi ngày tháng ở A1 và a lô xô 1 vài thứ khác mà.
Nói chung đọc đi đọc lại em vẫn thấy cái yêu cầu nó sao sao ý anh ạ, nếu thế thì gán luôn giá trị cho vùng B:B đó đi, có lắp code gán công thức vô đó thì cũng chỉ chạy được có 1 lần, khi tác động vào A1 thì chạy code cho nó thay đổi, thế là xong. Tự nhiên làm mình rối lên,hehehe
 
Lần chỉnh sửa cuối:
Upvote 0
Nói chung bài này chẳng cần phải gán công thức gì cả (mà thực chất cũng không thể gán được).
Cứ nối chuổi bình thường trong VBA là được rồi (trong VBA ta dùng hàm Format hay cho hàm Text ngoài bảng tính)
Có điều đang suy nghĩ: Nếu chạy code từ 2 lần trở lên thì sao?
 
Lần chỉnh sửa cuối:
Upvote 0
Em đã thử viết để macro để nối chuỗi như thầy ndu96081631 nói. nhưng vấn đề là nếu thay đổi giá trị A1 thì giá trị B2:B41 không thay đổi. Em muốn sao cho A1 thay đổi thì B2:B41 cũng thay đổi luôn ah!

Em gửi 1 phần file của em lên cho các bác dễ hình dung ah!
 

File đính kèm

Upvote 0
Em đã thử viết để macro để nối chuỗi như thầy ndu96081631 nói. nhưng vấn đề là nếu thay đổi giá trị A1 thì giá trị B2:B41 không thay đổi. Em muốn sao cho A1 thay đổi thì B2:B41 cũng thay đổi luôn ah!

Em gửi 1 phần file của em lên cho các bác dễ hình dung ah!

Copy code này cho vào sheet để tạo sự kiện change ở ô A1. Hên xui nha vì không chắc lắm

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
   Dim kq(), i As Long
   Range([B2], [B65536].End(3)).Replace "*] ", "", 2
   kq = Range([B2], [B65536].End(3)).Value
   For i = 1 To UBound(kq)
      kq(i, 1) = "[KD-" & Target.Value & "] " & kq(i, 1)
   Next
   [B2].Resize(i - 1) = kq
End If
End Sub
 
Upvote 0
Cám ơn bạn quanghai1969, code chạy rất chuẩn và đúng như mong muốn của mình.
 
Upvote 0
Cho m hoi cop ma cop nay vo o a1 hay sao ak chi m voi m bi mu excel
 
Upvote 0
Web KT

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

Back
Top Bottom