VBA nhập dữ liệu tự động tạo công thức và paste giá trị

Liên hệ QC

Srosro

Thành viên mới
Tham gia
10/7/18
Bài viết
15
Được thích
9
Trong lúc làm việc về nhập liệu.
Em coa chút mong muốn như sau:

VD em nhập liệu ở cột A.
Nhập từ A1 đến A100. Sau đó em làm hàm ở B1 đến B100. Sau đó copy paste giá trị.
Thì cách nhanh nhất mà em biết hiện tại là nhập liệu ở cột A như bình thường. xong tạo 1 modul trong VBA. và chạy để nó làm thao tác còn lị trong cột B.

Tuy nhiên em vẫn thấy nó chậm.
Các anh có thể giúp em.

Khi em nhập liệu ở ô A1. và không phải làm gì cả. thì ô B1 sẽ tự điền công thức và tự copy paste giá trị tại ô B1 luôn.
Sau đó em nhập liệu vào ô A2. thì ô B2 tự động điền công thức và paste giá trị trong ô B2 luôn.


Giống như cái kiểu tạo sự kiện trong Useform đấy ạ.

Bởi em nghĩ khi có kiểu như vậy. bọn em nhập liệu đối với những file nặng ý. nó sẽ rất là nhẹ. và nhanh.

Em cảm ơn
 
Chắc bạn cũng biết là cái gì tự động hóa thì đều được lập trình trước,và nếu muốn nó chạy thì cần có điều kiện để giải định hết tất cả các trước hợp? Bạn nếu ra cái ý tương rồi đó còn thiếu đôi ba phần về điều kiện và dữ liệu để test .tới đây chắc bạn hiểu vì sao hai bác trên bảo không cần làm gì rồi đúng không?
 
Trong lúc làm việc về nhập liệu.
Em coa chút mong muốn như sau:

VD em nhập liệu ở cột A.
Nhập từ A1 đến A100. Sau đó em làm hàm ở B1 đến B100. Sau đó copy paste giá trị.
Thì cách nhanh nhất mà em biết hiện tại là nhập liệu ở cột A như bình thường. xong tạo 1 modul trong VBA. và chạy để nó làm thao tác còn lị trong cột B.

Tuy nhiên em vẫn thấy nó chậm.
Các anh có thể giúp em.

Khi em nhập liệu ở ô A1. và không phải làm gì cả. thì ô B1 sẽ tự điền công thức và tự copy paste giá trị tại ô B1 luôn.
Sau đó em nhập liệu vào ô A2. thì ô B2 tự động điền công thức và paste giá trị trong ô B2 luôn.


Giống như cái kiểu tạo sự kiện trong Useform đấy ạ.

Bởi em nghĩ khi có kiểu như vậy. bọn em nhập liệu đối với những file nặng ý. nó sẽ rất là nhẹ. và nhanh.

Em cảm ơn
Cái này thì các tiền bối thừa sức làm trong 1 nốt nhạc. Hay đưa File lên để mọi người biết đúng ý bạn muốn không nhé
 
ây gu..... ý em là em muốn học ý.
ko ngồi máy thế là bị troll đây.
hì.
Công thức thì là công thức j cũng được ạ.
Còn em muốn hỏi tính ứng dụng cơ.
Vì bên em các bạn nhập dữ liệu thì vô vàn kiểu
Công thức cũng biến đổi theo mà. huhu.
Các bác lại lỡ troll em.

Cái em muốn là có cái kiểu như em nêu ý tưởng liệu có làm được ko ấy ạ.
Còn phải có file cụ thể thì khi em ngồi máy tính em sẽ bổ sung ạ.
Các bác troll em. hx. Cảm ơn các bác đã đóng góp ạ
 
Cái em muốn là có cái kiểu như em nêu ý tưởng liệu có làm được ko ấy
Câu trả lời là có
Bạn nêu ý tưởng cho mọi người Mình cũng nêu ý tưởng cho bạn.
1.dùng sự kiện trong sheet
2.cho công thức muốn tính + địa chỉ cột vào ô nào đó trong sheets .rồi dùng sự kiện thay đổi chạy vòng lặp gán đến dòng cuối
* chú : nó còn rườm ra hơn bạn dùng công thức vào một ô rồi kéo cho cả cột
 
Câu trả lời là có
Bạn nêu ý tưởng cho mọi người Mình cũng nêu ý tưởng cho bạn.
1.dùng sự kiện trong sheet
2.cho công thức muốn tính + địa chỉ cột vào ô nào đó trong sheets .rồi dùng sự kiện thay đổi chạy vòng lặp gán đến dòng cuối
* chú : nó còn rườm ra hơn bạn dùng công thức vào một ô rồi kéo cho cả cột
Đây ạ. Thế bác làm mẫu giúp em. Em dốt cái này thật.
phạm vi khoảng A1 ĐẾN a200 ạ
Bài đã được tự động gộp:

