Chuyển dữ liệu excel từ dạng cột sang dòng

Liên hệ QC

soledad_90

Thành viên thường trực
Tham gia
12/1/10
Bài viết
253
Được thích
47
Giới tính
Nam
Em có file dữ liệu như tệp đính kèm.
Dữ liệu được nhập với hình thức các chủng loại vật tư cố định cho các cột.
Mã hàng sẽ ở từng dòng khi có phát sinh mã hàng mới, Nếu mã hàng mới có phát sinh thêm chủng loại vật tư thì các cột vật tư sẽ được cập nhật theo.
Yêu cầu : ở dạng hình ảnh và file em có làm ví dụ mẫu ạ.
1616742287293.png
Mong nhận được sự giúp đỡ từ diễn đàn ạ.
Em cảm ơn!
 

File đính kèm

  • DINH MUC VT.xlsx
    12.7 KB · Đọc: 6
PHP:
Sub ChuyenBangDuLieu()
Dim Cls As Range, Rng As Range
Dim J As Long, Rws As Long, SoDH As Integer, Col As Integer, W As Integer
Dim MaHH As String

ReDim Arr(1 To [B4].CurrentRegion.Cells.Count, 1 To 4)
Rws = [B4].End(xlDown).Row:                [B15].CurrentRegion.Offset(1).Value = ""
Application.ScreenUpdating = False
For J = 4 To Rws
    MaHH = Cells(J, "b").Value:             SoDH = Cells(J, "C").Value
    Set Rng = Range(Cells(J, "D"), Cells(J, 9999).End(xlToLeft))
    For Col = 1 To Rng.Cells.Count Step 2
        If Rng(Col).Value <> Space(0) Then
            W = W + 1:                      Arr(W, 1) = W
            Arr(W, 2) = MaHH:               Arr(W, 3) = SoDH
            Arr(W, 4) = Rng(Col).Value
            Arr(W, 3) = Cells(2, Rng(Col).Column).Value
        End If
    Next Col
Next J
Application.ScreenUpdating = True:          Randomize:
[B14].CurrentRegion.Interior.ColorIndex = 34 + 9 * Rnd() \ 1
If W Then
    [A15].Resize(W, 4).Value = Arr()
End If
End Sub

Em xin chuyển qua topic này ạ.
Code anh viết em đã cho chạy và đúng như yêu cầu ạ
1./ Khi chủng loại vật tư được cập nhật thêm thì có cho cập nhật tiếp.
2./ Nhưng ở các dòng mã hàng được bổ sung nhiều hơn, tương ứng chủng loại vật tư tăng lên thì kết quả lại bị nhảy cóc ạ . ( chắc là do cố định ô hiện công thức là ô B14 - và để bài e đưa ra là chưa đủ ý )
Em xin viết lại yêu cầu ạ.
Tại sheet Báo cáo sẽ cho kết quả mong muốn như trong tệp đính kèm ạ.
Em cảm ơn anh @SA_DQ

1616747440036.png1616747481544.png
 

File đính kèm

  • DINH MUC VT.xlsx
    17.2 KB · Đọc: 7
Upvote 0
Sao lại đi làm ngược vậy. Và không ai thiết kế cơ sở dữ liệu làm như vậy cả.

Bảng định mức là cái phải lập trước, nó là cơ sở dữ liệu đầu vào.

----
Bảng tính Excel có sẵn đường lưới gridlines đẹp lắm rồi, mình không phải kẻ gì đâu. Chỉ ở bảng in ấn mới làm việc đó.

Vì vật tư có thể phát sinh dài dài thì triển khai nó theo chiều dọc. Loại sản phẩm triển khai theo chiều ngang.
Bảng tính định mức cho từng sản phẩm dùng hàm HLookup(), và filter là xong.
 
Upvote 0
Sao lại đi làm ngược vậy. Và không ai thiết kế cơ sở dữ liệu làm như vậy cả.

Bảng định mức là cái phải lập trước, nó là cơ sở dữ liệu đầu vào.

