Hoi về tự động cập nhật dữ liệu vào một cột trong excel (1 người xem)

  • Thread starter Thread starter fso56
  • Ngày gửi Ngày gửi

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

Chào các bác. Các bác xem qua ảnh và giúp em cái
https://c1.staticflickr.com/1/618/21801264642_093930970f_b.jpg
View attachment 148006
Dữ liệu trong ô màu đỏ chính là dữ liệu trong các lần nhập dữ liệu vào ô màu xanh.
Xin chân thành cám ơn.%#^#$
Bạn sử dụng Code này cho Sheet nhé
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If (UCase(Mid(Target.Address, 2, 1)) = "J") And (Mid(Target.Address, 4) = "3") Then
   If Range("G4").Value = "" Then
       Range("G4").Value = Target.Value
   ElseIf Range("G5").Value = "" Then
       Range("G5").Value = Target.Value
   Else
       Range("G" & Range("G4").End(xlDown).Row + 1).Value = Target.Value
   End If
End If
End Sub
 
Lần chỉnh sửa cuối:
Bạn sử dụng Code này cho Sheet nhé
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If (UCase(Mid(Target.Address, 2, 1)) = "J") And (Mid(Target.Address, 4) = "3") Then
   If Range("G4").Value = "" Then
       Range("G4").Value = Target.Value
   ElseIf Range("G5").Value = "" Then
       Range("G5").Value = Target.Value
   Else
       Range("G" & Range("G4").End(xlDown).Row + 1).Value = Target.Value
   End If
End If
End Sub

ok cám ơn bạn mình làm được rồi nhé
Bạn cho mình hỏi thêm là
1- Mình muốn thêm một ô H3 và dữ liệu cho vào cột F nữa có được không bạn nhỉ?
2- Có cách nào mà khi mình nhập dữ liệu vào ô J3 hoặc H3 rồi Enter. khi đó dữ liệu được chuyển về hết các cột G, cột H rồi thì dữ liệu ở các ô J3, H3 sẽ tự động xáo đi để nhập các lần khác
Xin cám ơn.
 
Lần chỉnh sửa cuối:
bác nào jup em cái.
 

ý bạn là?
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, [j3:k3]) Is Nothing Then
    If [j3] <> "" And [k3] <> "" Then
    If [g4] = "" Then
        [g4:h4].Value = [j3:k3].Value
    Else
        [g6000].End(xlUp).Offset(1).Resize(, 2).Value = [j3:k3].Value
    End If
    [j3:k3].ClearContents
    End If
End If
 Application.EnableEvents = True
End Sub
 
ý bạn là?
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, [j3:k3]) Is Nothing Then
    If [j3] <> "" And [k3] <> "" Then
    If [g4] = "" Then
        [g4:h4].Value = [j3:k3].Value
    Else
        [g6000].End(xlUp).Offset(1).Resize(, 2).Value = [j3:k3].Value
    End If
    [j3:k3].ClearContents
    End If
End If
 Application.EnableEvents = True
End Sub
Bạn ơi nhưng vấn đề là phải nhập đủ 2 ô K3 và ô J3 và Enter thì mới ra kết quả vào các ô G4 và ô H4. Mình muốn là chỉ cần nhập vào một ô K3 hoặc J3 vào rồi Enter là ra kết quả thì có được không bạn
/-*+/
 
Bạn ơi nhưng vấn đề là phải nhập đủ 2 ô K3 và ô J3 và Enter thì mới ra kết quả vào các ô G4 và ô H4. Mình muốn là chỉ cần nhập vào một ô K3 hoặc J3 vào rồi Enter là ra kết quả thì có được không bạn
/-*+/

cái này
Mã:
If [j3] <> "" And [k3] <> "" Then
làm việc đó,
tùy ý sửa
 
