Vấn đề xuất dữ liệu vào sheet tổng hợp

Liên hệ QC

spacemanforever

Thành viên hoạt động
Tham gia
8/10/08
Bài viết
113
Được thích
71
Chào mọi người!
Em hiện gặp khó khăn mong mọi người hỗ trợ.
Nội dung: em lặp 2 sheet: sheet form (chỉ để nhập liệu), Sheet Data (là sheet tổng hợp dữ liệu đã nhập).
--Khi thực add dữ liệu từ sheet form vào sheet data em muốn
1. viết code kiểm tra dữ liệu trùng nhưng không làm --Khìa.
2.Viết code kiểm tra nếu dữ liệu không đủ sẽ báo và xuất hiện 2 tủy chọn ***kiểm tra nhập lại.
***Tiếp tục nhập.
Mọi vấn đề em có nêu rõ trong sheet detail trong file đính kẻm
Cảm ơn mọi người.
 

File đính kèm

Có bạn nào thử dịch bài này ra tiếng Việt dùm cái không vậy các bạn!

Đọc chỉ hiểu lờ mờ nên nhờ bạn nào hiểu & giúp dùm cái; Xin cản ơn trước nhiều lắm!
 
Upvote 0
Chào mọi người!
Em hiện gặp khó khăn mong mọi người hỗ trợ.
Nội dung: em lặp 2 sheet: sheet form (chỉ để nhập liệu), Sheet Data (là sheet tổng hợp dữ liệu đã nhập).
--Khi thực add dữ liệu từ sheet form vào sheet data em muốn
1. viết code kiểm tra dữ liệu trùng nhưng không làm --Khìa.
2.Viết code kiểm tra nếu dữ liệu không đủ sẽ báo và xuất hiện 2 tủy chọn ***kiểm tra nhập lại.
***Tiếp tục nhập.
Mọi vấn đề em có nêu rõ trong sheet detail trong file đính kẻm
Cảm ơn mọi người.
Mọi người hỗ trợ em phần này nhé
Em đã làm cả tuần rồi mà vẫn chưa ra
thanks
 
Upvote 0
em viết được code này nhưng không hiểu tại sao chạy không như mong muốn:
Sub Add()
Dim Answer As VbMsgBoxResult

For i = 1 To 10

If Cells(i + 6, 4).Value <> "" Then
Sheets("Form").Select
A = Cells(i + 6, 4).Value
B = Cells(i + 6, 5).Value
C = Cells(i + 6, 6).Value
D = Cells(i + 6, 7).Value

Shift = Cells(i + 6, 2).Value
Hours = Cells(i + 6, 3).Value

Sheets("Data").Select
n = Cells(1, 2).Value
Cells(1, 1).Select
ActiveCell.Offset(n + 4, 0).Value = Sheets("form").Cells(4, 3).Value
ActiveCell.Offset(n + 4, 1).Value = Shift
ActiveCell.Offset(n + 4, 2).Value = Hours
ActiveCell.Offset(n + 4, 3).Value = A
ActiveCell.Offset(n + 4, 4).Value = B
ActiveCell.Offset(n + 4, 5).Value = C
ActiveCell.Offset(n + 4, 6).Value = D

Else
MsgBox "Please check data again", vbYesNo
If Answer = vbYes Then
Exit Sub
Else
Cells(i + 6, 4).Select
End If

End If
Sheets("form").Select
Next i

End Sub
 
Upvote 0
em viết được code này nhưng không hiểu tại sao chạy không như mong muốn:
-Mình xem nhưng vẫn chưa hiểu lắm yêu cầu của bạn,
nhưng nhìn code thấy các vấn đề sau
If Cells(i + 6, 4).Value <> "" Then
Sheets("Form").Select
A = Cells(i + 6, 4).Value
B = Cells(i + 6, 5).Value
C = Cells(i + 6, 6).Value
D = Cells(i + 6, 7).Value
-là không ổn,chắc bạn định gắn các giá trị A,B,C,D cho các cột D,E,F,G trong sheet Form.Bởi nếu viết thế này nó chỉ nhận giá trị cuối cùng thôi là ô cells(16,4) thôi
-À có phải ý bạn là copy các dữ liệu từ sheet Form sang sheet Data,khi nhấn nút ADD nếu dữ liệu trùng thì kiểm tra lại đúng không?
 
