Điền dữ liệu có điều kiện

Liên hệ QC

BuiQuangThuan

❆❆❆❆❆❆❆❆❆❆❆❆
Tham gia
17/12/10
Bài viết
2,476
Được thích
2,931
Giới tính
Nam
Chào các Thầy cô và anh chị.
Hiện tại em có bài toán muốn nhờ mọi người giúp.
Do chưa tìm ra được cách làm trong khi phải làm thủ công thấy cực quá.
Hiện tại kết quả mong muốn em đang điền bằng tay tại ô bôi màu xanh như hình đính kèm
1608539108367.png
Về cách giải thích em không biết nên giải thích sao cho dễ hiểu nữa

Xin giải thích thêm về cách làm hiện tại của em ạ: Hiện tại cùng 1 khách hàng từ 2 bảng.
Em sẽ lấy số tiền phát sinh có từ bảng 2 theo ngày sớm nhất để điền vào cột E của bảng 1 dựa theo ngày sớm nhất
Trường hợp không đủ thì sẽ lấy thêm "số phát sinh có" của ngày tiếp theo từ bảng 2
Nếu "số phát sinh có" còn dư sẽ được tính cho ngày tiếp theo của bảng 1 ạ
1608544339383.png

Mong thầy cô và mọi người giúp đỡ
 

File đính kèm

  • demo.xlsb
    9.9 KB · Đọc: 3