----
Bảng tính Excel có sẵn đường lưới gridlines đẹp lắm rồi, mình không phải kẻ gì đâu. Chỉ ở bảng in ấn mới làm việc đó.

Vì vật tư có thể phát sinh dài dài thì triển khai nó theo chiều dọc. Loại sản phẩm triển khai theo chiều ngang.
Bảng tính định mức cho từng sản phẩm dùng hàm HLookup(), và filter là xong.

Em cảm ơn thông tin từ anh ạ.
File dữ liệu em nhận được từ các bộ phân trước đó.
Em thừa hưởng dữ liệu để xuất ra sheet báo cáo theo yêu cầu để phục vụ công việc của mình ạ.
Việc thiết kế lại mẫu biểu theo giõi em sẽ nghiên cứu thêm ạ.
 
Upvote 0
Bài đã đăng nơi khác dời đến đây;
Mình sửa macro lại phù hợp với file như sau:
PHP:
Sub ChuyenBangDuLieu()
 Dim Cls As Range, Rng As Range
 Dim J As Long, Rws As Long, SoDH As Integer, Col As Integer, W As Integer
 Dim MaHH As String
 
 With Sheets("DMuc")
    ReDim Arr(1 To .[B4].CurrentRegion.Cells.Count, 1 To 4)
    Rws = .[B4].End(xlDown).Row:                Application.ScreenUpdating = False
    [B4].CurrentRegion.Offset(1).Value = ""     'Xóa Du Liêu Lân Truóc  '
    For J = 4 To Rws
        MaHH = .Cells(J, "b").Value:            SoDH = .Cells(J, "C").Value
        Set Rng = .Range(.Cells(J, "D"), .Cells(J, 9999).End(xlToLeft))
        For Col = 1 To Rng.Cells.Count Step 2
            If Rng(Col).Value <> Space(0) Then
                W = W + 1:                      Arr(W, 1) = W
                Arr(W, 2) = MaHH
                Arr(W, 4) = Rng(Col).Value
                Arr(W, 3) = .Cells(2, Rng(Col).Column).Value
            End If
        Next Col
    Next J
 End With
 Application.ScreenUpdating = True:          Randomize:
 [B4].CurrentRegion.Interior.ColorIndex = 34 + 9 * Rnd() \ 1
 If W Then
    [B4].Resize(W, 4).Value = Arr()
 End If
End Sub

STTMã hàngChủng loại vật tưĐịnh mức
1​
S000010VAI
0.2587​
2​
S000010DA
1.5​
3​
S000010TEM VAI
2​
4​
S000010Kim tuyến
0.3​
5​
S000010băng keo
1​
6​
S002HG0PU
0.18792​
7​
S002HG0TEM VAI
2​
8​
S002HG0KEO
0.055​
9​
S002HG0Kim tuyến
0.6​
10​
S002HG0Sơ dừa
0.055​
11​
S002HG0băng keo
2​
12​
S0011C0DA
3​
13​
S0011C0Kim tuyến
1​
14​
S0011C0băng keo
3​
 
Lần chỉnh sửa cuối:
Upvote 0
Em cảm ơn thông tin từ anh ạ.
File dữ liệu em nhận được từ các bộ phân trước đó.
Em thừa hưởng dữ liệu để xuất ra sheet báo cáo theo yêu cầu để phục vụ công việc của mình ạ.
Việc thiết kế lại mẫu biểu theo giõi em sẽ nghiên cứu thêm ạ.
Lý do luôn luôn và luôn luôn có sẵn.

Thừa kế mặc kệ họ đi. Hàng hóa, vật tư kiểu gì không có đơn vị tính vậy.

Thiết kế như thế này thì mọi thứ ao tu xong phim, không phải lệ thuộc, không phải khổ sở đi nhờ giúp gì cả.
Ngay sau khi có bảng định mức, mình chỉ cần điền vào là xong luôn.
 

File đính kèm

  • DM VT_.xlsx
    13.3 KB · Đọc: 6
Upvote 0
Lý do luôn luôn và luôn luôn có sẵn.

Thừa kế mặc kệ họ đi. Hàng hóa, vật tư kiểu gì không có đơn vị tính vậy.