Upvote 0
Mọi hướng dẫn em đã làm trong sheet detail
Mong mọi người giúp dùm
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Chào mọi người!
Em hiện gặp khó khăn mong mọi người hỗ trợ.
Nội dung: em lặp 2 sheet: sheet form (chỉ để nhập liệu), Sheet Data (là sheet tổng hợp dữ liệu đã nhập).
--Khi thực add dữ liệu từ sheet form vào sheet data em muốn
1. viết code kiểm tra dữ liệu trùng nhưng không làm --Khìa.
2.Viết code kiểm tra nếu dữ liệu không đủ sẽ báo và xuất hiện 2 tủy chọn ***kiểm tra nhập lại.
***Tiếp tục nhập.
Mọi vấn đề em có nêu rõ trong sheet detail trong file đính kẻm
Cảm ơn mọi người.
Có ai biết hay có hướng khác hỗ trợ dùm em.
Thanks
 
Upvote 0
Chào mọi người!
Em hiện gặp khó khăn mong mọi người hỗ trợ.
Nội dung: em lặp 2 sheet: sheet form (chỉ để nhập liệu), Sheet Data (là sheet tổng hợp dữ liệu đã nhập).
--Khi thực add dữ liệu từ sheet form vào sheet data em muốn
1. viết code kiểm tra dữ liệu trùng nhưng không làm --Khìa.
2.Viết code kiểm tra nếu dữ liệu không đủ sẽ báo và xuất hiện 2 tủy chọn ***kiểm tra nhập lại.
***Tiếp tục nhập.
Mọi vấn đề em có nêu rõ trong sheet detail trong file đính kẻm
Cảm ơn mọi người.
Em đã làm được đây là code:
Sub Add2()
Dim Shift, Hours, A, B, C, D 'Dt là Date
Dim Dt As String
Dim i As Integer
Dim j As Integer
Set form = Worksheets("form")
Set data = Worksheets("data")
For i = 1 To 6
Dt = form.Range("G7").Offset(-4, 1)
Shift = form.Range("G7").Offset(i - 1, 0)
Hours = form.Range("G7").Offset(i - 1, 1)
A = form.Range("G7").Offset(i - 1, 2)
B = form.Range("G7").Offset(i - 1, 3)
C = form.Range("G7").Offset(i - 1, 4)
D = form.Range("G7").Offset(i - 1, 5)
If A <> "" Then
data.Range("A5").Offset(j, 1) = Shift
data.Range("A5").Offset(j, 2) = Hours
data.Range("A5").Offset(j, 3) = A
data.Range("A5").Offset(j, 4) = B
data.Range("A5").Offset(j, 5) = C
data.Range("A5").Offset(j, 6) = D
data.Range("A5").Offset(j, 0) = Dt
j = j + 1
End If
Next i
End Sub
Cảm ơn sự giúp đỡ của mọi người
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em đã làm được đây là code:

Cảm ơn sự giúp đỡ của mọi người
-Mình thấy bạn làm thế là ổn rùi mà
-Chỉ cần thêm dòng
PHP:
    Set form = Worksheets("form")
    Set data = Worksheets("data")
        Sheets("Data").Range("A5:G100").ClearContents
là Ok mà,cần gì phải làm MsgBox để kiểm tra nữa,vì mỗi lần nhấn là dữ liệu đã được cập nhật lại,bạn cứ điều chỉnh rùi cho chạy,kiểm tra OK mà.
 
Upvote 0
help me!
bạn nào biết cách làm như hình mình gởi không chỉ với

cảm ơn mọi người nha.untitled.JPG
 
Upvote 0
tìm giúp mình hàm tính excel trong hình sau:untitled.JPG
thanks.
 
Upvote 0
Có vẻ nóng lòng lắm nhỉ?

Xài hàm mảng tự tạo nha & ở trang 'Góng' í

