Giúp gộp dữ liệu 2 sheet thành 1 sheet

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Ngocminh19

Thành viên chính thức
Tham gia
30/5/15
Bài viết
68
Được thích
3
Xin chào anh chị
Em có file excell muốn gộp dữ liệu ở 2 sheet Thu,chi vào sheet Tong Hop
Mong muốn hiển thị cùng ngày,các khoản chi,số tiền còn lại
Kết quả mong muốn em có điền ở Sheet "TONG HOP"
Mong anh chị giúp đỡ .Em cảm ơn ạ
 

File đính kèm

  • Gop 2 sheet vào 1.xlsx
    21.3 KB · Đọc: 14
Xin chào anh chị
Em có file excell muốn gộp dữ liệu ở 2 sheet Thu,chi vào sheet Tong Hop
Mong muốn hiển thị cùng ngày,các khoản chi,số tiền còn lại
Kết quả mong muốn em có điền ở Sheet "TONG HOP"
Mong anh chị giúp đỡ .Em cảm ơn ạ
Mình làm vội. bạn tham khảo nhé.
Thân :D
 

File đính kèm

  • Gop 2 sheet vào 1.xlsx
    36.9 KB · Đọc: 7
Upvote 0

File đính kèm

  • Gop 2 sheet vào 1.xlsx
    36.9 KB · Đọc: 6
Upvote 0
Nếu đã biết Query thì dồn vào 1 append là xong
Thêm, sửa ... sheet Thu, Chi
TonQui sẽ tự Refresh...
 

File đính kèm

  • Gop 2 sheet vào 1.xlsm
    28.1 KB · Đọc: 10
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn 2 bạn đã chỉ giúp nhé.
Nếu được mọi người viết giúp mình code chạy ra kết quả như mong muốn thì tốt ạ
Chúc mọi người sức khỏe
 
Upvote 0
Cảm ơn 2 bạn đã chỉ giúp nhé.
Nếu được mọi người viết giúp mình code chạy ra kết quả như mong muốn thì tốt ạ
Chúc mọi người sức khỏe
Đây là M code, có sắn trong file attach mà...
Click phải vùng xanh lá , chọn Query / Edit ...
Mã:
let

// Chú thích: Source là kết hợp 2 table Thu, Chi vào thành 1 table
    Source = Table.Combine({Thu, Chi}),

// Sort table theo cột Ngày a--> z, cột Thu lớn --> nhỏ
    Sorted = Table.Sort(Source,{{"Ngay", Order.Ascending},{"Thu", Order.Descending}}),

// Thêm cột STT để tạo running total ( cộng dồn Thu - Cộng dồn Chi )
    CotIndex = Table.AddIndexColumn(Sorted, "Index",1,1),
    CotTon = Table.AddColumn(CotIndex, "TonQuy", each  List.Sum(List.FirstN(CotIndex[Thu],[Index]))- List.Sum(List.FirstN(CotIndex[Chi],[Index]))),

//Khi có  kết quả tồn quĩ mỗi dòng rồi thì delete cột này đi
    RemovedIndex = Table.RemoveColumns(CotTon,{"Index"})

in
    RemovedIndex
 
Upvote 0
Đây là M code, có sắn trong file attach mà...
Click phải vùng xanh lá , chọn Query / Edit ...
Mã:
let

// Chú thích: Source là kết hợp 2 table Thu, Chi vào thành 1 table
    Source = Table.Combine({Thu, Chi}),

// Sort table theo cột Ngày a--> z, cột Thu lớn --> nhỏ
    Sorted = Table.Sort(Source,{{"Ngay", Order.Ascending},{"Thu", Order.Descending}}),

// Thêm cột STT để tạo running total ( cộng dồn Thu - Cộng dồn Chi )
    CotIndex = Table.AddIndexColumn(Sorted, "Index",1,1),
    CotTon = Table.AddColumn(CotIndex, "TonQuy", each  List.Sum(List.FirstN(CotIndex[Thu],[Index]))- List.Sum(List.FirstN(CotIndex[Chi],[Index]))),

//Khi có  kết quả tồn quĩ mỗi dòng rồi thì delete cột này đi
    RemovedIndex = Table.RemoveColumns(CotTon,{"Index"})

in
    RemovedIndex
Cảm ơn bạn
Mình không biết về query,nhưng excell mình 365 thì chạy ok,nhưng sang máy excell 2013 thì không tự động cập nhật khi có nhập thông tin mới
ấn refesh thì báo lỗi không kết nối được Data.
Nếu có thể bạn viết giúp mình code VBA với nhé
Xin cảm ơn bạn!
 
Upvote 0
Ha ha, đi mô rồi cũng trở về code tĩnh, nhớ nút "nhấn 1 phát", nhứ dòng vê bê a....

Người ta đã hỏi code là vba, chắc chắn không chấp nhận giải pháp khác. Vòng qua vòng lại chỉ là vuốt đuôi trước khi vòi thẳng thừng.
Lỡ rồi thì chịu khó viết vba đi.
 