Thiết kế như thế này thì mọi thứ ao tu xong phim, không phải lệ thuộc, không phải khổ sở đi nhờ giúp gì cả.
Ngay sau khi có bảng định mức, mình chỉ cần điền vào là xong luôn.
" Quá nhanh quá nguy hiểm " :) :throb:
Em cảm ơn anh nhiều về mẫu biểu anh làm, trong thời gian rất ngắn.
Em có chỉnh lại tý ty theo của anh.
Nhưng bên em là dạng lọc ra báo cáo : tức lọc ra rất cả các loại mã hàng / cần vật tư gì / định mức tương ứng đi kèm.
Mẫu của anh sẽ hiển thị ra từng mã hàng một khi nhập chọn đồng thời sử dụng hết bao nhiêu nguyên liệu tương ứng với số lượng định mức .
 

File đính kèm

  • DM VT_.xlsx
    14.9 KB · Đọc: 4
Upvote 0
Em có chỉnh lại tý ty theo của anh.
Nhưng bên em là dạng lọc ra báo cáo : tức lọc ra rất cả các loại mã hàng / cần vật tư gì / định mức tương ứng đi kèm.
Mẫu của anh sẽ hiển thị ra từng mã hàng một khi nhập chọn đồng thời sử dụng hết bao nhiêu nguyên liệu tương ứng với số lượng định mức .
Thì đại khái thế. Mình xem cần làm gì thì thiết kế bảng phù hợp.
Nói chung bảng chuẩn thì phần lớn trường hợp gần như xong việc rồi.
 
Upvote 0
Bài đã đăng nơi khác dời đến đây;
Mình sửa macro lại phù hợp với file như sau:
PHP:
Sub ChuyenBangDuLieu()
Dim Cls As Range, Rng As Range
Dim J As Long, Rws As Long, SoDH As Integer, Col As Integer, W As Integer
Dim MaHH As String

With Sheets("DMuc")
    ReDim Arr(1 To .[B4].CurrentRegion.Cells.Count, 1 To 4)
    Rws = .[B4].End(xlDown).Row:                Application.ScreenUpdating = False
    [B4].CurrentRegion.Offset(1).Value = ""     'Xóa Du Liêu Lân Truóc  '
    For J = 4 To Rws
        MaHH = .Cells(J, "b").Value:            SoDH = .Cells(J, "C").Value
        Set Rng = .Range(.Cells(J, "D"), .Cells(J, 9999).End(xlToLeft))
        For Col = 1 To Rng.Cells.Count Step 2
            If Rng(Col).Value <> Space(0) Then
                W = W + 1:                      Arr(W, 1) = W
                Arr(W, 2) = MaHH
                Arr(W, 4) = Rng(Col).Value
                Arr(W, 3) = .Cells(2, Rng(Col).Column).Value
            End If
        Next Col
    Next J
End With
Application.ScreenUpdating = True:          Randomize:
[B4].CurrentRegion.Interior.ColorIndex = 34 + 9 * Rnd() \ 1
If W Then
    [B4].Resize(W, 4).Value = Arr()
End If
End Sub

STTMã hàngChủng loại vật tưĐịnh mức
1​
S000010VAI
0.2587​
2​
S000010DA
1.5​
3​
S000010TEM VAI
2​
4​
S000010Kim tuyến
0.3​
5​
S000010băng keo
1​
6​
S002HG0PU
0.18792​
7​
S002HG0TEM VAI
2​
8​
S002HG0KEO
0.055​
9​
S002HG0Kim tuyến
0.6​
10​
S002HG0Sơ dừa
0.055​
11​
S002HG0băng keo
2​
12​
S0011C0DA
3​
13​
S0011C0Kim tuyến
1​
14​
S0011C0băng keo
3​
Em cảm ơn anh nhiều ạ.
Xin được gọi là " anh chuyên code chuyển đổi " :) :throb:
Kết quả đúng như yêu cầu mong muốn ạ .
 
Upvote 0
Web KT

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

Back
Top Bottom