PHP:
Option Explicit:        Option Base 1
Function NoiTrong(Rng As Range, Giong As String)
 ReDim MDL(1, 5) As String:         Dim Cls As Range, Jj As Byte
  
 For Each Cls In Rng.Cells(1, 1).Resize(Rng.Count)
   If Cls.Value = Giong Then
      Jj = Jj + 1:      MDL(1, Jj) = Cls.Offset(, 1).Value
   End If
 Next Cls
GPE:  NoiTrong = MDL()
End Function
 

File đính kèm

Upvote 0
Chào mọi người!
Em hiện gặp khó khăn mong mọi người hỗ trợ.
Nội dung: em lặp 2 sheet: sheet form (chỉ để nhập liệu), Sheet Data (là sheet tổng hợp dữ liệu đã nhập).
--Khi thực add dữ liệu từ sheet form sẽ nhập vào sheet data .
Vấn đề trên em đã hoàn thành. Và em có lặp thêm sheet report (Mục đích của sheet này là lấy dữ liệu đã nhập từ sheet data làm báo cáo).
Tuy nhiên có trường hợp như sau em chưa giải quyết được:
---Giả sử ngày 17/10 em nhập số liệu (từ sheet form) add vào sheet data.
---Ngày 18/10 em cũng nhập số liệu (chỉ nhập vào form) không lưu vào sheet data.
--- Ngày 19/10 em nhập số liệu và add vào sheet data.
Như vậy trong sheet data lúc này chỉ có ngày 17 và 19/10 không có ngày 18/10. Em mới tiến hành nhập số liệu (trình tự như trên) cho ngày 18/10 để add vào data. Nếu chạy lại từ code trên thì ngày 18 sẽ nằm dưới ngày 19/10. Em muốn số liệu ngày 18 ngày phải nằm giữa ngày 17- và 19 thì phải làm sao?
Em đang nghĩ theo hướng cho range dữ liệu trong sheet data tự sắp xếp theo thứ tự ngày của cột Date

Mong mọi người hỗ trợ.
Thanks.
 

File đính kèm

Upvote 0
Vấn đề trên em đã hoàn thành. Và em có lặp thêm sheet report (Mục đích của sheet này là lấy dữ liệu đã nhập từ sheet data làm báo cáo).
Tuy nhiên có trường hợp như sau em chưa giải quyết được:
---Giả sử ngày 17/10 em nhập số liệu (từ sheet form) add vào sheet data.
---Ngày 18/10 em cũng nhập số liệu (chỉ nhập vào form) không lưu vào sheet data.
--- Ngày 19/10 em nhập số liệu và add vào sheet data.
Như vậy trong sheet data lúc này chỉ có ngày 17 và 19/10 không có ngày 18/10. Em mới tiến hành nhập số liệu (trình tự như trên) cho ngày 18/10 để add vào data. Nếu chạy lại từ code trên thì ngày 18 sẽ nằm dưới ngày 19/10. Em muốn số liệu ngày 18 ngày phải nằm giữa ngày 17- và 19 thì phải làm sao?
Em đang nghĩ theo hướng cho range dữ liệu trong sheet data tự sắp xếp theo thứ tự ngày của cột Date

Mong mọi người hỗ trợ.
Thanks.
Right Click sheet "Data" ==> View Code ==> chép cái này vào
Mã:
Private Sub Worksheet_Activate()
Range([a4], [a1000].End(xlUp)).Resize(, 7).Sort Key1:=Range("A5"), Order1:=xlAscending, Header:=xlGuess
End Sub
Thân
 
Upvote 0
Em đang làm xuất dữ liệu từ file tổng hợp (sheet data) ra sheet khác (sheet report) theo điều kiện là nếu các giá trị :Date, Shift, hours của sheet report và sheet data trùng thì xuất giá trị đi kèm (gồm A,B,C,D) xuất vào sheet report.
Ngoài ra, còn kèm theo điều kiện:
---nếu kiểm tra trong sheet report có dòng trống (ở đây là dòng ở cột shift) thì dừng xuất.
Nguyên tắc chung là em cố định các giá trị (Date, Shift, hours) trong sheet report để kiểm tra trong sheet data, nếu kiểm tra hết trong sheet data mà ko có dữ liệu trùng thì quay lai sheet report chọn giá trị dòng tiếp theo.
Em đang làm code nhưng chưa chạy được:
PHP:
Sub Export()
Dim i As Integer
  
    Set rp = Worksheets("report")
    Set data = Worksheets("data")
        