Upvote 0
Xin chào anh chị
Em có file excell muốn gộp dữ liệu ở 2 sheet Thu,chi vào sheet Tong Hop
Mong muốn hiển thị cùng ngày,các khoản chi,số tiền còn lại
Kết quả mong muốn em có điền ở Sheet "TONG HOP"
Mong anh chị giúp đỡ .Em cảm ơn ạ
Khi mở sheet TongHop tự động chạy code
Mã:
Private Sub Worksheet_Activate()
  Call ThuChi
End Sub

Mã:
Sub ThuChi()
  Dim aThu(), aChi(), res()
  Dim sRow&, T&, C&, k&, ton#
 
  With Sheets("Thu ")
    aThu = .Range("B4:F" & .Range("B" & Rows.Count).End(xlUp).Row + 1).Value
  End With
  With Sheets("CHI")
    aChi = .Range("B3:F" & .Range("B" & Rows.Count).End(xlUp).Row + 1).Value
  End With
  aThu(UBound(aThu), 1) = 100000
  aChi(UBound(aChi), 1) = 100000
  sRow = UBound(aThu) + UBound(aChi) - 2
  ReDim res(1 To sRow, 1 To 6)
  T = 1: C = 1
  Do
    k = k + 1
    If aChi(C, 1) < aThu(T, 1) Then
      Call AddRes(res, aChi, C, k, ton, 5, -1)
    Else
      Call AddRes(res, aThu, T, k, ton, 4, -1)
    End If
  Loop Until k = sRow
  With Sheets("TONG HOP")
    sRow = .Range("A" & Rows.Count).End(xlUp).Row
    If sRow > 2 Then .Range("A3:G" & sRow).ClearContents
    .Range("A3").Resize(k, 6) = res
  End With
End Sub

Sub AddRes(res, arr, i, k, ton, ByVal col&, ByVal dau&)
  res(k, 1) = k
  res(k, 2) = arr(i, 1)
  res(k, 3) = arr(i, 2)
  res(k, col) = arr(i, 5)
  If col = 4 Then ton = ton + arr(i, 5) Else ton = ton - arr(i, 5)
  res(k, 6) = ton
  i = i + 1
End Sub
 

File đính kèm

  • Gop 2 sheet vào 1.xlsm
    30.1 KB · Đọc: 9
Upvote 0
Ha ha, đi mô rồi cũng trở về code tĩnh, nhớ nút "nhấn 1 phát", nhứ dòng vê bê a....

Người ta đã hỏi code là vba, chắc chắn không chấp nhận giải pháp khác. Vòng qua vòng lại chỉ là vuốt đuôi trước khi vòi thẳng thừng.
Lỡ rồi thì chịu khó viết vba đi

Khi mở sheet TongHop tự động chạy code
Mã:
Private Sub Worksheet_Activate()
  Call ThuChi
End Sub

Mã:
Sub ThuChi()
  Dim aThu(), aChi(), res()
  Dim sRow&, T&, C&, k&, ton#
 
  With Sheets("Thu ")
    aThu = .Range("B4:F" & .Range("B" & Rows.Count).End(xlUp).Row + 1).Value
  End With
  With Sheets("CHI")
    aChi = .Range("B3:F" & .Range("B" & Rows.Count).End(xlUp).Row + 1).Value
  End With
  aThu(UBound(aThu), 1) = 100000
  aChi(UBound(aChi), 1) = 100000
  sRow = UBound(aThu) + UBound(aChi) - 2
  ReDim res(1 To sRow, 1 To 6)
  T = 1: C = 1
  Do
    k = k + 1
    If aChi(C, 1) < aThu(T, 1) Then
      Call AddRes(res, aChi, C, k, ton, 5, -1)
    Else
      Call AddRes(res, aThu, T, k, ton, 4, -1)
    End If
  Loop Until k = sRow
  With Sheets("TONG HOP")
    sRow = .Range("A" & Rows.Count).End(xlUp).Row
    If sRow > 2 Then .Range("A3:G" & sRow).ClearContents
    .Range("A3").Resize(k, 6) = res
  End With
End Sub

Sub AddRes(res, arr, i, k, ton, ByVal col&, ByVal dau&)
  res(k, 1) = k
  res(k, 2) = arr(i, 1)
  res(k, 3) = arr(i, 2)
  res(k, col) = arr(i, 5)
  If col = 4 Then ton = ton + arr(i, 5) Else ton = ton - arr(i, 5)
  res(k, 6) = ton
  i = i + 1
End Sub
Cảm ơn bác ạ.
Kết quả thì đúng rồi nếu nhập theo thử tự ngày tử thấp dến cao.
Nhưng trong trường hợp qua ngày rồi nhập thêm Thu,Chi của ngày cũ ở dòng dưới(do quên chưa nhập ngay) thì bên Sheet "TONG HOP" chưa sắp xếp được ạ
Mong bác sửa giúp ạ.
Chúc bác ngày mới vui vẻ
1720835700532.png
 
