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
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?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ồiXin cảm ơn!
View attachment 127749
Sorry, cảm ơn bạn đã góp ý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?
Cho code này vào và bấm 1 cái là xong đi ngủ ngonSorry, cảm ơn bạn đã góp ý
Mình đã up file đó lên rồi!
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!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
Bấm Alt+F11, tìm tab Insert, chọn Module, hiện ra 1 cửa sổ cho code vào. bấm F5 > xongCho 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ấm Alt+F11, tìm tab Insert, chọn Module, hiện ra 1 cửa sổ cho code vào. bấm F5 > xong
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á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?
Đú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è.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á
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ì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
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
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"Đố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
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???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
Vậy hẹn tối này tại cầu Thị Nghè nha. Không gặp không về.Ok. Mình làm được rồi. Zui quá. Cảm ơn bạn concogia và quanghai1969 đã 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.
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 ?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