Cách chuyển đổi bảng dữ liệu?

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Xin cảm ơn!

Vì nhu cầu công việc nên mình cần chuyển một bảng dữ liệu có sẵn là Bảng A, sang dạng bảng khác là Bảng B và dữ liệu trùng khớp nhau. Như hình. Anh em nào biết chỉ giáo giúp mình với, ngồi mò 2 đêm nay rồi **~**

8066

Xin cảm ơn!

Cho code này vào và bấm 1 cái là xong đi ngủ ngon

Sub QH()
Dim data(), i, kq(1 To 65536, 1 To 3), j, k
data = Range(, .End(3)).Resize(, 5).Value
For i = 2 To UBound(data)
For j = 2 To 5
If data(i, j) > 0 Then
k = k + 1
kq(k, 1) = data(i, 1)
kq(k, 2) = data(1, j)
kq(k, 3) = data(i, j)
End If
Next
Next
.Resize(k, 3) = kq
End Sub

Cách này gọi là VBA nên phải Enable Macro mới xài được. Mở file lên có cái nút sẵn. Bấm 1 cái, nếu chưa có kết quả thì phải tìm cách Enable Macro nhá

www.giaiphapexcel.com/diendan/threads/c%C3%A1ch-chuy%E1%BB%83n-%C4%91%E1%BB%95i-b%E1%BA%A3ng-d%E1%BB%AF-li%E1%BB%87u.96002/

Khoá học Trưởng phòng nhân sự
Khóa học SprinGO phù hợp

Khoá học Trưởng phòng nhân sự

Nguồn nhân lực là một trong Tứ trụ kinh doanh của doanh nghiệp, có tác động tới sự tồn tại và phát triển bền...

Xem khóa học
★★★★★ 5 ★ 1 👤 2 ▥ 0
Quảng cáo

Bạn nên đọc

2 Responses

  1. hands says:

    Đúng là tới 4 bài vẫn chưa chịu, vẫn còn muốn câu thêm ít nhất 1 bài nữa nè.
    Vì chưa "giống hịch" kết quả mẫu của tác giả. (Chưa Sort).
    Ẹc…

    Sub QH()
    Dim data(), i, kq(1 To 65536, 1 To 3), j, k
    data = Range([A2], [A65536].End(3)).Resize(, 5).Value
    For i = 2 To UBound(data)
       For j = 2 To 5
          If data(i, j) > 0 Then
             k = k + 1
             kq(k, 1) = data(i, 1)
             kq(k, 2) = data(1, j)
             kq(k, 3) = data(i, j)
          End If
       Next
    Next
    [G3].Resize(k, 3) = kq
    [G3].Resize(k, 3).Sort Key1:=[G3], Key2:=[H3] ' Ẹc Ẹc Ẹc..............
    End Sub

    .

  2. hands says:

    Cho code này vào và bấm 1 cái là xong đi ngủ ngon

    Sub QH()
    Dim data(), i, kq(1 To 65536, 1 To 3), j, k
    data = Range(, .End(3)).Resize(, 5).Value
    For i = 2 To UBound(data)
    For j = 2 To 5
    If data(i, j) > 0 Then
    k = k + 1
    kq(k, 1) = data(i, 1)
    kq(k, 2) = data(1, j)
    kq(k, 3) = data(i, j)
    End If
    Next
    Next
    .Resize(k, 3) = kq
    End Sub

    Cách này gọi là VBA nên phải Enable Macro mới xài được. Mở file lên có cái nút sẵn. Bấm 1 cái, nếu chưa có kết quả thì phải tìm cách Enable Macro nhá

    Đối với bài này mình sửa code lại thành thế này có đúng ko bạn, sao khi chạy nó báo lỗi? Bạn xem giúp mình nhé!

    Sub QH()Dim data(), i, kq(1 To 65536, 1 To 3), j, k
    data = Range([AR3], [AR65536].End(3)).Resize(, 448).Value
    For i = 2 To UBound(data)
       For j = 2 To 448
          If data(i, j) > 0 Then
             k = k + 1
             kq(k, 1) = data(i, 1)
             kq(k, 2) = data(1, j)
             kq(k, 3) = data(i, j)
          End If
       Next
    Next
    [BR3].Resize(k, 3) = kq
    [BR3].Resize(k, 3).Sort Key1:=[G3], Key2:=[H3] ' ?c ?c ?c..............
    End Sub

    Dữ liệu của bạn chỉ có 23 cột thôi mà, sao bạn "Resize(, 448)" vậy, chỉ cần "Resize(, 23)" và "For j = 2 To 23"
    1) Muốn tổng quát thì khai báo một biến là số cột ( thí dụ biến "iCot"), gán em này vào chỗ "Resize(,iCot)"
    2) Nếu sử dụng Ex 2003, nên tính trước số lượng dòng của kết quả ( đếm trong vùng dữ liệu màu xanh những cell >0), gán vào biến "kq" để đề phòng số lượng dòng kết quả này vượt quá 65536

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm