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

Liên hệ QC

thanhphuongvip

Mới học VBA, hỏi ngu anh chị đừng chửi ạ
Tham gia
16/1/10
Bài viết
136
Được thích
22
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 **~**

1111.jpg
Xin cảm ơn!
 

File đính kèm

  • vi du.xlsx
    11.3 KB · Đọc: 14
Lần chỉnh sửa cuối:
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 **~**

View attachment 127749
Xin cảm ơn!
Không lẻ bạn muốn người khác ngồi gõ lại bảng dữ liệu sao? Tại sao không up fie lên?
 
Sorry, cảm ơn bạn đã góp ý :D
Mình đã up file đó lên rồi!
Cho code này vào và bấm 1 cái là xong đi ngủ ngon
PHP:
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
End Sub
 
Cho code này vào và bấm 1 cái là xong đi ngủ ngon
PHP:
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
End Sub
Cho vào đâu vậy bạn, mình mới học excel nên còn gà. Bạn nói chi tiết hơn chút đc ko ? Cảm ơn bạn!
 
Mình làm giống y chan, nhưng nó ko hiện ra gì hết. Nó vẫn như cũ ah. :(
Bạn làm rồi up lên mình xem đc ko?
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á
 

File đính kèm

  • vi du.rar
    13.3 KB · Đọc: 14
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á
Đú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...
[GPECODE=vb]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[/GPECODE]
 
Mình làm được rồi. Nhưng còn cách nào khác tổng quát hơn không, vì bài mình đưa lên là ví dụ, còn thực tế của mình là một bảng rất dài, có cả ngàn dòng dữ liệu.

Mình up file thực tế lên cho bạn xem luôn nhé. Bảng màu xanh của sheet TO KHAI XUAT sẽ biến thành bảng màu vàng ở sheet NVL XUẤT KHO

http://www.mediafire.com/view/itj3rb3nazfzllq/FILE_NHAP_HD_2.xls
 
Mình làm được rồi. Nhưng còn cách nào khác tổng quát hơn không, vì bài mình đưa lên là ví dụ, còn thực tế của mình là một bảng rất dài, có cả ngàn dòng dữ liệu.

Mình up file thực tế lên cho bạn xem luôn nhé. Bảng màu xanh của sheet TO KHAI XUAT sẽ biến thành bảng màu vàng ở sheet NVL XUẤT KHO

http://www.mediafire.com/view/itj3rb3nazfzllq/FILE_NHAP_HD_2.xls

Không xem file nhưng xin hỏi la dữ liệu của bạn có dài hơn 65536 dòng không? Nếu chưa tới đó thì code luôn hoạt động chính xác.
Dữ liệu mẫu là 5 cột, nếu nhiều hơn 5 cột thì thay số 5 thành số nào tuỳ ý. Chỉ vậy thôi. Phải cố tập mò mẫm để còn tự xử chứ.
 
Cảm ơn bạn!.......................
 
Mình làm được rồi. Nhưng còn cách nào khác tổng quát hơn không, vì bài mình đưa lên là ví dụ, còn thực tế của mình là một bảng rất dài, có cả ngàn dòng dữ liệu.

Mình up file thực tế lên cho bạn xem luôn nhé. Bảng màu xanh của sheet TO KHAI XUAT sẽ biến thành bảng màu vàng ở sheet NVL XUẤT KHO

http://www.mediafire.com/view/itj3rb3nazfzllq/FILE_NHAP_HD_2.xls
Đố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é!

Mã:
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
 
Đố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é!

Mã:
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

Khả năng là số dòng vượt quá 65536 rồi.
Thử sửa lại 65536 thành 1000000 xem coi thế nào. Dữ liệu gì mà gần 500 cột. Nếu không có code thì làm sao?
 
Đố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é!

Mã:
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
 
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
Hỏng biết là tại văn phong của em thế nào nữa. Bài 11 em nói rõ ràng dữ liệu mẫu có 5 cột nên là số 5, nếu nhiều hơn thì thay số 5 bằng số nào tùy ý. Chắc là tác giả chơi chiêu "thà giết lầm hơn bỏ sót". Nhưng sao lại ra được con số 448 nhỉ? Phải có lý do gì chứ. Sao không phải là 500???+-+-+-+
 
Ok. Mình làm được rồi. Zui quá. Cảm ơn bạn concogiaquanghai1969 đã nhiệt tình giúp đỡ.
Mình đang ở Sài Gòn, nếu cùng ở Sài Gòn thì cho mình xin hậu tạ 2 bạn chầu cafe và giao lưu. }}}}}
 
Ok. Mình làm được rồi. Zui quá. Cảm ơn bạn concogiaquanghai1969 đã nhiệt tình giúp đỡ.
Mình đang ở Sài Gòn, nếu cùng ở Sài Gòn thì cho mình xin hậu tạ 2 bạn chầu cafe và giao lưu. }}}}}
Vậy hẹn tối này tại cầu Thị Nghè nha. Không gặp không về.
 
Ta hẹn người tối này gặp ở cầu Thị Nghè. Người không nói gì tưởng đâu là đồng ý. Chờ mãi chẳng thấy người đâu thôi ta ghé khu phố văn hóa chơi thôi. Chắc là người ta đi với anh Cò rồi.
Buồn cho thế sự quá đi. Mình được mời cafe cũng nhiều lần rồi mà chưa có lần nào uống được cả. Làm tốn tiền đi taxi nữa chứ vì sợ uống cafe xỉn không về được. hức hức hức :=\+:=\+:=\+
 
Ta hẹn người tối này gặp ở cầu Thị Nghè. Người không nói gì tưởng đâu là đồng ý. Chờ mãi chẳng thấy người đâu thôi ta ghé khu phố văn hóa chơi thôi. Chắc là người ta đi với anh Cò rồi.
Buồn cho thế sự quá đi. Mình được mời cafe cũng nhiều lần rồi mà chưa có lần nào uống được cả. Làm tốn tiền đi taxi nữa chứ vì sợ uống cafe xỉn không về được. hức hức hức :=\+:=\+:=\+
Xin lỗi bác nha. Hôm qua đi làm chưa vào đọc bài này của bác. Số điện thoại của tớ 0902.562.703 (Mr. Phương). Trao đổi số điện thoại đi, tối nay gặp. ok bác ?
 
Web KT

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

Back
Top Bottom