Cập nhật dữ liệu

Liên hệ QC

trantuonganh2008

Thành viên thường trực
Tham gia
8/11/08
Bài viết
305
Được thích
53
Mình có sheet 1 và sheet 2. Mình muốn lấy dữ liệu từ sheet 2 rồi cập nhật vào sheet 1. VD: Tại A1 ở sheet2 có dữ liệu là "35" chẳng hạn. Thì ở sheet1 tại A1 mình sẽ có công thức là =sheet2!A1. Vì dữ liệu tại A1 ở sheet2 thay đổi từng ngày nên buộc phải copy rồi paste value tại A1 của sheet1 để khi dữ liệu thay đổi ở sheet2 thì tại A1 ở sheet1 sẽ không bị mất dữ liệu. Bây giờ mình muốn khi A1 tại sheet2 thay đổi thì ô A2 tại sheet1 sẽ bằng giá trị mới tại A1 của sheet2. có cách nào khác ngoài việc dùng công thức IF không, vì đây là bảng ghi số liệu hằng ngày nên việc cài công thức vào sẽ bị rối. Mong các bạn chỉ giáo!
 
Lần chỉnh sửa cuối:
Mình có sheet 1 và sheet 2. Mình muốn lấy dữ liệu từ sheet 2 rồi cập nhật vào sheet 1.

VD: Tại A1 ở sheet2 có dữ liệu là "35" chẳng hạn. Thì ở sheet1 tại A1 mình sẽ có công thức là =sheet2!A1. Vì dữ liệu tại A1 ở sheet2 thay đổi từng ngày nên buộc phải copy rồi paste value tại A1 của sheet1 để khi dữ liệu thay đổi ở sheet2 thì tại A1 ở sheet1 sẽ không bị mất dữ liệu. Bây giờ mình muốn khi A1 tại sheet2 thay đổi thì ô A2 tại sheet1 sẽ bằng giá trị mới tại A1 của sheet2. có cách nào khác ngoài việc dùng công thức IF không, vì đây là bảng ghi số liệu hằng ngày nên việc cài công thức vào sẽ bị rối. Mong các bạn chỉ giáo!
Không có công thức nào có thể làm được điều này đâu bạn à! Trừ phi bạn dùng VBA ---> Điều này khá dể dàng
 
Hi ndu, Vậy bạn chỉ giúp mình cách làm bằng VBA nhé! Mình muốn sau mỗi lần cập nhật thì dữ liệu sẽ tự động cập nhật vào dòng kế tiếp trong sheet1. Cám ơn nhiều!!!
 
Lần chỉnh sửa cuối:
Hi ndu,
Vậy bạn chỉ giúp mình cách làm bằng VBA nhé! Mình muốn sau mỗi lần cập nhật thì dữ liệu sẽ tự động cập nhật vào dòng kế tiếp trong sheet1. Cám ơn nhiều!!!
Code khá đơn giản:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$1" Then
    With Sheet1.Range("A65536").End(xlUp)
      .Offset(-(.Value <> "")) = Target
    End With
  End If
End Sub
Xem file
 

File đính kèm

Cám ơn ndu nhiều nhé! Mình còn khá lơ mơ về macro lắm, chỉ đọc sách và tự tìm hiểu trên diễn đàn. Có gì thắc mắc mong các bạn chỉ giúp nhé để còn giúp lại các bạn khác nữa chứ hiện tại bây giờ thì chưa thể "xuống núi" được. Một lần nữa xin cảm ơn diễn đàn rất nhiều!!!
 
Lần chỉnh sửa cuối:
À, cho mình hỏi thêm. Tại sheet2 có khá nhiều ô cần cập nhật như vậy và có khá nhiều sheet trong worksheet cần cập nhật dữ liệu từ sheet2 này. Vậy bạn giúp mình cách chỉ định ô trong sheet 1 chẳng hạn để lấy dữ liệu từ sheet2. Hình như mình đoán là sửa lại trong dòng công thức offset thì phải. Bạn giúp mình nhé! Vd: Mình muốn lấy dữ liệu tại A5 của sheet2, rồi cập nhật qua B5 hay C5 gì đó qua sheet 3 thì cần sửa lại đoạn code như thế nào?
 
