Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' Dim iHang As Long
If Not Intersect(Target, Range("A15")) Is Nothing Then
Sheets("C1").Range("B" & 1 + Sheets("C1").Range("B65535").End(xlUp).Row).Value = Target.Value
End If
End Sub
Mình kém về VBA lắm, bạn có thể nói cụ thể các bước để thực hiện công việc như ở trên này được không?QDuc nói:Bạn phải chuột vô tên Sheet1 trên thanh liệt kê tên các sheet, chọn hàng view code (dòng cuối) & nhập đoạn code dưới này vô; (tất nhiên bạn phải sửa lại tên Sheets (ở đây là 'C1' -> 'Sheet2' của bạn)
Giúp mình với nhé.QDuc nói:Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' Dim iHang As Long
If Not Intersect(Target, Range("A15")) Is Nothing Then
Sheets("C1").Range("B" & 1 + Sheets("C1").Range("B65535").End(xlUp).Row).Value = Target.Value
End If
End Sub
Cụ thể thế này nha:Bạn có thể nói cụ thể các bước để thực hiện công việc như ở trên này được không?.
Tất nhiên ở đây không có tạo mối liên kết nào hết giữa 2 sheets, mà chỉ đơn giản là bạn nhập vô A2 ~ gì, thì macro này tự động đem đến ô trống đầu tiên của cột B thuộc sheet2 & gán vô giúp bạn; thế thôi!Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
Bạn nhập vô giữa 2 dòng này các câu lệnh như sau:
If Not Intersect(Target, Range("A2")) Is Nothing Then
Sheets("Sheet2").Range("B" & 1 + Sheets("Sheet2").Range("B65535").End(xlUp).Row).Value = Target.Value
End If
Giải thích luôn bạn các câu lệnh như sau:
C1: Nếu ô đang được thay đổi không khác ô A2 thì
C2: Ô trống đầu tiên của cột B tại Sheet2 được gán gía trị đang nhập tại A2 của Sheet1 (là Sheet hiện hành, có người gọi là đang được kích hoạt)
QDuc nói:Cụ thể thế này nha:
1./ Bạn có thấy thanh liệt kê các tên Sheets ở dưới cùng & bên trái màn hình không? (Người ta hay gọi nó là SheetName gì đó) Bạn phải chuột vô Sheet1 (như bạn ghi ở bài đầu & sẽ trở thành nơi nhập dữ liệu để chuyển tiếp sang Sheet2 nhờ macro) như đã nêu ở bài trên & chọn View Code. . .
2./ Trong cửa sổ (mà người ta hay gọi là CS VBE) của sheet1. Nếu bên phải chưa có gì (nghĩa là 1 CS màu xám) thì bạn vô menu Insert -> Module; Lúc này CS VBE sẵn sàng cho bạn chép đoạn mã mình ghi cho bạn. (Hay làm vầy cũng được: Phần trên của CS VBE có 2 CS nhỏ; bên trái có thể là (General); Cái bên phải tương ứng là (Declaration) Cái quan trong là bạn nhấp vô mũi tên của CS bên trái & chọn dòng thứ 2 ghi là Worksheet; Bạn sang CS nhỏ bên phải & chọn dòng Change ; Nếu mọi việc trôi chảy bạn sẽ được VBE dọn sẵn 2 hàng của một macro; như sau:
Tất nhiên ở đây không có tạo mối liên kết nào hết giữa 2 sheets, mà chỉ đơn giản là bạn nhập vô A2 ~ gì, thì macro này tự động đem đến ô trống đầu tiên của cột B thuộc sheet2 & gán vô giúp bạn; thế thôi!
(chú í C2 có dài; nhưng với bạn lúc này, theo mình, chưa đủ trình độ để ngắt ra đâu nha)
2 câu lệnh ngắn vậy nhưng muốn với tới nó mình phải mất 1 vài tháng!
Chúc vui nha! (Thắc mắc gì nữa không?, chẵng hạn: bạn hay uống bia với đậu phọng hay lạc rang?)
Bạn nó rõ một tẹo dùm nha:- Mình có 2 sheet.
- Muốn cột A6:B100 ở Sheet 1 khi có dữ liệu nhập vào thì từ động sẽ được trích sang cột B5:C100 ở sheet2.
- Muốn cột J6:L100 ở sheet 1 khi có dữ liệu nhập vào thì từ động sẽ được trích sang cột D5:F100 ở sheet2.
- Muốn cột N6:N100 ở sheet 1 khi có dữ liệu nhập vào thì từ động sẽ được trích sang cột G5:G100 ở sheet2.
- Muốn cột M6:M100 ở sheet 1 khi có dữ liệu nhập vào thì từ động sẽ được trích sang cột H5:H100 ở sheet2.
QDuc nói:Bạn nó rõ một tẹo dùm nha:
1./Chép cả cột hay chỉ chép các ô mới nhập vô phần cuối của cột tương ứng S2 vậy?
2./Tại sao số ô trong các vùng tương ứng lại # nhau vậy?. như:
A6:C100 -> B5:C100 là sao? (ó nghĩa gì ở đây không?
Chờ hồi âm của bạn & mình rất sẵn lòng trong khả năng mà!
Chú ý: Bạn có thể nói rõ trong bài trên (Edit lại đi) & báo cho mình biết qua tin nhắn!
(húc &ui &ẽ!Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'Chép hai cot dau
If Not Intersect(Range("B100"), Target) Is Nothing And Not IsNull(Target.Offset(0, -1).Value) Then
Sheets("S2").Range("B5:C99").Value = Range("A6:B100").Value
End If
'Chep ba cot tiep
If Not Intersect(Range("L100"), Target) Is Nothing And Not IsNull(Target.Offset(0, -1).Value) _
And Not IsNull(Target.Offset(0, -2).Value) Then
Sheets("S2").Range("D5:F99").Value = Range("J6:L100").Value
End If
'Chep cot N
If Not Intersect(Range("N100"), Target) Is Nothing Then Sheets("S2").Range("G5:G99").Value = Range("N6:N100").Value
If Not Intersect(Range("M100"), Target) Is Nothing Then Sheets("S2").Range("H5:H99").Value = Range("M6:M100").Value
End Sub
QDuc nói:1./ Bạn chép đoạn mã sau vô nơi nhập liệu
2./ Cách làm việc: Khi bạn nhập vô ô cuối của vùng ( ô phải dưới nhất) & các ô kề trái của vùng đã được nhập thì số liệu sẽ được tự động chuyễn sang "S2"
(chú ý đổi tên 'S2' trong đoạn mã lệnh đúng tên bạn đã gán trong sheet báo cáo nha!)
(húc &ui &ẽ!
thành câu:If Not Intersect(Range("B100"). . . .
(/à bạn nhớ thêm vô dòng lệnh đầu tiên như sauIf Not Intersect(Range("A6:B100"), Target) Is Nothing then
?Bạn uống bia hơi với zì?Application.ScreenUpdating = False
QDuc nói:Dòng lệnh đầu không lỗi mà chúng tương tư nhau, chỉ # là D2 quá dài (chú í cách ngắt dòng lệnh thành 2 - Dấu gạch nối dòng lệnh đứng riêng nha!)
Còn bạn muốn nhật bất kỳ ô nào trong cột (vùng) thì đều Copy chứ zì? Zễ mà:
Đổi các câu lệnh có 2 chữ đầu dòng là If Not thành như sau:
thành câu:
(/à bạn nhớ thêm vô dòng lệnh đầu tiên như sau
?Bạn uống bia hơi với zì?
Bạn xem trong file đính kèmBài toán cụ thể nhé :
s1 là form nhập liệu
s2 là data
-Tại A1/s1 nhập liệu thì tự động trích sang B1/s2
A2/s1 -> B2/s2, cứ thế đến An/s1 -> Bn/s2
-Quay lại nhập tiếp vào A1/s1 -> vẫn tiếp tục trích sang Bn+1/s2
(dạng đơn đặt hàng:1 KH đặt nhiều loại hàng, nhập từng đơn vào 1 data tổng hợp để thống kê nhu cầu)
Nếu không phiền, Bạn vui lòng giúp mình vì thật sự mình rất dốt về MS Office ...TKS!!! Còn chủ đề mà mình nói đến thì ở đường link này...
Bạn tham khảo đoạn code sau đây nhé:bạn Qduc ơi bạn giúp mình code này được ko. cũng bài cũng bài toán như bạn như bạn Camry .
"Mình có 2 sheet1 và 2
Lần 1 Sheet 1 ô A2 B2 là ô nhập dữ liệu, sheet 2 cột A và B là lưu dữ liệu
tại sheet A2 mình nhập mã số 1, B2 mình nhập dữ liệu " An" thì tại sheet 2 ô A2 hiện mã số 1 và ô B2 hiện dữ liệu là "an"
tại sheet A2 mình nhập mã số 2, B2 mình nhập dữ liệu " Bình" thì tại sheet 2 ô A3 hiện mã số 2 và ô B3 hiện dữ liệu là "Bình"
tại sheet A2 mình nhập mã số 3, B2 mình nhập dữ liệu " Thiên" thì tại sheet 2 ô A4 hiện mã số 3 và ô B4 hiện dữ liệu là "Thiên"
.............
nếu tại sheet A2 mình nhập mã số 1 thì tại ô B2 sheet 1 sẽ lấy giá trị của B2 sheet 2 để mình chỉnh sửa dữ liệu, sau khi chỉnh sửa xong thì lưu vào ô B2 của sheet2.
ví dụ file đính kèm