For j = 1 To 50000
        Dtrp = rp.Range("A6").Offset(-3, 5)
        Shiftrp = rp.Range("A6").Offset(i, 0)
        Hoursrp = rp.Range("A6").Offset(i, 1)

        Dtdata = data.Range("A5").Offset(j, 0)
        Shiftdata = data.Range("A5").Offset(j, 1)
        Hoursdata = data.Range("A5").Offset(j, 2)
        Adata = data.Range("A5").Offset(j, 3)
        Bdata = data.Range("A5").Offset(j, 4)
        Cdata = data.Range("A5").Offset(j, 5)
        Ddata = data.Range("A5").Offset(j, 6)
     If Shiftdata <> "" Then
        If Dtrp = Dtdata Or Shiftrp = Shiftdata Or Hoursrp = Hoursdata Then
           rp.Range("A6").Offset(i, 2) = Adata
           rp.Range("A6").Offset(i, 3) = Bdata
           rp.Range("A6").Offset(i, 4) = Cdata
           rp.Range("A6").Offset(i, 5) = Ddata
           i = i + 1

        End If
     Else
        Exit For
     End If
Next j
End Sub
Nhờ mọi người giúp đỡ.
Thân chào
 

File đính kèm

Upvote 0
Em đang làm xuất dữ liệu từ file tổng hợp (sheet data) ra sheet khác (sheet report) theo điều kiện là nếu các giá trị :Date, Shift, hours của sheet report và sheet data trùng thì xuất giá trị đi kèm (gồm A,B,C,D) xuất vào sheet report.
Ngoài ra, còn kèm theo điều kiện:
---nếu kiểm tra trong sheet report có dòng trống (ở đây là dòng ở cột shift) thì dừng xuất.
Nguyên tắc chung là em cố định các giá trị (Date, Shift, hours) trong sheet report để kiểm tra trong sheet data, nếu kiểm tra hết trong sheet data mà ko có dữ liệu trùng thì quay lai sheet report chọn giá trị dòng tiếp theo.
Em đang làm code nhưng chưa chạy được:
PHP:
Sub Export()
Dim i As Integer
  
    Set rp = Worksheets("report")
    Set data = Worksheets("data")
        
For j = 1 To 50000
        Dtrp = rp.Range("A6").Offset(-3, 5)
        Shiftrp = rp.Range("A6").Offset(i, 0)
        Hoursrp = rp.Range("A6").Offset(i, 1)

        Dtdata = data.Range("A5").Offset(j, 0)
        Shiftdata = data.Range("A5").Offset(j, 1)
        Hoursdata = data.Range("A5").Offset(j, 2)
        Adata = data.Range("A5").Offset(j, 3)
        Bdata = data.Range("A5").Offset(j, 4)
        Cdata = data.Range("A5").Offset(j, 5)
        Ddata = data.Range("A5").Offset(j, 6)
     If Shiftdata <> "" Then
        If Dtrp = Dtdata Or Shiftrp = Shiftdata Or Hoursrp = Hoursdata Then
           rp.Range("A6").Offset(i, 2) = Adata
           rp.Range("A6").Offset(i, 3) = Bdata
           rp.Range("A6").Offset(i, 4) = Cdata
           rp.Range("A6").Offset(i, 5) = Ddata
           i = i + 1

        End If
     Else
        Exit For
     End If
Next j
End Sub
Nhờ mọi người giúp đỡ.
Thân chào
Có phải bài này là nếu ngày (report-F3)=Ngay (Data) and Shift=Shift and Hours=Hours thì lấy các cột A, B, C, D
Tôi thấy bạn hơi máy móc dùng offset quá.
Để tôi xem và chỉnh lại cho.
If Dtrp = Dtdata Or Shiftrp = Shiftdata Or Hoursrp = Hoursdata Then
Vậy là and hay or
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng rồi là and chứ không phải or minh sữa rồi nhưng vẫn chưa chạy được bạn hỗ trợ nha.
PHP:
Sub Export()
Dim i As Integer
  
    Set rp = Worksheets("report")
    Set data = Worksheets("data")
        
