Chuyển dữ liệu từ dạng bảng đứng sang ngang và ngược lại. (1 người xem)

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

loinguyen212

Thành viên thường trực
Tham gia
21/2/14
Bài viết
254
Được thích
35
Em xin chào mọi người.
Em sử dụng table theo dạng đứng (chiều dọc, có sẵn dữ liệu), bây giờ em tạo một table dạng ngang (chiều ngang, và chưa có dữ liệu) (file đính kèm). Có cách nào để em chuyển dữ liệu từ bảng chiều dọc (sheet DSPhuongTien) sang (sheet KBXe) không ạ. Mong thầy cô anh chị giải đáp giúp em.
 

File đính kèm

Lần chỉnh sửa cuối:
Em xin chào mọi người.
Em sử dụng table theo dạng đứng (chiều dọc, có sẵn dữ liệu), bây giờ em tạo một table dạng ngang (chiều ngang, và chưa có dữ liệu) (file đính kèm). Có cách nào để em chuyển dữ liệu từ bảng chiều dọc (sheet DSPhuongTien) sang (sheet KBXe) không ạ. Mong thầy cô anh chị giải đáp giúp em.

Thử xem sao nhé.
Dữ liệu đơn giản thì đưa vào Table làm gì cho mệt máy.
 

File đính kèm

Upvote 0
Cảm ơn bác Ba Tê rất nhiều. Đoạn code của bác hay quá. Em đang test thử.
1. Việc đưa vào table là em có mục đích khác nên phải đưa bác ạ.
2. File của bác gửi em thấy có đuôi là .xlsb, em tìm kiếm nhưng chưa có được nhiều thông tin (nhưng cũng tạm thấy qua là làm giảm dung lượng file xuống) vậy bác có bài nào viết về .xlsb không xin gửi cho em tham khảo với (vd như nó có thay thế được .xlsx không or trong trường hợp nào, v.v...)
3. Các tên header ở trong bảng ngang ở sheet KBXe đã được cố định lại (nghĩa là được nhập từ trước rồi) thì có thể giảm được phần code nào không ạ?
Cảm ơn bác đã giúp đỡ, chúc bác một ngày làm việc hiệu quả và thuận lợi.
 
Upvote 0
Cảm ơn bác Ba Tê rất nhiều. Đoạn code của bác hay quá. Em đang test thử.
1. Việc đưa vào table là em có mục đích khác nên phải đưa bác ạ.
2. File của bác gửi em thấy có đuôi là .xlsb, em tìm kiếm nhưng chưa có được nhiều thông tin (nhưng cũng tạm thấy qua là làm giảm dung lượng file xuống) vậy bác có bài nào viết về .xlsb không xin gửi cho em tham khảo với (vd như nó có thay thế được .xlsx không or trong trường hợp nào, v.v...)
3. Các tên header ở trong bảng ngang ở sheet KBXe đã được cố định lại (nghĩa là được nhập từ trước rồi) thì có thể giảm được phần code nào không ạ?
Cảm ơn bác đã giúp đỡ, chúc bác một ngày làm việc hiệu quả và thuận lợi.
1. Đưa vào Table là tuỳ bạn
2. Đuôi .xlsb (Excel Binary Workbook) hay .xlsm (Excel Enable-Macros Workbook) đều được, nhưng .xlsx (Excel Workbook) thì không chứa code VBA được.
3. Copy lại tiêu đề như trước đây của bạn, rồi thay Sub này thế Sub cũ trong file.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), tArr(), I As Long, J As Long, K As Long, N As Long, C As Long, R As Long, Tem As String
With Sheets("DSPhuongTien")
    sArr = .Range(.[B4], .[B4].End(xlDown)).Resize(, .[B3].End(xlToRight).Column - 1).Value
End With
With Sheets("KBXe")
    tArr = .Range(.[C3], .[C3].End(xlToRight)).Value
    C = UBound(tArr, 2)
    ReDim dArr(1 To UBound(sArr, 1), 1 To C)
    For N = 1 To C
        Tem = tArr(1, N)
        K = 0
        For I = 1 To UBound(sArr, 1)
            For J = 2 To UBound(sArr, 2)
                If sArr(I, J) = Tem Then
                    K = K + 1
                    If K > R Then R = K
                    dArr(K, N) = sArr(I, 1)
                End If
            Next J
        Next I
    Next N
    .[C4].Resize(R, C) = dArr
End With
End Sub
 
Upvote 0
2. File của bác gửi em thấy có đuôi là .xlsb, em tìm kiếm nhưng chưa có được nhiều thông tin, vậy bác có bài nào viết về .xlsb không xin gửi cho em tham khảo với (vd như nó có thay thế được .xlsx)