chú : nó còn rườm ra hơn bạn dùng công thức vào một ô rồi kéo cho cả
Em nghĩ nó cũng rườm rà. nhưng mà để làm 1 ô rồi kéo cho cả. file nó rất là nặng. Nhiều khi bên em các bạn ý đang làm thì đơ máy. chán lắm. mất time và mất dữ liệu. ảnh hưởng text time. hx.
 

File đính kèm

  • Không phải làm gì cả.xlsm
    9.6 KB · Đọc: 17
Đây ạ. Thế bác làm mẫu giúp em. Em dốt cái này thật.
phạm vi khoảng A1 ĐẾN a200 ạ
Bài đã được tự động gộp:


Em nghĩ nó cũng rườm rà. nhưng mà để làm 1 ô rồi kéo cho cả. file nó rất là nặng. Nhiều khi bên em các bạn ý đang làm thì đơ máy. chán lắm. mất time và mất dữ liệu. ảnh hưởng text time. hx.
Chỉ từ A1 đến A200 thì chưa cần tới VBA đâu - Nhận lại File làm theo hướng dẫn trong File xem đúng ý chưa nhé
 

File đính kèm

  • Không phải làm gì cả.xlsm
    19.9 KB · Đọc: 21
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As String, Rng As Range, Lr As Long
Set Rng = Sheet1.Range("A1:A200")
If Not Intersect(Target, Rng) Is Nothing Then
        Lr = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
        Sheet1.Range("B" & Lr).Formula = "=VLOOKUP(" & "A" & Lr & ",Trang_tính1!A:B" & ",2,0)"
        Sheet1.Range("B" & Lr).Value = Sheet1.Range("B" & Lr).Value
End If
End Sub
Chủ thớt thích VBA mà,nhưng như tôi nói là nó sẽ rườm ra khi gán công thức,Bạn cũng có thể dùng vba gán công thức bằng Application.WorksheetFunction nhưng như tôi đã nói đã dùng vba thì dùng vba chứ cần gì công thức nữa .khi bạn bắn xong mã QR cứ cho là 10000 dòng đi nữa,dùng mảng duyệt để lấy kết quả tương ứng còn nhanh gấp mấy lần gán công thức vào cells như thế này
 
Lần chỉnh sửa cuối:
Chỉ từ A1 đến A200 thì chưa cần tới VBA đâu - Nhận lại File làm theo hướng dẫn trong File xem đúng ý chưa nhé
Bác ơi. em vd thui. chứ file trong công ty em nó ko đc mang ra ngoài. nó dùng mạng nội bộ mà. em muốn xem qua công thức rồi tự ứng dụng ạ. chứ 20.000 dòng còn chưa thành vấn đề huống chi là 200 bác ạ. hx.
Bác ứ hiểu ý em. huhu
Bài đã được tự động gộp:

Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As String, Rng As Range, Lr As Long
Set Rng = Sheet1.Range("A1:A200")
If Not Intersect(Target, Rng) Is Nothing Then
        Lr = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
        Sheet1.Range("B" & Lr).Formula = "=VLOOKUP(" & "A" & Lr & ",Trang_tính1!A: B" & ",2,0)"
        Sheet1.Range("B" & Lr).Value = Sheet1.Range("B" & Lr).Value
End If
End Sub
Chủ thớt thích VBA mà,nhưng như tôi nói là nó sẽ rườm ra khi gán công thức,Bạn cũng có thể dùng vba gán công thức bằng Application.WorksheetFunction nhưng như tôi đã nói đã dùng vba thì dùng vba chứ cần gì công thức nữa .khi bạn bắn xong mã QR cứ cho là 10000 dòng đi nữa,dùng mảng duyệt để lấy kết quả tương ứng còn nhanh gấp mấy lần gán công thức vào cells như thế này
À. Em bắt đầu hiểu ý bác rồi. Cũng rườm rà thật
Bài đã được tự động gộp:

Chỉ từ A1 đến A200 thì chưa cần tới VBA đâu - Nhận lại File làm theo hướng dẫn trong File xem đúng ý chưa nhé
File của bác trước em từng làm rồi ạ. gán cho nó Table. Sợ nặng nên cũng đã tắt tự động tính toán. xong báo các bác ý nhấn F9 để lấy kết quả. tuy nhiên. như thế file vẫn chứa công thức. tức là nó vẫn phải làm việc nhiều. suy ra trễ và làm lâu.
Nhiều bác bên em các bác ý còn bấm nhầm làm hỏng file. xong loạn hết file lên. công thức cũng bị sai theo ạ.
Nên em cũng muốn làm VBA. các bác ấy sẽ ko động đến công thức nữa. giảm việc làm sai xuống
 