Lần chỉnh sửa cuối:
Chào các Thầy cô và anh chị.
Hiện tại em có bài toán muốn nhờ mọi người giúp.
Do chưa tìm ra được cách làm trong khi phải làm thủ công thấy cực quá.
Hiện tại kết quả mong muốn em đang điền bằng tay tại ô bôi màu xanh như hình đính kèm
View attachment 251558
Về cách giải thích em không biết nên giải thích sao cho dễ hiểu nữa
Mong thầy cô và mọi người giúp đỡ
Chắc cũng nhiều người không hiểu giống mình quá :( , Sao số bên bảng 1 không bằng bên bảng 2, và sao dòng 2 lại gộp 2 ngày lại
 
Upvote 0
Chắc cũng nhiều người không hiểu giống mình quá :( , Sao số bên bảng 1 không bằng bên bảng 2, và sao dòng 2 lại gộp 2 ngày lại
Chắc kiểu như nhập trước xuất trước của tồn kho ấy, dòng 2 thì phải lấy giá trị 2 ngày đấy mới đủ phần xuất kiểu như vậy :D
 
Upvote 0
Chắc kiểu như nhập trước xuất trước của tồn kho ấy, dòng 2 thì phải lấy giá trị 2 ngày đấy mới đủ phần xuất kiểu như vậy :D
Thực tình cũng chưa hiểu lắm, nếu vậy ngày 31/8 bên bảng 1 phải là 32,113,436 mới đúng chứ đâu phải 32,113,220 (Hoặc bằng chính số kia luôn 30,537,632)
 
Upvote 0
Thực tình cũng chưa hiểu lắm, nếu vậy ngày 31/8 bên bảng 1 phải là 32,113,436 mới đúng chứ đâu phải 32,113,220 (Hoặc bằng chính số kia luôn 30,537,632)
Ở đây bao lâu mà chưa biết tật GPE hả? Diễn đàn này ngược đời. Người hỏi bài dẫn dắt người code vào cách giải bài.
Cứ viết code đại đi. Chỗ nào không đúng ý thớt sẽ mách cho.
 
Upvote 0
Chắc kiểu như nhập trước xuất trước của tồn kho ấy, dòng 2 thì phải lấy giá trị 2 ngày đấy mới đủ phần xuất kiểu như vậy :D
Dạ đúng như chị đang nói. Thực ra em cũng thấy nó giải thích hơi phức tạp và khó hiểu. Chắc em sẽ biên soạn lại cách trình bày ạ
Thực tình cũng chưa hiểu lắm, nếu vậy ngày 31/8 bên bảng 1 phải là 32,113,436 mới đúng chứ đâu phải 32,113,220 (Hoặc bằng chính số kia luôn 30,537,632)
Dạ. đúng là em điền tay mà vẫn bị sai ạ
Kết quả đúng phải như vầy ạ
1608539006621.png
Bài đã được tự động gộp:

Ở đây bao lâu mà chưa biết tật GPE hả? Diễn đàn này ngược đời. Người hỏi bài dẫn dắt người code vào cách giải bài.
Cứ viết code đại đi. Chỗ nào không đúng ý thớt sẽ mách cho.
Hihi. Con cám ơn chú ạ. Không phải con muốn làm khó sự việc lên. mà tại nhiều lúc làm tay con cũng bị sai nên nói lại càng khó hiểu hơn
 
Upvote 0
Dạ đúng như chị đang nói. Thực ra em cũng thấy nó giải thích hơi phức tạp và khó hiểu. Chắc em sẽ biên soạn lại cách trình bày ạ

Dạ. đúng là em điền tay mà vẫn bị sai ạ
Kết quả đúng phải như vầy ạ
View attachment 251564
Bài đã được tự động gộp:


Hihi. Con cám ơn chú ạ. Không phải con muốn làm khó sự việc lên. mà tại nhiều lúc làm tay con cũng bị sai nên nói lại càng khó hiểu hơn
Cột E thì dễ, hàm excel là xử được rồi.
Mã:
E3=MIN(D3,SUMIF($K$3:$K$9,C3,$L$3:$L$9)-SUMIF($C$2:C2,C3,$E$2:E2))
Còn cột F muốn ra như bạn muốn phải dùng VBA, cơ mà mình không thích dùng VBA trong trường hợp này lắm, dùng hàm+cột phụ+ sửa lại format file một chút như file đính kèm.
 

File đính kèm

  • demo (1).xlsb
    11 KB · Đọc: 9
Upvote 0
Cột E thì dễ, hàm excel là xử được rồi.
Mã:
E3=MIN(D3,SUMIF($K$3:$K$9,C3,$L$3:$L$9)-SUMIF($C$2:C2,C3,$E$2:E2))
Còn cột F muốn ra như bạn muốn phải dùng VBA, cơ mà mình không thích dùng VBA trong trường hợp này lắm, dùng hàm+cột phụ+ sửa lại format file một chút như file đính kèm.
Cám ơn anh nhiều ạ. Khổ nỗi dữ liệu bảng 1 và bảng 2 là 2 dữ liệu được trích xuất ra từ 2 phần mềm khác nhau.Dữ liệu tương đối nhiều, và nó nằm rải rác. Không theo thứ tự dòng. Nó làm em bị rối mắt và mất rất nhiều thời gian làm thủ công mà kết quả sai tè le.
Em xin cám ơn ạ, Để em xem công thức anh hướng dẫn ạ
 
Upvote 0
Một số ở cột D của bảng 1 có thể gom tổng của 1 hoặc vài chục, vài trăm giá trị ở cột L của bảng 2 mà. :p :p

Chưa kể có gom 'đẹp' hay gom lẻ (1 số ở cột L có thể chia ra vào 2 số ở cột D).

1608540845615.png
 
Upvote 0
Một số ở cột D của bảng 1 có thể gom tổng của 1 hoặc vài chục, vài trăm giá trị ở cột L của bảng 2 mà. :p :p

Chưa kể có gom 'đẹp' hay gom lẻ (1 số ở cột L có thể chia ra vào 2 số ở cột D).

View attachment 251570
Cám ơn anh đã giúp đỡ. Vướng 1 cái là nó lại lấy theo cái ngày theo thứ tự tăng dần của 2 bảng anh ạ.
Ai đó thông não giúp em với. Tại làm thủ công. mất nhiều thời gian quá mà nó vẫn sai. Bị la suốt thành ra sốt ruột ạ.
 
Upvote 0
Cám ơn anh đã giúp đỡ. Vướng 1 cái là nó lại lấy theo cái ngày theo thứ tự tăng dần của 2 bảng anh ạ.
Ai đó thông não giúp em với. Tại làm thủ công. mất nhiều thời gian quá mà nó vẫn sai. Bị la suốt thành ra sốt ruột ạ.
Nếu khối lượng nhiều sao trước khi làm không sort cái bảng 2 lại theo thứ tự ưu tiên là mã khách hàng rồi đến ngày lập chứng từ cho dễ làm
1608541734458.png
 
Upvote 0
Nếu khối lượng nhiều sao trước khi làm không sort cái bảng 2 lại theo thứ tự ưu tiên là mã khách hàng rồi đến ngày lập chứng từ cho dễ làm
View attachment 251571
Ờ ha. giờ chị nói em mới để ý cái này đấy. Thật ngu ngốc trước giờ cứ xuất ra như thế nào là làm y hệt như vậy. Làm em lọc muốn nổ con mắt luôn. Đến khổ.
 
Upvote 0
Cám ơn anh đã giúp đỡ. Vướng 1 cái là nó lại lấy theo cái ngày theo thứ tự tăng dần của 2 bảng anh ạ.
Ai đó thông não giúp em với. Tại làm thủ công. mất nhiều thời gian quá mà nó vẫn sai. Bị la suốt thành ra sốt ruột ạ.
Nó không khó như bạn sợ. Chỉ việc bình tĩnh và kiên nhẫn.
Bạn đã kể ra được các bước trong bài #1 rồi thì coi như là một tiến bộ. Bây giờ điều cần học kế tiếp là cứ mỗi bước , bạn ví dụ đầu vào là cái gì và đầu ra sẽ là cái gì. Nếu có chỗ sai thì cũng nói "em làm nó ra xyz, theo đúng thì phải ra abc..."

Quote:
Xin giải thích thêm về cách làm hiện tại của em ạ: Hiện tại cùng 1 khách hàng từ 2 bảng.
Đó là bảng 1 và bảng 2 trong hình
Em sẽ lấy số tiền phát sinh có từ bảng 2 theo ngày sớm nhất để điền vào cột E của bảng 1 dựa theo ngày sớm nhất
Như KH0103 sẽ có ngày phát sinh sớm nhất là 27/08/2020
Tới đây, bạn sẽ thấy cái phi lý của bảng 2. Nó chẳng có cái gì để cho thấy dòng 5 liên hệ với dòng 3 ở bảng 1 cả
Trường hợp không đủ thì sẽ lấy thêm "số phát sinh có" của ngày tiếp theo từ bảng 2
Cái gì không đủ, và thế nào là không đủ? lấy thêm "số phát sinh có" nào?
Đến đây thì người ta không hiểu bạn
Nếu "số phát sinh có" còn dư sẽ được tính cho ngày tiếp theo của bảng 1 ạ
Như trên?
Vì không có ví dụ cụ thể lấy dòng nào và xào nấu ra sao để ra dòng nào cho nên ai cũng bí.
 
Upvote 0
Hihi. Ngu dốt thì đúng là chỉ khổ bản thân thôi phải không anh?
Cho em hỏi chút anh ơi
1608542500248.png
Nếu ngày chứng từ 28/8 như ảnh. thì nó sẽ ưu tiên cho hết 9360,000 vào cáo dòng khoanh đỏ thì phải làm thế nào ạ
Bài đã được tự động gộp:

Nó không khó như bạn sợ. Chỉ việc bình tĩnh và kiên nhẫn.
Bạn đã kể ra được các bước trong bài #1 rồi thì coi như là một tiến bộ. Bây giờ điều cần học kế tiếp là cứ mỗi bước , bạn ví dụ đầu vào là cái gì và đầu ra sẽ là cái gì. Nếu có chỗ sai thì cũng nói "em làm nó ra xyz, theo đúng thì phải ra abc..."

Quote:
Xin giải thích thêm về cách làm hiện tại của em ạ: Hiện tại cùng 1 khách hàng từ 2 bảng.
Đó là bảng 1 và bảng 2 trong hình
Em sẽ lấy số tiền phát sinh có từ bảng 2 theo ngày sớm nhất để điền vào cột E của bảng 1 dựa theo ngày sớm nhất
Như KH0103 sẽ có ngày phát sinh sớm nhất là 27/08/2020
Tới đây, bạn sẽ thấy cái phi lý của bảng 2. Nó chẳng có cái gì để cho thấy dòng 5 liên hệ với dòng 3 ở bảng 1 cả
Trường hợp không đủ thì sẽ lấy thêm "số phát sinh có" của ngày tiếp theo từ bảng 2
Cái gì không đủ, và thế nào là không đủ? lấy thêm "số phát sinh có" nào?
Đến đây thì người ta không hiểu bạn
Nếu "số phát sinh có" còn dư sẽ được tính cho ngày tiếp theo của bảng 1 ạ
Như trên?
Vì không có ví dụ cụ thể lấy dòng nào và xào nấu ra sao để ra dòng nào cho nên ai cũng bí.
Dạ. Đúng thiệt là con không biết giải thích thế nào. Xin sửa lại phần trình bày 1 lần nữa. Con cám ơn chú rất nhiều ạ
 
Upvote 0
Hihi. Ngu dốt thì đúng là chỉ khổ bản thân thôi phải không anh?
Cho em hỏi chút anh ơi
Nếu ngày chứng từ 28/8 như ảnh. thì nó sẽ ưu tiên cho hết 9360,000 vào cáo dòng khoanh đỏ thì phải làm thế nào ạ
Ưu tiên hóa đơn ngày 28/08 trước thì bạn đưa nó lên trên (Sort theo ngày), nhớ copy paste lại công thức.
Tuy nhiên Thuế mà phát hiện ra số hóa đơn với ngày hóa đơn không ăn nhập thế này là tốn tiền nhé bạn :p
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các Thầy cô và anh chị.
Hiện tại em có bài toán muốn nhờ mọi người giúp.
Do chưa tìm ra được cách làm trong khi phải làm thủ công thấy cực quá.
Hiện tại kết quả mong muốn em đang điền bằng tay tại ô bôi màu xanh như hình đính kèm
View attachment 251565
Về cách giải thích em không biết nên giải thích sao cho dễ hiểu nữa

Xin giải thích thêm về cách làm hiện tại của em ạ: Hiện tại cùng 1 khách hàng từ 2 bảng.
Em sẽ lấy số tiền phát sinh có từ bảng 2 theo ngày sớm nhất để điền vào cột E của bảng 1 dựa theo ngày sớm nhất
Trường hợp không đủ thì sẽ lấy thêm "số phát sinh có" của ngày tiếp theo từ bảng 2
Nếu "số phát sinh có" còn dư sẽ được tính cho ngày tiếp theo của bảng 1 ạ
View attachment 251575

Mong thầy cô và mọi người giúp đỡ
Chay code
Mã:
Sub XYZ()
  Dim aHD(), aThu(), Res(), Dic As Object
  Dim srHD&, srThu&, i&, i2&, r&
  Dim S#, KH$, tmpDay, fRow&
 
  Set Dic = CreateObject("scripting.dictionary")
  With Sheets("Sheet1")
    aHD = .Range("C3:D" & .Range("C" & Rows.Count).End(xlUp).Row).Value
    aThu = .Range("I3:L" & .Range("I" & Rows.Count).End(xlUp).Row).Value
  End With
  srHD = UBound(aHD): srThu = UBound(aThu)
  ReDim Res(1 To srHD, 1 To 2)
  For i = 1 To srHD
    KH = aHD(i, 1)
    If Dic.exists(KH) = False Then
      Dic.Add KH, ""
      fRow = 1
      For i2 = i To srHD
        If aHD(i2, 1) = KH Then
          S = aHD(i2, 2)
          For r = fRow To srThu
            If aThu(r, 3) = KH Then
              If Res(i2, 2) = Empty Then
                Res(i2, 2) = aThu(r, 1)
              ElseIf tmpDay <> aThu(r, 1) Then
                Res(i2, 2) = Res(i2, 2) & Chr(10) & aThu(r, 1)
              End If
              tmpDay = aThu(r, 1) 'Ngay nghiep vu truoc
              
              If aThu(r, 4) <= S Then
                Res(i2, 1) = Res(i2, 1) + aThu(r, 4)
                S = S - aThu(r, 4)
                If S = 0 Then fRow = r + 1: Exit For
              Else
                aThu(r, 4) = aThu(r, 4) - S
                Res(i2, 1) = Res(i2, 1) + S
                fRow = r: Exit For
              End If
            End If
          Next r
        End If
      Next i2
    End If
  Next i
  Sheets("Sheet1").Range("E3").Resize(srHD, 2) = Res
End Sub
 
Upvote 0
Cám ơn thầy rất nhiều ạ. Em thấy nó ra đúng kết quả như file đính kèm rồi ạ
Còn 1 điều này nữa thắc mắc với thầy.
Nếu trường hợp dữ liệu bảng 1 sắp xếp lộn xộn như hình minh họa
1608599888341.png
thì kết quả nó bị lộn xộn.
Như vầy tức là nếu sử dụng code của thầy thì em sẽ phải sắp xếp dữ liệu bảng 1 trước khi chạy modul kia đúng không ạ.
Em có thay đổi số liệu của bảng dữ liệu và kết quả mong muốn như:
1608600264906.png
Thì kết quả sau khi chạy code:
1608600331696.png
Phiền thầy sửa giúp em với được không ạ?
Em xin cám ơn thầy, cám ơn mọi người đã giúp đỡ ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn thầy rất nhiều ạ. Em thấy nó ra đúng kết quả như file đính kèm rồi ạ
Còn 1 điều này nữa thắc mắc với thầy.
Nếu trường hợp dữ liệu bảng 1 sắp xếp lộn xộn như hình minh họa
View attachment 251600
thì kết quả nó bị lộn xộn.
Như vầy tức là nếu sử dụng code của thầy thì em sẽ phải sắp xếp dữ liệu bảng 1 trước khi chạy modul kia đúng không ạ.
Em có thay đổi số liệu của bảng dữ liệu và kết quả mong muốn như:
View attachment 251601
Thì kết quả sau khi chạy code:
View attachment 251602
Phiền thầy sửa giúp em với được không ạ?
Em xin cám ơn thầy, cám ơn mọi người đã giúp đỡ ạ
dữ liệu 2 bảng phải theo thứ tự nghiệp vụ phát sinh thực tế
Gởi file kết quả chạy không đúng lên, file gốc chạy bình thường
 
Upvote 0
Web KT
Back
Top Bottom