Bạn sử dụng Code này cho Sheet nhé
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
[COLOR=#ff0000]If (UCase(Mid(Target.Address, 2, 1)) = "J") And (Mid(Target.Address, 4) = "3") Then[/COLOR]
   If Range("G4").Value = "" Then
       Range("G4").Value = Target.Value
   ElseIf Range("G5").Value = "" Then
       Range("G5").Value = Target.Value
   Else
       Range("G" & Range("G4").End(xlDown).Row + 1).Value = Target.Value
   End If
End If
End Sub
Dòng màu đỏ kỳ cục quá bạn à! Sao không là If Target.Address = "$J$3" Then
 
Dòng màu đỏ kỳ cục quá bạn à! Sao không là If Target.Address = "$J$3" Then
Cảm ơn bác! mình cũng không biết thế nào nữa, mình vẫn làm như cách của bác nhưng sẽ không bao giờ thỏa mãn điều kiện không biết Excel của mình có bị lỗi gì không nữa. Thử hoài vẫn không thỏa mãn nên cuối cùng phải làm theo cách củ chuối.
 
cái này
Mã:
If [j3] <> "" And [k3] <> "" Then
làm việc đó,
tùy ý sửa
mình sửa lại như thế này bác xem thế nào.
Private Sub Worksheet_Change(ByVal Target As Range)Application.EnableEvents = False
If Not Intersect(Target, [j3:k3]) Is Nothing Then
If [j3] <> "" or [k3] <> "" Then
If [g4] = "" Then
[g4:h4].Value = [j3:k3].Value
Else
[g6000].End(xlUp).Offset(1).Resize(, 2).Value = [j3:k3].Value
End If
[j3:k3].ClearContents
End If
End If
Application.EnableEvents = True End Sub
Nhưng nó lại nẩy sinh một vấn đề là: Khi ta nhập dữ liệu vào ô J3 Enter, k3 Enter thì dữ liệu sẽ nhẩy xuống ô G4 và H5 là ta nhập xong lần 1. Khi chuyển sang lần nhập dữ liệu tiếp theo thì nó lại có vấn đề là: Nhập dữ liệu vào ô J3 thì dữ liệu nhẩy vào ô G5 và xóa luôn dữ liệu ô H5 ( cái đã được nhập vào lần 1).
 
Em cám ơn bác.
Đúng là cao thủ, em chưa nghĩ tới trường hợp này. Bác xem có cao kiến gì júp em cái.;;;;;;;;;;;

Thật ra rất nhiều người có ý tưởng nhập liệu giống như bạn và tôi mường tượng rằng phải dùng UserForm thì mới hoàn chỉnh được. Bạn có thể tự nghiên cứu UserForm hoặc cho file lên để mọi người nghiên cứu giúp bạn
 
Thật ra rất nhiều người có ý tưởng nhập liệu giống như bạn và tôi mường tượng rằng phải dùng UserForm thì mới hoàn chỉnh được. Bạn có thể tự nghiên cứu UserForm hoặc cho file lên để mọi người nghiên cứu giúp bạn
Cám ơn bác
Về UserForm j đó thì em chưa biết
Về mục đích của em là thế này ( các bác thể xem file đính kèm)
Khi nhập dư liệu vào ô C2 và Enter thì dữ liệu đó tự động nhẩy vào ô A4. Lần nhập dữ liệu tiếp theo trên ô C2 thì dữ liệu sẽ được cập nhật vào ô A5, A6, A7 vvv.
Khi cột A dã có dữ liệu thì sẽ tiến hành kiểm trên trên cột A của Sheet1 rồi lấy dữ liệu theo cột A vào các cột còn lại B,C,D,E trên sheet 2.
Khi ô C2 không có dữ liệu thì ta sẽ nhập dữ liệu vào ô D2. Và dự liệu sẽ tự động nhẩy xuống cột B. Khi đó các cột tiếp theo là C,D,E sẽ lấy dữ liệu từ sheet 1 theo cột B
 

File đính kèm

Cám ơn bác
Về UserForm j đó thì em chưa biết
Về mục đích của em là thế này ( các bác thể xem file đính kèm)
Khi nhập dư liệu vào ô C2 và Enter thì dữ liệu đó tự động nhẩy vào ô A4. Lần nhập dữ liệu tiếp theo trên ô C2 thì dữ liệu sẽ được cập nhật vào ô A5, A6, A7 vvv.
Khi cột A dã có dữ liệu thì sẽ tiến hành kiểm trên trên cột A của Sheet1 rồi lấy dữ liệu theo cột A vào các cột còn lại B,C,D,E trên sheet 2.
Khi ô C2 không có dữ liệu thì ta sẽ nhập dữ liệu vào ô D2. Và dự liệu sẽ tự động nhẩy xuống cột B. Khi đó các cột tiếp theo là C,D,E sẽ lấy dữ liệu từ sheet 1 theo cột B
Đúng như tôi dự đoán: Bài này dùng UserForm là hợp lý nhất
Đồng chí nào có hứng thú về UserForm, vào thiết kế một cái cho tác giả nhé
 
Cám ơn bác
Về UserForm j đó thì em chưa biết
Về mục đích của em là thế này ( các bác thể xem file đính kèm)
Khi nhập dư liệu vào ô C2 và Enter thì dữ liệu đó tự động nhẩy vào ô A4. Lần nhập dữ liệu tiếp theo trên ô C2 thì dữ liệu sẽ được cập nhật vào ô A5, A6, A7 vvv.
Khi cột A dã có dữ liệu thì sẽ tiến hành kiểm trên trên cột A của Sheet1 rồi lấy dữ liệu theo cột A vào các cột còn lại B,C,D,E trên sheet 2.
Khi ô C2 không có dữ liệu thì ta sẽ nhập dữ liệu vào ô D2. Và dự liệu sẽ tự động nhẩy xuống cột B. Khi đó các cột tiếp theo là C,D,E sẽ lấy dữ liệu từ sheet 1 theo cột B

Sheet2 bê nguyên dữ liệu từ sheet1 có sẳn, tại sao không dùng sheet1 luôn cho nó tiện mà lại vòng vo tam quốc chi cho khó hiểu thế.

Còn ngược lại muốn bê nguyên xi qua nhiều lần ở các ngày khác nhau thì sử dụng UserForm với 1 Listbox với Source là sheet1 là OK.

Tôi chỉ nêu ý tưởng, còn công việc còn lại chờ các thành viên khác giúp.
 
Lần chỉnh sửa cuối:
Cơ mà đọc nội dung mô tả của tác giả.
1. Có vẻ như tác giả chỉ muốn dò tìm dữ liệu từ sheet1 sang sheet2. (coi như sheet 1 đã có sẵn dữ liệu, không cần update ngược từ sheet2 sang sheet1)
2. Hay là lại ý như thế này:
+ Nếu nhập tại C2 hoặc D2 của sheet2, Nếu dò tìm bên sheet1 đã có Bán vé (C2) hoặc Mã (D2) thì lấy dữ liệu qua. Xong sửa dữ liệu, rồi Nhấn nút update cho nó cập nhật lại bên Sheet1
+ Nếu nhập tại C2 hoặc D2 của sheet2 (Bán vé hoặc mã ) là dữ liệu mới thì Focus xuống A4, hoặc B4 để nhập dữ liệu. Sau đó nhấn nút update để thêm dòng mới vào bên sheet1

Có lẻ như vậy chăng???

Cái nào dễ làm trước đi! Cứ hình dung rằng Sheet1 là danh mục và không cập nhật (hoặc nếu có thì cập nhật bằng tay). Việc của ta chỉ là lấy dữ liệu từ sheet1 sang sheet2 thôi
Vậy nếu dùng UserForm thì nó phải có chức năng: Dò tìm + nhập liệu mới + chỉnh sửa hoặc xóa
----------------------
Đôi khi tác giả chỉ mới có ý tưởng và chưa hình dung đươc mình thật sự cần điều gì đâu
Nghĩ cũng vui:
- Những file dữ liệu thật sự cần đến UserForm trợ giúp thì người ta lại không hiểu UserForm là giống gì
- Những file dữ liệu mà chỉ cần nhập trực tiếp vào là xong (đơn giản) thì người ta lại cứ nhất định muốn UserForm cho bằng được (cho nó pro bằng anh bằng chị)
+-+-+-++-+-+-++-+-+-+--=0--=0--=0
 
Cơ mà đọc nội dung mô tả của tác giả.
1. Có vẻ như tác giả chỉ muốn dò tìm dữ liệu từ sheet1 sang sheet2. (coi như sheet 1 đã có sẵn dữ liệu, không cần update ngược từ sheet2 sang sheet1)
2. Hay là lại ý như thế này:
+ Nếu nhập tại C2 hoặc D2 của sheet2, Nếu dò tìm bên sheet1 đã có Bán vé (C2) hoặc Mã (D2) thì lấy dữ liệu qua. Xong sửa dữ liệu, rồi Nhấn nút update cho nó cập nhật lại bên Sheet1
+ Nếu nhập tại C2 hoặc D2 của sheet2 (Bán vé hoặc mã ) là dữ liệu mới thì Focus xuống A4, hoặc B4 để nhập dữ liệu. Sau đó nhấn nút update để thêm dòng mới vào bên sheet1

Có lẻ như vậy chăng???
Chuẩn đó bác. sheet 1 của em có full dữ liệu rồi
 
Sheet2 bê nguyên dữ liệu từ sheet1 có sẳn, tại sao không dùng sheet1 luôn cho nó tiện mà lại vòng vo tam quốc chi cho khó hiểu thế.

Còn ngược lại muốn bê nguyên xi qua nhiều lần ở các ngày khác nhau thì sử dụng UserForm với 1 Listbox với Source là sheet1 là OK.

Tôi chỉ nêu ý tưởng, còn công việc còn lại chờ các thành viên khác giúp.

Sheet 1 của em có khoảng 20 000 hàng, là sheet tổng hợp hàng. còn sheet 2 là sheet em thống kê hàng nào đã được lấy. ( khi lấy hàng mình lấy theo bản vẽ và mã)
 
Sheet 1 của em có khoảng 20 000 hàng, là sheet tổng hợp hàng. còn sheet 2 là sheet em thống kê hàng nào đã được lấy. ( khi lấy hàng mình lấy theo bản vẽ và mã)

Nếu vậy thì quá đơn giản, cột cuối Sheet1 dòng nào cần lấy thì gõ ký tự đại diện vào, xong sang Sheet2 dùng Advanced Filter lọc ký tự đại diện là xong.
 
Chuẩn theo ý 1. hay sao.

Nếu dữ liệu sheet tổng mà không trùng thì dùng Find xem sao. Còn mà trùng lặp thì tính tiếp nha....
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, lr As Long
lr = Range("A65000").End(3).Row
Application.ScreenUpdating = False
If Not Intersect(Target, Range("C2")) Is Nothing Then
    Set Rng = Range([A4], [A65000].End(3)).Find(Target.Value, , xlValues, xlWhole)
        If Not Rng Is Nothing And Target <> Empty Then
            MsgBox "Du lieu da co roi cha noi!"
        Else
            Set Rng = Sheet1.Range(Sheet1.[A2], Sheet1.[A65000].End(3)).Find(Target.Value, , xlValues, xlWhole)
            If Not Rng Is Nothing Then
                Range("A" & lr + 1).Resize(, 5) = Rng.Resize(, 5).Value
            End If
        End If
End If


If Not Intersect(Target, Range("D2")) Is Nothing Then
    Set Rng = Range([B4], [B65000].End(3)).Find(Target.Value, , xlValues, xlWhole)
        If Not Rng Is Nothing And Target <> Empty Then
            MsgBox "Du lieu da co roi cha noi!"
        Else
            Set Rng = Sheet1.Range(Sheet1.[B2], Sheet1.[B65000].End(3)).Find(Target.Value, , xlValues, xlWhole)
            If Not Rng Is Nothing Then
                Range("A" & lr + 1).Resize(, 5) = Rng.Offset(, -1).Resize(, 5).Value
        End If
    End If
Application.ScreenUpdating = True
End If


End Sub
Không ổn lắm bạn ah. Khi nhập mã vào ô C2 thì dữ liệu nhầy vào các ô A3, b3, c,3,d3,e3, Ok. khi nhập tiếp dữ liệu vào ô D2 thì dữ liệu se vào các ô B4,C4,D4, E4 ok. Nhưng khi nhập dữ liệu vào tiếp ô C2 thì lần này dữ liệu đúng ra phải nhẩy vào các ô A4, B4,C4,D4,E4 nhưng nó lại nhẩy vào các ô A3,b3,c3,d3,e3 và xóa các dữ liệu đã có ở hàng 3 trước đó đi@#!^%
 
Bác có thể nói rỗ hơn được không ah?@!##

Thì cột F, sheet1 File của bạn, muốn lọc lấy dòng nào bạn gõ đại duy nhất cái gì vào đó tùy theo mình quy ước (ví vị là chữ A), sau đó thì dùng Filter (chữ A) rồi Copy nó qua

Hoặc như bài #22 tôi nêu dùng Advanced Filter lọc ký tự đại diện là chữ A sang sheet2 (Advanced Filter thì trên diễn đàn đã hướng dẫn nhiều rồi, bạn tìm mà đọc).
 

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

Back
Top Bottom