Lần chỉnh sửa cuối:
À, cho mình hỏi thêm. Tại sheet2 có khá nhiều ô cần cập nhật như vậy và có khá nhiều sheet trong worksheet cần cập nhật dữ liệu từ sheet2 này. Vậy bạn giúp mình cách chỉ định ô trong sheet 1 chẳng hạn để lấy dữ liệu từ sheet2. Hình như mình đoán là sửa lại trong dòng công thức offset thì phải. Bạn giúp mình nhé!
Vd: Mình muốn lấy dữ liệu tại A5 của sheet2, rồi cập nhật qua B5 hay C5 gì đó qua sheet 3 thì cần sửa lại đoạn code như thế nào?
Giả sử bạn muốn lấy dử liệu từ Sheet2!A5, cập nhật vào Sheet3!B5... vậy thêm 1 tí xảo thuật:
- Gõ gì đó vào cell B4 của Sheet3 (nghĩa là trên B5 1 dòng)
- Tiếp theo thì dùng code này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$5" Then  '
    With Sheet3.Range("B65536").End(xlUp)
      .Offset(1) = Target
    End With
  End If
End Sub
Code này đơn giản hơn code trên! (chỉ cần nhớ KỶ XẢO như đã nói ở trên)
 

File đính kèm

Cám ơn ndu! Mình muốn tiếp là khi nhập vào A6 tại sheet 2 và cập nhật vào C5 thì sao. Mình viết thêm dòng code giống y như vậy nhưng không được. Tóm lại mình muốn sau khi cập nhật số liệu từ A1 tới A30 của sheet 2 chẳng hạn thì ở sheet3 sẽ cập nhật các ô B5, C5, D5, E5..., và tương tự đối với sheet4, sheet5, sheet6 v.v...Qua lần cập nhật kế tiếp thì số liệu cập nhật tự động xuống hàng kế tiếp.
 
Lần chỉnh sửa cuối:
Cám ơn ndu! Mình muốn tiếp là khi nhập vào A6 tại sheet 2 và cập nhật vào C5 thì sao. Mình viết thêm dòng code giống y như vậy nhưng không được. Tóm lại mình muốn sau khi cập nhật số liệu từ A1 tới A30 của sheet 2 chẳng hạn thì ở sheet3 sẽ cập nhật các ô B5, C5, D5, E5..., và tương tự đối với sheet4, sheet5, sheet6 v.v...Qua lần cập nhật kế tiếp thì số liệu cập nhật tự động xuống hàng kế tiếp.
Tôi nói lại yêu cầu, bạn xem chính xác không nha
- Nhập liệu từ A1 đến A30 tại sheet2
- Cấp nhật dử liệu tương ứng với B5, C5,.... của Sheet3 ---> Tức nếu nhập vào A2 của sheet2 thì cập nhật vào cột C của sheet3, dòng cuối cùng, đúng không?
Vậy vẫn áp dụng xảo thuật trên, bạn gõ gì đó vào B4:AE4 của sheet 3 để làm "mốc"... sau đó dùng code này cho sheet 2
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error Resume Next
  With Range("A1:A30")
    If Not Intersect(.Cells, Target) Is Nothing Then
      Sheet3.Range("B65536:AE65536")(, Target.Row).End(xlUp).Offset(1) = Target
    End If
  End With
End Sub
Nếu muốn thêm sheet4, sheet5... thì thêm vào code, chẳng hạn:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error Resume Next
  With Range("A1:A30")
    If Not Intersect(.Cells, Target) Is Nothing Then
      Sheet3.Range("B65536:AE65536")(, Target.Row).End(xlUp).Offset(1) = Target
      Sheet4.Range("B65536:AE65536")(, Target.Row).End(xlUp).Offset(1) = Target
      Sheet5.Range("B65536:AE65536")(, Target.Row).End(xlUp).Offset(1) = Target
      '...........
    End If
  End With
End Sub
Nếu số lượng sheet nhiều hơn nữa, không tiện viết tiếp thì ta dùng vòng lập For quét qua các sheet... ví dụ thế này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i As Long
  On Error Resume Next
  With Range("A1:A30")
    If Not Intersect(.Cells, Target) Is Nothing Then
      For i = 3 To Sheets.Count
        Sheets(i).Range("B65536").Offset(, Target.Row - 1).End(xlUp).Offset(1) = Target
      Next i
    End If
  End With