Lưu File có đuôi là .xlsb mới chứa được Macro, còn đuôi .xlsx không chứa được, bạn lưu như sau:

Save As > Excel Macro-Enabled Workbook
 
Upvote 0
Khi em insert thêm cột như vậy (file đính kèm) thì việc tìm có bị ảnh hưởng gì không ạ? và nếu sửa thì sửa ở chỗ nào nhờ bác bôi đỏ để em có thể thay đổi. Cảm ơn bác Ba Tê rất nhiều.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Ý của em là .xlsb có luôn thay thế được .xlsm không ấy mà. %#^#$
Bạn thử save as ra cả 2 loại file .xlsb và .xlsm chưa? Hãy tự thí nghiệm, xem cả 2 file ấy có làm việc + in ấn bình thường không. Từ đó tự rút ra kinh nghiệm có phải là "tuyệt vời ông mặt trời" không!!?
 
Upvote 0
Cảm ơn bác vanle33. Ý của bác đúng. Ý của em: Việc tự học, tự mò chắc ai cũng đã từng làm, qua việc học và mò sẽ tự rút ra cho mình những kinh nghiệm, vậy nếu có được kinh nghiệm rồi chia sẻ thì người đi sau sẽ rút ngắn được thời gian.
 
Upvote 0
Cảm ơn bác vanle33. Ý của bác đúng. Ý của em: Việc tự học, tự mò chắc ai cũng đã từng làm, qua việc học và mò sẽ tự rút ra cho mình những kinh nghiệm, vậy nếu có được kinh nghiệm rồi chia sẻ thì người đi sau sẽ rút ngắn được thời gian.
Tôi chưa sử dụng 2 kiểu file đó --=0, chỉ sử dụng các định dạng thông thường như .xls hay .xlsx ...
Tôi nói như bài #8 để cách chỉ cách suy nghĩ, hướng thực hiện thôi!
 
Upvote 0
1. Đưa vào Table là tuỳ bạn
2. Đuôi .xlsb (Excel Binary Workbook) hay .xlsm (Excel Enable-Macros Workbook) đều được, nhưng .xlsx (Excel Workbook) thì không chứa code VBA được.
3. Copy lại tiêu đề như trước đây của bạn, rồi thay Sub này thế Sub cũ trong file.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), tArr(), I As Long, J As Long, K As Long, N As Long, C As Long, R As Long, Tem As String
With Sheets("DSPhuongTien")
    sArr = .Range(.[B4], .[B4].End(xlDown)).Resize(, .[B3].End(xlToRight).Column - 1).Value
End With
With Sheets("KBXe")
    tArr = .Range(.[C3], .[C3].End(xlToRight)).Value
    C = UBound(tArr, 2)
    ReDim dArr(1 To UBound(sArr, 1), 1 To C)
    For N = 1 To C
        Tem = tArr(1, N)
        K = 0
        For I = 1 To UBound(sArr, 1)
            For J = 2 To UBound(sArr, 2)
                If sArr(I, J) = Tem Then
                    K = K + 1
                    If K > R Then R = K
                    dArr(K, N) = sArr(I, 1)
                End If
            Next J
        Next I
    Next N
    .[C4].Resize(R, C) = dArr
End With
End Sub
Vì đoạn code bác viết rất hay, em tìm hiểu lâu nhưng vì hiểu biết hạn hẹp nên đọc mà vẫn chưa hiểu hết. Hôm nay em quay lại xin hỏi bác Ba Tê giải thích dùm em ở câu lệnh này, thuật toán ban đầu bác đưa ra là gì và bắt đầu từ vòng lặp em không hiểu mong bác giải thích cho em? Hoặc ai biết có thể giải thích dùm em mấy câu đi ạ -+*/-+*/-+*/
 
Upvote 0
Ở chỗ này R xuất hiện với mục đích gì ạ? Có ai giải thích giúp em với???!$@!!

Số dòng (K) trong từng cột kết quả là khác nhau,
cột 1 có thể K=2
cột 2 có thể K=8
cột 3 có thể K=5
R là số lớn nhất của K, trường hợp trên là 8.
Mục đích cho cái này:
.[C4].Resize(R, C) = dArr
Vậy thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Số dòng (K) trong từng cột kết quả là khác nhau
Bác cho em hỏi ở trên mình đã Redim lại dArr (1 to ...) vậy sao ở dưới lại có dArr(k, N) mà k thì bắt đầu từ 0. Nó có ảnh hưởng gì không ạ, em có áp dụng cho một đoạn code khác, thì nó báo lỗi và khi em cho chạy từng phần 1 rồi trở lại thì lại chạy bình thường (sau khi đã sửa ở vùng Redim).
 
Upvote 0

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

Back
Top Bottom