For j = 1 To 50000
        Dtrp = rp.Range("A6").Offset(-3, 5)
        Shiftrp = rp.Range("A6").Offset(i, 0)
        Hoursrp = rp.Range("A6").Offset(i, 1)

        Dtdata = data.Range("A5").Offset(j, 0)
        Shiftdata = data.Range("A5").Offset(j, 1)
        Hoursdata = data.Range("A5").Offset(j, 2)
        Adata = data.Range("A5").Offset(j, 3)
        Bdata = data.Range("A5").Offset(j, 4)
        Cdata = data.Range("A5").Offset(j, 5)
        Ddata = data.Range("A5").Offset(j, 6)
     If Shiftdata <> "" Then
        If Dtrp = Dtdata And Shiftrp = Shiftdata And Hoursrp = Hoursdata Then
           rp.Range("A6").Offset(i, 2) = Adata
           rp.Range("A6").Offset(i, 3) = Bdata
           rp.Range("A6").Offset(i, 4) = Cdata
           rp.Range("A6").Offset(i, 5) = Ddata
           i = i + 1

        End If
     Else
        Exit For
     End If
Next j
End Sub
Cảm ơn bạn nhiều
 
Upvote 0
Đúng rồi là and chứ không phải or minh sữa rồi nhưng vẫn chưa chạy được bạn hỗ trợ nha.
Cảm ơn bạn nhiều
Bạn dùng thử code sau, lâu lắm mới viết code theo hướng Range nên hơi lâu.
PHP:
Sub Export1()
Dim i As Long, j As Long, endR As Long
Dim DtRp As Date
Dim DtData As Range, SfData As Range, HrData As Range, ctData As Range, ctRp As Range
Dim SfRp As Range, HrRp As Range
With Sheets("Data")
  endR = .Cells(65000, 1).End(xlUp).Row
  Set DtData = .Range("A5:A" & endR)
  Set SfData = DtData.Offset(, 1)
  Set HrData = DtData.Offset(, 2)
  Set ctData = DtData.Offset(, 3).Resize(, 4)
End With
With Sheets("Report")
  DtRp = .Range("F3")
  endR = .Cells(65000, 1).End(xlUp).Row
  Set SfRp = .Range("A6:A" & endR)
  Set HrRp = SfRp.Offset(, 1)
  Set ctRp = SfRp.Offset(, 2).Resize(, 4)
End With
For i = 1 To DtData.Rows.Count
  If DtData(i, 1) = DtRp Then
    For j = 1 To SfRp.Rows.Count
      If SfData(i, 1) = SfRp(j, 1) Then
        If HrData(i, 1) = HrRp(j, 1) Then
          ctRp.Offset(j - 1, 0).Resize(1, 4).Value = ctData.Offset(i - 1, 0).Resize(1, 4).Value
          Exit For
        End If
      End If
    Next j
  End If
Next i
Set DtData = Nothing: Set SfData = Nothing: Set HrData = Nothing: Set ctData = Nothing
Set SfRp = Nothing: Set HrRp = Nothing: Set ctRp = Nothing
End Sub
 
Upvote 0
Chào Anh Thunghi!
Code của anh rất tuyệt. Chạy rất ok.
Có 1 số chổ sau trên code anh em còn thắc mắc mong anh giải thích hộ:

**Thứ nhất:
PHP:
Set SfData = DtData.Offset(, 1) 
Set HrData = DtData.Offset(, 2) 
Set ctData = DtData.Offset(, 3).Resize(, 4)

Trong ngoặc () thì thường em viết là (0,1) , (1,1).... nhưng ở đây anh viết (,1) thì code nên hiểu như thế nào?
**Thứ 2:
PHP:
endR = .Cells(65000, 1).End(xlUp).Row
phần .End(xlUp).Row em thấy mấy anh viết nhưng chưa hiểu (End(xlUp))?
***Thứ 3:
PHP:
For i = 1 To DtData.Rows.Count
Thường thì For i= 1 to 10, 20,..... vậy ở đây mình To DtData.Rows.Count thì nên hiểu như thế nào?
Mong anh giải thích hộ.
Cảm ơn anh nhiều.
 
Upvote 0
Web KT

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

Back
Top Bottom