End Sub
Đây chỉ là những gợi ý, bạn cố gắng tùy biến trên file bạn cho phù hợp!
Nếu vẫn chưa làm được, cứ đưa file thật lên đây nhé
 

File đính kèm

Cách bạn làm gần đúng với ý mình nhưng còn một vài chỗ như sau: Từ A1:A30 có dữ liệu không phải là liên tục, mà dữ liệu có được từ dòng A1:A30 là rời rạc. Có nghĩa là khi mình có dữ liệu từ sheet 2 này thì dữ liệu có được chẳng hạn là A1, A5, A9, A12....và dữ liệu này sẽ cố định, có nghĩa là mỗi lần update như vậy thì dữ liệu sẽ thay đổi trên những A1, A5, A9, A12 này thôi. Sau đó, mình muốn lấy, VD: A1, A5, A9, A12... vào sheet 1 chẳng hạn tại B11, C11, F11... và những dòng này là dòng trống đầu tiên kế dòng có dữ liệu cuối cùng. Rồi tới A15, A22, A27... thì nhập qua sheet khác và cứ như thế. Nếu dùng công thức thì tại ô B11 ở sheet1 = sheet2!A1, C11=sheet2!A5..., rồi B11 ở sheet 3=sheet 2!A15...Nhưng mình muốn dùng macro để tự động chỉ định là vì khi cập nhật dữ liệu của ngày hôm trước rồi (bằng cách gán công thức), sau đó phải paste value để nó không phụ thuộc khi có dữ liệu ngày tiếp theo, đến lúc này thì dòng kế tiếp sẽ mất đi công thức và mình buộc lại phải mò từ đầu, rất mất thời gian. Chính vì vậy mình mới dùng đến macro. Nếu bạn chưa rõ mình sẽ gửi file lên cho bạn nhé. Cám ơn bạn rất nhiều vì đã nhiệt tình giúp đỡ mình!!!
 
Lần chỉnh sửa cuối:
Cách bạn làm gần đúng với ý mình nhưng còn một vài chỗ như sau:
Từ A1:A30 có dữ liệu không phải là liên tục, mà dữ liệu có được từ dòng A1:A30 là rời rạc. Có nghĩa là khi mình có dữ liệu từ sheet 2 này thì dữ liệu có được chẳng hạn là A1, A5, A9, A12....và dữ liệu này sẽ cố định, có nghĩa là mỗi lần update như vậy thì dữ liệu sẽ thay đổi trên những A1, A5, A9, A12 này thôi. Sau đó, mình muốn lấy, VD: A1, A5, A9, A12... vào sheet 1 chẳng hạn tại B11, C11, F11... và những dòng này là dòng trống đầu tiên kế dòng có dữ liệu cuối cùng. Rồi tới A15, A22, A27... thì nhập qua sheet khác và cứ như thế. Nếu dùng công thức thì tại ô B11 ở sheet1 = sheet2!A1, C11=sheet2!A5..., rồi B11 ở sheet 3=sheet 2!A15...Nhưng mình muốn dùng macro để tự động chỉ định là vì khi cập nhật dữ liệu của ngày hôm trước rồi (bằng cách gán công thức), sau đó phải paste value để nó không phụ thuộc khi có dữ liệu ngày tiếp theo, đến lúc này thì dòng kế tiếp sẽ mất đi công thức và mình buộc lại phải mò từ đầu, rất mất thời gian. Chính vì vậy mình mới dùng đến macro. Nếu bạn chưa rõ mình sẽ gửi file lên cho bạn nhé. Cám ơn bạn rất nhiều vì đã nhiệt tình giúp đỡ mình!!!
Ôi chao!
Đọc yêu cầu của bạn mà tôi thấy rối tung... dường như càng lúc càng... tịt..
Hay bạn gữi file của bạn lên đi, minh họa rõ ràng trong đó, hy vọng tôi đọc xong có thể hiểu được
Hic
 
Xin chào ndu, mình gửi file lên nhờ bạn chỉ giúp nhé. Và mình xin mời những ai quan tâm thì tham gia giúp ndu một tay nhé! Cám ơn các bạn nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Các cao thủ ra tay giúp mình bài này với, mình không biết xoay sở thế nào. Nếu dùng công thức thì rất đơn giản nhưng nhược điểm là nó không tự động cập nhật dữ liệu sau khi có dữ liệu mới. Các bạn ráng giúp mình nhé, cám ơn nhiều!
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom