Link dữ liệu các sheet

  • Thread starter Camry
  • Ngày gửi
C

Camry

Guest
25/4/06
50
0
6
Danang
Các bạn chỉ giúp cho mình việc này với.
Mình có 2 sheet1 và 2
Lần 1
Tại sheet1 A1 nhập giá trị "An"
Tại sheet2 B1 = "An"
lần thứ 2
Tại sheet1 A1 nhập giá trị "Bình"
Tại sheet2 B2 = "Bình"
và tại B1 vẫn còn "An"
 
Khóa học Quản trị dòng tiền
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơ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)
Ở đây ô nhập liệu là 'A15' bạn sửa lại thành ô 'A2'. Nơi mà bạn muốn nhập dữ liệu để nó chuyển sang Sheet2 cho bạn í mà!
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ó gì thắc mắc thì hỏi tiếp, nha!
 
Sửa lần cuối:
C

Camry

Guest
25/4/06
50
0
6
Danang
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)
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?
Và sau khi nhập lệnh như sau thì phải làm gì nữa?
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
Giúp mình với nhé.
Thanks.
 
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,374
36
48
46
Goooogle
Ý Camry muốn là tách riêng 1 sheet nhập liệu (form nhập liệu) và Sheet dử liệu (CSDL) riêng ra. Điều này không sử dụng VBA không làm được. Nhưng để tạo mối liên kết chặt chẽ và đảm bảo không gây ra những lỗi nghiêm trọng làm sai lệch dữ liệu của bạn, bạn phải master về VBA.

Excel cũng có công cụ hỗ trợ nhập liệu. Trong thư viện cũng có 1 Add-In hỗ trợ nhập liệu, nó tạo ra 1 Auto Form. Nhưng tất thảy đều không hoàn hảo bởi 1 trong những điểm mạnh nhất, được yêu thích nhất của Excel là cả 3 "thành phần" form nhập liệu - CSDL - công cụ dàn trang (Form, Database, Report) chỉ là 1, đó là worksheet lại bị bỏ qua.
Theo tôi với trình độ Excel vừa vừa và quy mô dữ liệu nhỏ (1 người dùng), bạn nên nhập liệu ngay trên CSDL và dùng 1 số công cụ như Protect Sheet ... để hạn chế lỗi và bảo vệ dữ liệu. Tôi cũng mất không ít thời gian để thiết kế form nhập liệu, nhưng rút cục thấy nhập thẳng trên database là tốt nhất.
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
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?.
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:
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)
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?)
 
Sửa lần cuối:
C

Camry

Guest
25/4/06
50
0
6
Danang
Mình đã làm được rồi. Cảm ơn các bạn nhiều lắm, đặc biệt là bác QDuc.
Thanks nhiều nhiều.
 
C

Camry

Guest
25/4/06
50
0
6
Danang
À quyên, mình nhậu bia với đậu phụng hehehe...
 
L

lexthien

Trung cấp
14/10/05
77
1
8
TPHCM
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?)

Mình có bài toán này nhờ bạn giải giúp
- 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.

Hy vọng bạn giành ít thời gian giải bài toán này giúp mình, nó sẽ giúp mình cải thiện công việc thủ công cuả mình rất nhiều & giảm nhẹ dung lượng file kế toán của mình.

Xin cảm ơn bạn nhiều

Thân chào bạn
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
- 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.
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!
 
Sửa lần cuối:
L

lexthien

Trung cấp
14/10/05
77
1
8
TPHCM
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!

Hi ! bạn

1/ Chép cả cột luôn (chép cột từ S1 sang cột chỉ định ở S2).
2/ Các cột khác nhau vì dữ liệu S1 sẽ làm báo cáo ở S2, nhưng do có quá nhiều dữ liệu ở S1 phải mang sang S2 nên nhờ bạn giúp mình link dữ liệu sang bằng VBA để cho nhẹ file, hiện tại mình đang áp dụng công thức nên file khá nặng.

Rất mong bạn giúp mình.
Chờ tin bạn.

Thân chào bạn
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơ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!)
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
(húc &ui &ẽ!
 
Sửa lần cuối:
L

lexthien

Trung cấp
14/10/05
77
1
8
TPHCM
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 &ẽ!

Hi! bạn
Có 2 vấn đề như sau:
1/ báo lỗi ngay dòng này.
If Not Intersect(Range("J100"), Target) Is Nothing And Not IsNull(Target.Offset(0, -1).Value) And Not IsNull(Target.Offset(0, -2).Value) Then.

2/ Bạn cải tiến code cho phép khi có số liệu tại S1 là tự động chép sang S2, ở đây đang bị ràng buộc phải nhập đến dòng cuối ở S1 (dòng thứ 98) thì dữ liệu mới được mang sang.

Hy vọng bạn cải tiến giúp mình

Thân chào
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Xem lai về ngắt dòng lệnh

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:
If Not Intersect(Range("B100"). . . .
thành câu:
If Not Intersect(Range("A6:B100"), Target) Is Nothing then
(/à bạn nhớ thêm vô dòng lệnh đầu tiên như sau
Application.ScreenUpdating = False
?Bạn uống bia hơi với zì?
 
Sửa lần cuối:
L

lexthien

Trung cấp
14/10/05
77
1
8
TPHCM
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ì?

Cảm ơn bạn đã nhiệt tình giúp đỡ. Mình làm được rồi.

Mình uống bia với tàu hủ chiên mắm tôm.
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Post bài dùm bạn

Vừa qua mình nhận được thư của AiCungLaThay, như sau
Bà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 xem trong file đính kèm
Hể bạn nhập đến ô A22 thì macro tự động đem dữ liệu từ A2:A22 sang nối tiếp vô ô đầu của cột 'B' chưa dữ liệu

Chúc vui!

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A22")) Is Nothing Then
Dim lRow As Long
lRow = Sheets("S2").[b65432].End(xlUp).Row + 1
Range("A2:A22").Copy Destination:=Sheets("S2").Range("B" & lRow)
End If

End Sub
 

Đính kèm

  • WEBKT.rar
    7.3 KB · Lượt xem: 500
Sửa lần cuối:
A

aicunglathay

Guest
4/5/08
16
0
0
Vũng Tàu
Cám ơn QDuc nhiều nhiều....đúng ý mình rồi...mừng wa...
 
D

diepmi90

Guest
21/12/11
1
0
0
hà nội
Ðề: Link dữ liệu các sheet

bác QDuc cho chúng em sdt để chúng em hỏi được ko? miêu tả khó quá hĩ hĩ em xin hứa chỉ gọi giờ hành chính, ko nháy máy về đêm :">
 
N

nhat24-7

Guest
2/4/06
2
0
0
41
HCM
Ðề: Post bài dùm bạn

Dear QDuc,

Mình cũng có yêu cầu sốtuwowng tự như trên, nhưng hơi khác tí là:
+ Lấy dữ liệu từ sheet nhập liệu copy sang sheet lưu dữ liệu:A1 --> B1, A2-->C1, A3-->D1 (đổi cột thành hàng)
+ Sau khi nhập 1 loại từ A1--> A10 chẳng hạn, việc nhập liệu chỉ thực hiện khi bấm vào command button OK
+ Và nếu một trong các ô A1-->A10 trống thì khi nhập liệu lần 2, sheet lưu dữ liệu cũng phải tự xuống hàng

Vậy kết hợp lại phải viết như thế nào hen?
Mình mới tập tành nên hơi gà mờ.
Thanks
 
M

mrthanh001

Guest
3/8/11
3
0
1
khanh hoa
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
 

Đính kèm

  • vidu.xlsx
    8.5 KB · Lượt xem: 36
thinhvd

thinhvd

Cao cấp
25/11/09
1,336
234
63
Hà Nội
bluesofts.net
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
Bạn tham khảo đoạn code sau đây nhé:
Option Explicit
Sub ghidulieu()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim i&, d&
Set sh1 = ThisWorkbook.Sheets("Sheet1")
Set sh2 = ThisWorkbook.Sheets("Sheet2")
d = sh2.Range("A" & sh2.Rows.Count).End(xlUp).Row + 1
If sh1.Cells(2, 1).Value <> "" And sh1.Cells(2, 2).Value <> "" Then
sh2.Cells(d, 1).Value = sh1.Cells(2, 1).Value
sh2.Cells(d, 2).Value = sh1.Cells(2, 2).Value
End If
End Sub
 

Xem nhiều

Webketoan Zalo OA