Xuất dữ liệu bằng VBA

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

anhkta

Thành viên mới
Tham gia
21/5/24
Bài viết
2
Được thích
0
Xin giúp đỡ ạ. Em có sheet DATA mã KH theo cột dọc và các loại hàng theo hàng ngang như sau:
LOẠI 1LOẠI 2LOẠI 3LOẠI 4
KH01200100
KH0200030
KH0320405020
KH04101005

xuất sang sheet TK như sau:
Mã KHLoạiSL
KH01LOẠI 120
KH01LOẠI 310
KH02LOẠI 430
KH03LOẠI 120
KH03LOẠI 240
....
em đã thử vòng lặp for cùng lệnh if nhưng vẫn bị lỗi. Mọi người chỉ giúp em với ạ.
 
Bạn gửi file bị lỗi đó lên xem thế nào.
vì em cũng mới tập viết nên cũng không rõ nhiều cái nên cũng không biết sai ở đâu.


Sub TK_Data()
Dim i, j As Integer
For i = 2 To 41
For j = 2 To 25
'sheets(7)= DATA
'sheets(4)= TK
If Sheets(7).Cells(i, j) <> 0 Then 'cells(i,j)= range("B2")
Sheets(4).Range("A2") = Sheets(7).Range("A2")
Sheets(4).Range("C2") = Sheets(7).Range("B1")
Sheets(4).Range("E2") = Sheets(7).Range("B2")
Else: MsgBox ("LOI")
End If
Next
Next

End Sub
 
Upvote 0
Xin giúp đỡ ạ. Em có sheet DATA mã KH theo cột dọc và các loại hàng theo hàng ngang như sau:
LOẠI 1LOẠI 2LOẠI 3LOẠI 4
KH01200100
KH0200030
KH0320405020
KH04101005

xuất sang sheet TK như sau:
Mã KHLoạiSL
KH01LOẠI 120
KH01LOẠI 310
KH02LOẠI 430
KH03LOẠI 120
KH03LOẠI 240
....
em đã thử vòng lặp for cùng lệnh if nhưng vẫn bị lỗi. Mọi người chỉ giúp em với ạ.
Dùng Power pivot rồi Unpivot là nhanh gọn
 
Upvote 0
vì em cũng mới tập viết nên cũng không rõ nhiều cái nên cũng không biết sai ở đâu.
Nên đưa code vào cửa sổ viết code như dưới đây và gửi file lên, chứ biết cấu trúc bảng tính thế nào mà xem đúng hay sai được.
Mã:
Sub TK_Data()
Dim i, j As Integer
For i = 2 To 41
For j = 2 To 25
'sheets(7)= DATA
'sheets(4)= TK
If Sheets(7).Cells(i, j) <> 0 Then 'cells(i,j)= range("B2")
Sheets(4).Range("A2") = Sheets(7).Range("A2")
Sheets(4).Range("C2") = Sheets(7).Range("B1")
Sheets(4).Range("E2") = Sheets(7).Range("B2")
Else: MsgBox ("LOI")
End If
Next
Next
End Sub
 
Upvote 0
@Chủ bài đăng: Cách cù lần nhất, chậm nhưng dễ đạt kết quả nhất:
Bước 1 là lập danh sách mã khách hàng (duy nhất).
B. 2: Xác định vùng chứa mã KH ở trang 'Data' cho vô tham biến (thí dụ Rng - kiểu Range)
B. 3 Tạo vòng lặp duyệt theo danh sách Mã KH (B. 1)
B.4 Tìm mã KH đang duyệt trong tham biến Rng
Tìm thấy thì tạo tiếp vòng lặp duyệt qua các cột chứa số liệu của dòng chứa mã KH; Nếu số này > 0 thì chép tương ứng
 
Upvote 0
@Chủ bài đăng: Cách cù lần nhất, chậm nhưng dễ đạt kết quả nhất:
Bước 1 là lập danh sách mã khách hàng (duy nhất).
B. 2: Xác định vùng chứa mã KH ở trang 'Data' cho vô tham biến (thí dụ Rng - kiểu Range)
B. 3 Tạo vòng lặp duyệt theo danh sách Mã KH (B. 1)
B.4 Tìm mã KH đang duyệt trong tham biến Rng
Tìm thấy thì tạo tiếp vòng lặp duyệt qua các cột chứa số liệu của dòng chứa mã KH; Nếu số này > 0 thì chép tương ứng
Đến được đoạn này thì còn lâu anh ơi, anh có thấy là cho vào vòng lặp nhưng phần gán dữ liệu đâu có chạy theo biến nào mà cố định địa chỉ luôn, chỉ có 03 ô.
Sheets(4).Range("A2") = Sheets(7).Range("A2")
Sheets(4).Range("C2") = Sheets(7).Range("B1")
Sheets(4).Range("E2") = Sheets(7).Range("B2").
Như vậy thì vòng lặp đã mất tác dụng rồi phải không anh.
 
Upvote 0
Bài này là kinh điển của GPE, chuyển dữ liệu từ nơi này sang nơi khác.
Code chán phèo, giải pháp cũ rích.

Sub UnPivotDT()
With WorkSheets("DATA")
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
a = .Range("A1").Resize(lRow, lCol).Value
End With
Redim b(1 To lRow*lCol, 1 To 3)
b(1, 1) = "Ma KH"
b(1, 2) = "Loai"
b(1, 3) ="SL"
bRow = 1
For aRow = 2 To lRow
For aCol = 2 To lCol
If a(aRow, aCol) <> 0 Then
bRow = bRow + 1
b(bRow, 1) = a(aRow, 1)
b(bRow, 2) = a(1, aCol)
b(bRow, 3) = a(aRow, aCol)
End If
Next aCol
Next aRow
WorkSheets("TK").Range("A1").Resize(bRow, 3).Value = b
End Sub
 
Upvote 0
Xin giúp đỡ ạ. Em có sheet DATA mã KH theo cột dọc và các loại hàng theo hàng ngang như sau:
LOẠI 1LOẠI 2LOẠI 3LOẠI 4
KH01200100
KH0200030
KH0320405020
KH04101005

xuất sang sheet TK như sau:
Mã KHLoạiSL
KH01LOẠI 120
KH01LOẠI 310
KH02LOẠI 430
KH03LOẠI 120
KH03LOẠI 240
....
em đã thử vòng lặp for cùng lệnh if nhưng vẫn bị lỗi. Mọi người chỉ giúp em với ạ.
Bạn anhkta hãy xem file cho vui, Tôi thêm vào sheet Support với 2 Name Range (MAKH, LOAI)
Code của cụ VetMini hay hơn
 

File đính kèm

  • Book1.xlsm
    26.3 KB · Đọc: 4
Lần chỉnh sửa cuối:
Upvote 0
em đã thử vòng lặp for cùng lệnh if nhưng vẫn bị lỗi. Mọi người chỉ giúp em với ạ.
Code của bạn không lỗi, chỉ chạy ra kết quả không như mong muốn thôi. Ý tôi muốn nói là bạn mô tả vấn đề sai nên mất công giải thích lại hoặc mất công người khác đoán.
 
Upvote 0
Web KT
Back
Top Bottom