Xin mọi người giúp e xử lý file Xuất nhập tồn (từ dọc -> ngang) ạ! (5 người xem)

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

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

Tôi tuân thủ nội quy khi đăng bài

oiquetoi

Thành viên mới
Tham gia
18/8/09
Bài viết
15
Được thích
0
E có dữ liệu trong sheet Detail ngày tháng theo chiều dọc; Bây giờ ông sếp e lại muốn tổng hợp sang dạng ngang như sheet bên cạnh.
Các bác xem trong file đính kèm giúp e ạ
Vậy có dùng Pivot table để chuyển sang được không hay là phải dùng hàm như thế nào ạ? càng đơn giản càng tốt ạ.
E xin cảm ơn mọi người nhiều ạ.
1767799054377.png


chuyển sang dạng ngang như này ạ
1767799089160.png
 

File đính kèm

Nếu là pivot table thì làm như hình:

1767839547226.png

Kết quả:

1767839579148.png

Tuy nhiên cách này không hay bằng Power query.
 
Lần chỉnh sửa cuối:
Nếu dùng Power query
PHP:
let
    Source = Excel.CurrentWorkbook(){[Name="detail"]}[Content],
    FilterNull = Table.SelectRows(Source, each ([Mã NVL] <> null)),
    Unpivot = Table.UnpivotOtherColumns(FilterNull, {"Ngày tháng", "Mã NVL", "Chiều rộng (mm)", "Đơn vị"}, "Attribute", "Value"),
    Types = Table.TransformColumnTypes(Unpivot,{{"Value", Int64.Type}, {"Chiều rộng (mm)", Int64.Type}, {"Ngày tháng", type date}}),
    Pivot = Table.Pivot(Table.TransformColumnTypes(Types, {{"Ngày tháng", type date}}, "vn-VN"), 
         List.Distinct(Table.TransformColumnTypes(Types, {{"Ngày tháng", type text}}, "vn-VN")[#"Ngày tháng"]), "Ngày tháng", "Value", List.Sum)
in
    Pivot
 

File đính kèm

Lần chỉnh sửa cuối:
Thêm một sự lựa chọn
Mã:
=LET(
  rng, Detail!B4:O1967,
  hdr, TAKE(rng, 1),
  data, DROP(rng, 1),
  Ngay, TAKE(data, , 1),
  Ma, INDEX(data, , 2),
  Rong, INDEX(data, , 3),
  Donvi, INDEX(data, , 4),
  dsNgay, SORT(UNIQUE(Ngay)),
  dsID, UNIQUE(HSTACK(Ma, Rong, Donvi)),
  nd, {"Tồn đầu";"Tổng nhập";"Tổng nhập lại";"Nhập lại Slit";"Xuất Slit";"Nhập XK";"Xuất XK";"Tổng xuất GC";"Tổng xuất ĐC";"Tồn cuối"},
  col_idx, {5,6,7,8,9,10,11,12,13,14},
  m, ROWS(nd),
  rID, ROWS(dsID),
  hang, MAKEARRAY(rID * m, 4,
    LAMBDA(r,c,
      LET(i, INT((r - 1) / m) + 1, j, MOD(r - 1, m) + 1,
        CHOOSE(c, INDEX(dsID, i, 1), INDEX(dsID, i, 2), INDEX(dsID, i, 3), INDEX(nd, j))
      )
    )
  ),
  mat, MAKEARRAY(rID * m, ROWS(dsNgay),
    LAMBDA(r,k,
      LET(
        i, INT((r - 1) / m) + 1,
        j, MOD(r - 1, m) + 1,
        v,
        SUMIFS(
          INDEX(data, , INDEX(col_idx, j)),
          Ma, INDEX(dsID, i, 1),
          Rong, INDEX(dsID, i, 2),
          Donvi, INDEX(dsID, i, 3),
          Ngay, INDEX(dsNgay, k)
        ),
        IF(v=0,"",v)
      )
    )
  ),
  VSTACK(
    HSTACK({"Mã NVL","Chiều rộng (mm)","Đơn vị","Nội dung"}, TRANSPOSE(TEXT(dsNgay,"dd/mm/yyyy"))),
    HSTACK(hang, mat)
  )
)
1767848796196.png
 

File đính kèm

Pivot thì chưa thử, nhưng query thì như thế này.
cảm ơn bạn nhé. Làm như thế nào vậy bạn hướng dẫn mình được không hay cho mình xin file mình mò vậy?
Bài đã được tự động gộp:

Nếu dùng Power query
PHP:
let
    Source = Excel.CurrentWorkbook(){[Name="detail"]}[Content],
    FilterNull = Table.SelectRows(Source, each ([Mã NVL] <> null)),
    Unpivot = Table.UnpivotOtherColumns(FilterNull, {"Ngày tháng", "Mã NVL", "Chiều rộng (mm)", "Đơn vị"}, "Attribute", "Value"),
    Types = Table.TransformColumnTypes(Unpivot,{{"Value", Int64.Type}, {"Chiều rộng (mm)", Int64.Type}, {"Ngày tháng", type date}}),
    Pivot = Table.Pivot(Table.TransformColumnTypes(Types, {{"Ngày tháng", type date}}, "vn-VN"),
         List.Distinct(Table.TransformColumnTypes(Types, {{"Ngày tháng", type text}}, "vn-VN")[#"Ngày tháng"]), "Ngày tháng", "Value", List.Sum)
in
    Pivot
cảm ơn bạn nhiều nhé, mình chưa dùng query nhiều nên phải tìm hiểu mới được.
 
Lần chỉnh sửa cuối:
Nếu là pivot table thì làm như hình:

View attachment 310815

Kết quả:

View attachment 310816

Tuy nhiên cách này không hay bằng Power query.
cảm ơn bạn nhiều nhé, bạn có thể cho mình xin file để mình nghiên cứu được không? làm sao để có value trong trường Row vậy?
Bài đã được tự động gộp:

Thêm một sự lựa chọn
Mã:
=LET(
  rng, Detail!B4:O1967,
  hdr, TAKE(rng, 1),
  data, DROP(rng, 1),
  Ngay, TAKE(data, , 1),
  Ma, INDEX(data, , 2),
  Rong, INDEX(data, , 3),
  Donvi, INDEX(data, , 4),
  dsNgay, SORT(UNIQUE(Ngay)),
  dsID, UNIQUE(HSTACK(Ma, Rong, Donvi)),
  nd, {"Tồn đầu";"Tổng nhập";"Tổng nhập lại";"Nhập lại Slit";"Xuất Slit";"Nhập XK";"Xuất XK";"Tổng xuất GC";"Tổng xuất ĐC";"Tồn cuối"},
  col_idx, {5,6,7,8,9,10,11,12,13,14},
  m, ROWS(nd),
  rID, ROWS(dsID),
  hang, MAKEARRAY(rID * m, 4,
    LAMBDA(r,c,
      LET(i, INT((r - 1) / m) + 1, j, MOD(r - 1, m) + 1,
        CHOOSE(c, INDEX(dsID, i, 1), INDEX(dsID, i, 2), INDEX(dsID, i, 3), INDEX(nd, j))
      )
    )
  ),
  mat, MAKEARRAY(rID * m, ROWS(dsNgay),
    LAMBDA(r,k,
      LET(
        i, INT((r - 1) / m) + 1,
        j, MOD(r - 1, m) + 1,
        v,
        SUMIFS(
          INDEX(data, , INDEX(col_idx, j)),
          Ma, INDEX(dsID, i, 1),
          Rong, INDEX(dsID, i, 2),
          Donvi, INDEX(dsID, i, 3),
          Ngay, INDEX(dsNgay, k)
        ),
        IF(v=0,"",v)
      )
    )
  ),
  VSTACK(
    HSTACK({"Mã NVL","Chiều rộng (mm)","Đơn vị","Nội dung"}, TRANSPOSE(TEXT(dsNgay,"dd/mm/yyyy"))),
    HSTACK(hang, mat)
  )
)
View attachment 310818
cảm ơn bạn nhiều nhé, mình sẽ nghiên cứu xem như thế nào.
 
cảm ơn bạn nhiều nhé, bạn có thể cho mình xin file để mình nghiên cứu được không? làm sao để có value trong trường Row vậy?
File có rồi mà? Bạn chỉ đọc bài mà chưa xem tới việc có file hay không rồi không lấy về?
Value muốn nằm ở đâu thì lôi vào đó thôi.
 
File có rồi mà? Bạn chỉ đọc bài mà chưa xem tới việc có file hay không rồi không lấy về?
Value muốn nằm ở đâu thì lôi vào đó thôi.
Cảm ơn bạn nhé, bạn gửi 2 trả lời nên mình xem phần pivot ở trên nên hỏi bạn luôn. tại mình không biết dùng querymaaysys. Mình thấy file rồi, mình sẽ nghiên cứu có gì hỏi bạn giúp nhé. Cảm ơn bạn nhiều lắm.
 
@DeTong @ptm0412 Hai bạn ơi có thể giúp mình thêm chút nữa được không, dùng query cũng được.
Mình muốn chuyển "tồn đầu" và "tồn cuối" lên phía trước như hình và các mã liệu vẫn giữ đầy đủ các mục nội dung dù không có số liệu, có được không ạ?
Mình cảm ơn nhiều.
1768057112442.png1768057317054.png1768057406095.png
 
từ cái bảng ngang cũ dùng hàm transpose trong excel chuyển là xong, đơn giản
 
Query thì như sau:
PHP:
let
    Source = Excel.CurrentWorkbook(){[Name="detail"]}[Content],
    FilterNull = Table.SelectRows(Source, each ([Mã NVL] <> null)),
    ReplaceNull = Table.ReplaceValue(FilterNull,null,0,Replacer.ReplaceValue,{"Tồn đầu", "Tổng nhập", "Tổng nhập lại", "Nhập lại Slit", 
        "Xuất Slit", "Nhập XK", "Xuất XK", "Tổng xuất GC", "Tổng xuất ĐC", "Tồn cuối"}),
    Unpivot = Table.UnpivotOtherColumns(ReplaceNull, {"Ngày tháng", "Mã NVL", "Chiều rộng (mm)", "Đơn vị"}, "Attribute", "Value"),
    Types = Table.TransformColumnTypes(Unpivot,{{"Value", Int64.Type}, {"Chiều rộng (mm)", Int64.Type}, {"Ngày tháng", type date}}),
    PivotColumn = Table.Pivot(Table.TransformColumnTypes(Types, {{"Ngày tháng", type text}}, "en-US"), 
        List.Distinct(Table.TransformColumnTypes(Types, {{"Ngày tháng", type text}}, "en-US")[#"Ngày tháng"]), "Ngày tháng", "Value", List.Sum)
in
    PivotColumn
 
Query thì như sau:
PHP:
let
    Source = Excel.CurrentWorkbook(){[Name="detail"]}[Content],
    FilterNull = Table.SelectRows(Source, each ([Mã NVL] <> null)),
    ReplaceNull = Table.ReplaceValue(FilterNull,null,0,Replacer.ReplaceValue,{"Tồn đầu", "Tổng nhập", "Tổng nhập lại", "Nhập lại Slit",
        "Xuất Slit", "Nhập XK", "Xuất XK", "Tổng xuất GC", "Tổng xuất ĐC", "Tồn cuối"}),
    Unpivot = Table.UnpivotOtherColumns(ReplaceNull, {"Ngày tháng", "Mã NVL", "Chiều rộng (mm)", "Đơn vị"}, "Attribute", "Value"),
    Types = Table.TransformColumnTypes(Unpivot,{{"Value", Int64.Type}, {"Chiều rộng (mm)", Int64.Type}, {"Ngày tháng", type date}}),
    PivotColumn = Table.Pivot(Table.TransformColumnTypes(Types, {{"Ngày tháng", type text}}, "en-US"),
        List.Distinct(Table.TransformColumnTypes(Types, {{"Ngày tháng", type text}}, "en-US")[#"Ngày tháng"]), "Ngày tháng", "Value", List.Sum)
in
    PivotColumn
Tuyệt vời, cảm ơn bạn, mình làm theo bạn hướng dẫn và đã làm được. Nhưng mình muốn thay đổi 1 chút như ảnh bên dưới bạn giúp mình thêm chút nữa được không? mình mò tìm mãi không ra. Cảm ơn bạn lần nữa. @ptm0412
1768126677294.png1768126712804.png
 

File đính kèm

Tuyệt vời, cảm ơn bạn, mình làm theo bạn hướng dẫn và đã làm được. Nhưng mình muốn thay đổi 1 chút như ảnh bên dưới bạn giúp mình thêm chút nữa được không? mình mò tìm mãi không ra. Cảm ơn bạn lần nữa. @ptm0412
Bạn có xài PQ của tôi đâu mà nhờ tôi sửa? Kết quả của tôi như thế này:

1768129170991.png
 
Bạn có xài PQ của tôi đâu mà nhờ tôi sửa? Kết quả của tôi như thế này:

View attachment 310856
Không xài PQ của bạn thì làm sao mình làm được, có bạn nhiệt tình hướng dẫn mình là mình biết ơn lắm rồi. Chả là mình muốn "tồn đầu" và "tồn cuối" lên phía trước như ảnh mình gửi ở trên nên mình chỉnh sửa đi thôi, nhưng nó lại không ra théo ý muốn nên lại làm phiền bạn giúp đó. @ptm0412
1768131134847.png
 
Đây bạn, 1 hàm là xong
Dữ liệu gốc của người ta nằm trong sheet Detail, còn sheet "cần chuyển" là cái kết quả mong muốn. Bạn lại dùng cái kết quả mong muốn làm nguồn cho hàm Transpose? Và bạn thử so sánh kết quả của Transpose với kết quả mà tác giả để ở bài 1 và chụp hình ở bài 10 xem?
Không xài PQ của bạn thì làm sao mình làm được, có bạn nhiệt tình hướng dẫn mình là mình biết ơn lắm rồi. Chả là mình muốn "tồn đầu" và "tồn cuối" lên phía trước như ảnh mình gửi ở trên nên mình chỉnh sửa đi thôi, nhưng nó lại không ra théo ý muốn nên lại làm phiền bạn giúp đó. @ptm0412
Power query một khi để "tồn đầu" và "tồn cuối" nằm ngoài hàm Pivot thì nó bị lập lại như vậy, không có cách nào. Kể cả Pivot table cũng không thể làm việc này. Đặc biệt đối với Query thì merge cell là không bao giờ.

Nói thêm về lý thuyết nhập xuất tồn:
Trong bảng detail thì theo cấu trúc bảng, cột "tồn đầu" là cột tồn đầu ngày, vì mỗi ngày là 1 dòng và mỗi ngày có 1 con số tồn riêng. Tương tự cột "tồn cuối "
Khi đưa nó ra ngoài và mỗi ngày 1 cột, số tồn bị hiểu là tồn đầu tháng.

Bạn cần xem lại mẫu báo cáo mà bạn vừa nghĩ ra đi.
 
Lần chỉnh sửa cuối:
Cảm ơn bạn nhé, mình sẽ xem lại báo cáo của mình, có gì cần giúp đỡ mình sẽ nhờ bạn nhé. Thank you. @ptm0412
 

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

Back
Top Bottom