Lần chỉnh sửa cuối:
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As String, Rng As Range, Lr As Long
Set Rng = Sheet1.Range("A1:A200")
If Intersect(Target, Rng) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        R = Mid(Replace(Target.Address, "$", ""), 2, Len(Target.Address) - 1)
        Sheet1.Range("B" & R).Formula = "=IFERROR(VLOOKUP(A" & R & ",Trang_tính1!A:B,2,0)" & "," & """"")"
        Sheet1.Range("B" & R).Value = Sheet1.Range("B" & R).Value
        Application.EnableEvents = True
End Sub
cod bài #11 như bạn mô tả là cứ bắn lần lượt nên nó cứ phang dòng cuối.còn code này thì ô nào cũng được miễn là trong cột A thay đổi.Làm cho bạn biết nó khá phiền thôi.còn nếu mà muốn nhanh thì tốt hơn hết bạn giả lập một file rồi đưa lên mọi người xem thôi.nếu chỉ là dựa vào ID lấy tên thì bắn hết 1 lượt lấy ID sau đó là chạy vòng lặp lấy dữ liệu từ sheets 2 qua.nhanh hơn nhiều so với bạn gán công thức
 

File đính kèm

  • Không phải làm gì cả.xlsm
    17.1 KB · Đọc: 24
Lần chỉnh sửa cuối:

Góp ý cho bạn:
1/ Nội quy có quy định "Tất cả các bài viết bằng tiếng Việt cần viết có dấu đầy đủ, tránh phạm lỗi chính tả và làm mất đi sự trong sáng của tiếng Việt"
2/ Bạn nên tiếng Việt cần viết có dấu đầy đủ, có nghĩa là trong bài viết nên viết chữ cho đầy đủ, rỏ nghĩa và không sử dụng tiếng Tây, tiếng u, chứ nên lười biếng viết tắc thế này: vd, ko đc, hx, text time, hx , troll, gu..v..v.......Nếu ai cũng làm biếng thì chắc không ai rảnh để viết mốt mớ code cho bạn.
3/ Đọc lại nội quy để hiểu:

View attachment 250235
Dạ. Vâng ạ. em biết rồi ạ
 
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As String, Rng As Range, Lr As Long
Set Rng = Sheet1.Range("A1:A200")
If Intersect(Target, Rng) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        R = Mid(Replace(Target.Address, "$", ""), 2, Len(Target.Address) - 1)
        Sheet1.Range("B" & R).Formula = "=IFERROR(VLOOKUP(A" & R & ",Trang_tính1!A: B,2,0)" & "," & """"")"
        Sheet1.Range("B" & R).Value = Sheet1.Range("B" & R).Value
        Application.EnableEvents = True
End Sub
cod bài #11 như bạn mô tả là cứ bắn lần lượt nên nó cứ phang dòng cuối.còn code này thì ô nào cũng được miễn là trong cột A thay đổi.Làm cho bạn biết nó khá phiền thôi.còn nếu mà muốn nhanh thì tốt hơn hết bạn giả lập một file rồi đưa lên mọi người xem thôi.nếu chỉ là dựa vào ID lấy tên thì bắn hết 1 lượt lấy ID sau đó là chạy vòng lặp lấy dữ liệu từ sheets 2 qua.nhanh hơn nhiều so với bạn gán công thức
Kết quả đã như mong muốn khi gõ vào 1 dòng ở cột A và chỉ dòng đó thay đổi ở cột B. Rất tuyệt rồi ạ.
Nhưng Em muốn code khắc phục thêm 1 điều kiện nữa. Nếu em copy 1 vùng mã như hình ở dưới và dán vào ô A3 với 3 dòng chẳng hạn. Thì tương ứng với 3 dòng đó ở cột A thì 3 dòng đó ở cột B cũng được cập nhật lại công thức. Hiện tại khi dán 1 vùng ở cột A thì nó ko hiện giá trị ở cột B mà bị lỗi chuyển thành 0 hết ạ. Mong Anh xem giúp Em. Cảm ơn Anh nhiều!
1606630455597.png
 

File đính kèm

  • Không phải làm gì cả (2).xlsm
    22.4 KB · Đọc: 10
Công thức cùng 1 cột là giống nhau hay khác nhau. Nếu giống nhau thì đưa về bài toán nhập công thức tại dòng 1, các dòng tiếp theo sẽ tự động điền công thức và paste value theo công thức tại dòng 1
 
Công thức cùng 1 cột là giống nhau hay khác nhau. Nếu giống nhau thì đưa về bài toán nhập công thức tại dòng 1, các dòng tiếp theo sẽ tự động điền công thức và paste value theo công thức tại dòng 1
Công thức giống nhau bác ah. Để tránh việc tính toán quá nhiều dòng dẫn đến file bị chậm. Nên Em muốn chỉ dòng nào có tác động ở cột A như bác chủ thớt đã nêu thì dòng đó ở cột B mới tính. Hiện tại theo code của bác Cu Tồ thì đã như mong muốn rồi ạ. Chỉ mỗi một chỗ là nếu em copy 1 vùng gồm 3 dòng mã ID rồi dán vào ô A3 thì A3:A5 có sự tác động vào ô. Thì công thức ở B3:B5 sẽ được thực thi. Nhưng hiện tại nó lại trả về 0 cho các ô từ B3:B5 Bác ạ.
 
Web KT
Back
Top Bottom