Upvote 0
Nhưng trong trường hợp qua ngày rồi nhập thêm Thu,Chi của ngày cũ ở dòng dưới(do quên chưa nhập ngay) thì bên Sheet "TONG HOP" chưa sắp xếp được ạ
Nếu xài query thì không cần quan tâm chuyện này...
Query chỉ có sẵn từ Excel 2016, còn cũ hơn thì cài thêm AddIn
 
Upvote 0
Cảm ơn bác ạ.
Kết quả thì đúng rồi nếu nhập theo thử tự ngày tử thấp dến cao.
Nhưng trong trường hợp qua ngày rồi nhập thêm Thu,Chi của ngày cũ ở dòng dưới(do quên chưa nhập ngay) thì bên Sheet "TONG HOP" chưa sắp xếp được ạ
Mong bác sửa giúp ạ.
Chúc bác ngày mới vui vẻ
View attachment 302359
Yêu cầu cơ bản của kiểm soát cơ sở dữ liệu là "phải" nhập liệu theo thứ tự thời gian, bạn nhập không theo trình tự rất dễ sai sót .
Thêm lệnh sort dữ liệu
Mã:
Sub ThuChi()
  Dim aThu(), aChi(), res()
  Dim sRow&, T&, C&, k&, ton#
 
  Application.ScreenUpdating = False
  With Sheets("Thu ")
    T = .Range("B" & Rows.Count).End(xlUp).Row
    res = .Range("B4:F" & T).Value
    .Range("B4:F" & T).Sort .Range("B4"), 1, Header:=xlNo
    aThu = .Range("B4:F" & .Range("B" & Rows.Count).End(xlUp).Row + 1).Value
    .Range("B4:F" & T).Value = res
  End With
  With Sheets("CHI")
    T = .Range("B" & Rows.Count).End(xlUp).Row
    res = .Range("B3:F" & T).Value
    .Range("B3:F" & T).Sort .Range("B3"), 1, Header:=xlNo
    aChi = .Range("B3:F" & .Range("B" & Rows.Count).End(xlUp).Row + 1).Value
    .Range("B3:F" & T).Value = res
  End With
  aThu(UBound(aThu), 1) = 100000
  aChi(UBound(aChi), 1) = 100000
  sRow = UBound(aThu) + UBound(aChi) - 2
  ReDim res(1 To sRow, 1 To 6)
  T = 1: C = 1
  Do
    k = k + 1
    If aChi(C, 1) < aThu(T, 1) Then
      Call AddRes(res, aChi, C, k, ton, 5, -1)
    Else
      Call AddRes(res, aThu, T, k, ton, 4, -1)
    End If
  Loop Until k = sRow
  With Sheets("TONG HOP")
    sRow = .Range("A" & Rows.Count).End(xlUp).Row
    If sRow > 2 Then .Range("A3:G" & sRow).ClearContents
    .Range("A3").Resize(k, 6) = res
  End With
  Application.ScreenUpdating = True
End Sub
 
Upvote 0
Yêu cầu cơ bản của kiểm soát cơ sở dữ liệu là "phải" nhập liệu theo thứ tự thời gian, bạn nhập không theo trình tự rất dễ sai sót .
Thêm lệnh sort dữ liệu
Mã:
Sub ThuChi()
  Dim aThu(), aChi(), res()
  Dim sRow&, T&, C&, k&, ton#
 
  Application.ScreenUpdating = False
  With Sheets("Thu ")
    T = .Range("B" & Rows.Count).End(xlUp).Row
    res = .Range("B4:F" & T).Value
    .Range("B4:F" & T).Sort .Range("B4"), 1, Header:=xlNo
    aThu = .Range("B4:F" & .Range("B" & Rows.Count).End(xlUp).Row + 1).Value
    .Range("B4:F" & T).Value = res
  End With
  With Sheets("CHI")
    T = .Range("B" & Rows.Count).End(xlUp).Row
    res = .Range("B3:F" & T).Value
    .Range("B3:F" & T).Sort .Range("B3"), 1, Header:=xlNo
    aChi = .Range("B3:F" & .Range("B" & Rows.Count).End(xlUp).Row + 1).Value
    .Range("B3:F" & T).Value = res
  End With
  aThu(UBound(aThu), 1) = 100000
  aChi(UBound(aChi), 1) = 100000
  sRow = UBound(aThu) + UBound(aChi) - 2
  ReDim res(1 To sRow, 1 To 6)
  T = 1: C = 1
  Do
    k = k + 1
    If aChi(C, 1) < aThu(T, 1) Then
      Call AddRes(res, aChi, C, k, ton, 5, -1)
    Else
      Call AddRes(res, aThu, T, k, ton, 4, -1)
    End If
  Loop Until k = sRow
  With Sheets("TONG HOP")
    sRow = .Range("A" & Rows.Count).End(xlUp).Row
    If sRow > 2 Then .Range("A3:G" & sRow).ClearContents
    .Range("A3").Resize(k, 6) = res
  End With
  Application.ScreenUpdating = True
End Sub
Vâng . Kết quả đúng rồi ạ
Em xin cảm ơn !
 
Upvote 0
Web KT
Back
Top Bottom