Làm thế nào để tạo Macro kết hợp dữ liệu ở cột đầu với các cột sau?

  • Thread starter Thread starter NHG
  • Ngày gửi Ngày gửi
Liên hệ QC

NHG

Thành viên hoạt động
Tham gia
15/1/07
Bài viết
148
Được thích
126
Mình có một dữ liệu nguồn như sau:
1 A B C D E
2 F G H Y K
3 L M N O P

Mình muốn có một Macro để có dữ liệu đích như sau:

1 A
1 B
1 C
1 E
2 F
2 G
2 H
2 Y
2 K
...

Chi tiết mình gửi ở File đính kèm, các bạn giúp mình nhé
 

File đính kèm

Trò chơi này tôi đã từng làm rồi... thậm chí còn khó hơn yêu cầu của bạn (dử liệu rời rạc ko liên tục...) Tham khảo bài toán tôi nêu ra tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=8032
Và file này là giãi pháp ko dùng VBA... Hãy xem và chỉnh lại theo ý mình
ANH TUẤN
 

File đính kèm

Upvote 0
Cám ơn anhtuan đã giúp đỡ, nhưng bạn hiểu nhầm ý của mình rồi, bài toán ở đây không phải là sắp xêp dữ liệu theo thứ tự ABC hay 123 mà mình muốn kết hợp lần lượt cột đầu tiên với cột thứ hai, cột đầu tiên với cột thứ ba; cột đầu tiên với cột thứ năm. Và mình muốn dùng Macro vì File dữ liệu của mình rất lớn, dùng công thức e máy mình không tải nổi
 
Upvote 0
Thì file tôi đâu có sắp xếp theo thứ tự ABC gì đâu... vẫn giống ý yêu cầu của bạn đấy chứ...
Còn như bạn muốn dùng macro cũng ko phải là ko có cách, nếu bạn am hiểu 1 tí có thể nghiên cứu chức năng Paste Tranppose kết hợp với vòng lập For... ra cái vèo...
ANH TUẤN
 
Upvote 0
NHG đã viết:
Cám ơn anhtuan đã giúp đỡ, nhưng bạn hiểu nhầm ý của mình rồi, bài toán ở đây không phải là sắp xêp dữ liệu theo thứ tự ABC hay 123 mà mình muốn kết hợp lần lượt cột đầu tiên với cột thứ hai, cột đầu tiên với cột thứ ba; cột đầu tiên với cột thứ năm. Và mình muốn dùng Macro vì File dữ liệu của mình rất lớn, dùng công thức e máy mình không tải nổi
Bạn dùng thử code sau
Option Explicit
Dim i As Integer, j As Integer, rGet As Integer
Dim iRows As Integer, iCols As Integer
Const fR = 10 'Khai bao dong lay du lieu dau
Const fC = 7 'Khai bao cot lay du lieu dau
Sub Trich()
Sheet1.Select
Range("B5:E9").Name = "Data" 'Tao range Data
iRows = Range("Data").Rows.Count
iCols = Range("Data").Columns.Count
Range(Cells(fR, fC), Cells(1000, fC + 1)).ClearContents 'Xoa du lieu tu Cells(fr,fc)
For i = 1 To iRows
For j = 1 To iCols
rGet = j + iCols * (i - 1) + fR 'dong se lay du lieu
Cells(rGet, fC + 1) = Range("data").Cells(i, j)
Cells(rGet, fC) = i 'So TT
Next
Next
End Sub
 
Upvote 0
Cám ơn ThuNghi, nhờ vào code của bạn mà mình đã sửa một chút xíu để phù hợp với yêu cầu của mình
 
Upvote 0
ThuNghi đã viết:
Option Explicit
Dim i As Integer, j As Integer, rGet As Integer
Dim iRows As Integer, iCols As Integer
Const fR = 10 'Khai bao dong lay du lieu dau
Const fC = 7 'Khai bao cot lay du lieu dau
Sub Trich()
Sheet1.Select
Range("B5:E9").Name = "Data" 'Tao range Data
iRows = Range("Data").Rows.Count
iCols = Range("Data").Columns.Count
Range(Cells(fR, fC), Cells(1000, fC + 1)).ClearContents 'Xoa du lieu tu Cells(fr,fc)
For i = 1 To iRows
For j = 1 To iCols
rGet = j + iCols * (i - 1) + fR 'dong se lay du lieu
Cells(rGet, fC + 1) = Range("data").Cells(i, j)
Cells(rGet, fC) = i 'So TT
Next
Next
End Sub
mạn phép bạn ThuNghi mình sửa thế này
Option Explicit
Dim i As Integer, j As Integer, rGet As Integer
Dim iRows As Integer, iCols As Integer
Const fR = 10 'Khai bao dong lay du lieu dau
Const fC = 2 'Khai bao cot lay du lieu dau
Sub Trich()
Sheet1.Select
Range("B5:F9").Name = "Data" 'Tao range Data
iRows = Range("Data").Rows.Count
iCols = Range("Data").Columns.Count
Range(Cells(fR, fC), Cells(1000, fC + 1)).ClearContents 'Xoa du lieu tu Cells(fr,fc)
For i = 1 To iRows
For j = 2 To iCols
rGet = j - 1 + (iCols - 1) * (i - 1) + fR 'dong se lay du lieu
Cells(rGet, fC + 1) = Range("data").Cells(i, j)
Cells(rGet, fC) = i 'So TT
Next
Next
End Sub
đã đảm bảo đạt 100% yêu cầu của bài toán
 
Upvote 0
Mạn phép bạn ThuNghi mình sửa code tý

NHG đã viết:
Mình có một dữ liệu nguồn như sau:
1 A B C D E
2 F G H Y K
3 L M N O P

Mình muốn có một Macro để có dữ liệu đích như sau:

1 A
1 B
1 C
1 E
2 F
2 G
2 H
2 Y
2 K
...

Chi tiết mình gửi ở File đính kèm, các bạn giúp mình nhé

Mình sửa chút xíu code của bạn ThuNghi thành thế này
Option Explicit
Dim i As Integer, j As Integer, rGet As Integer
Dim iRows As Integer, iCols As Integer
Const fR = 10 'Khai bao dong lay du lieu dau
Const fC = 2 'Khai bao cot lay du lieu dau
Sub Trich()
Sheet1.Select
Range("B5:F9").Name = "Data" 'Tao range Data
iRows = Range("Data").Rows.Count
iCols = Range("Data").Columns.Count
Range(Cells(fR, fC), Cells(1000, fC + 1)).ClearContents 'Xoa du lieu tu Cells(fr,fc)
For i = 1 To iRows
For j = 2 To iCols
rGet = j - 1 + (iCols - 1) * (i - 1) + fR 'dong se lay du lieu
Cells(rGet, fC) = Range("data").Cells(i, 1)
Cells(rGet, fC + 1) = Range("data").Cells(i, j)
Next
Next
End Sub
Bạn xem đã đúng ý chưa?
 

File đính kèm

Upvote 0
Cảm ơn các bạn đã giúp đỡ
Bây giừ bài toán của mình lại có một chút thay đổi các bạn nghiên cứu tiếp tục giúp mình nhé:

Dữ liệu nguồn

cnc Linh cn1 Hoang cn5 Quân cn6 Thuy ccn Tuan
tcsx1 Lan tcsx2 Hà tcsx3 Quang tcsx4 Bình tcsx5 Minh
dx Anh dx2 Khánh dx1 Thịnh dx5 Nên dx7 Huỳnh

Dữ liệu đích

cnc Linh
cn1 Hoang
cn5 Quân
cn6 Thuy
ccn Tuan
tcsx1 Lan
tcsx2 Hà
tcsx3 Quang
tcsx4 Bình
tcsx5 Minh
dx Anh
dx2 Khánh
dx1 Thịnh
dx5 Nên
dx7 Huỳnh
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Lại một bài toán nữa mà mình cần giải quyết các bạn giúp mình nhé, cũng là kết hợp dòng thành cột
 

File đính kèm

Upvote 0
NHG đã viết:
Cảm ơn các bạn đã giúp đỡ
Bây giừ bài toán của mình lại có một chút thay đổi các bạn nghiên cứu tiếp tục giúp mình nhé:
Bạn dùng code sau
PHP:
Sub DongCot()
Dim eCol As Integer, i As Integer, j As Integer, z As Integer
Sheet1.Select
Range("E19:F100").ClearContents
eCol = Range("AZ5").End(xlToLeft).Column - 1
z = 18
For i = 6 To 8
    For j = 3 To eCol Step 2
        If Cells(i, j) <> "" Then
            z = z + 1
            Cells(z, 5) = Cells(i, j)
            Cells(z, 6) = Cells(i, j + 1)
        End If
    Next
Next
End Sub
 
Upvote 0
NHG đã viết:
Lại một bài toán nữa mà mình cần giải quyết các bạn giúp mình nhé, cũng là kết hợp dòng thành cột

Bạn thử xem 1 cách khác nhé, các công thức thì rất đơn giải thôi.

Thân!
 

File đính kèm

Upvote 0
NHG đã viết:
Cảm ơn các bạn đã giúp đỡ
Bây giừ bài toán của mình lại có một chút thay đổi các bạn nghiên cứu tiếp tục giúp mình nhé:

Dữ liệu nguồn

cnc Linh cn1 Hoang cn5 Quân cn6 Thuy ccn Tuan
tcsx1 Lan tcsx2 Hà tcsx3 Quang tcsx4 Bình tcsx5 Minh
dx Anh dx2 Khánh dx1 Thịnh dx5 Nên dx7 Huỳnh

Dữ liệu đích

cnc Linh
cn1 Hoang
cn5 Quân
cn6 Thuy
ccn Tuan
tcsx1 Lan
tcsx2 Hà
tcsx3 Quang
tcsx4 Bình
tcsx5 Minh
dx Anh
dx2 Khánh
dx1 Thịnh
dx5 Nên
dx7 Huỳnh

Vội quá, mới swar được bài này, bạn xem thế nào?
 

File đính kèm

Upvote 0
Các bạn ơi còn yêu cầu này nữa:

Dữ liệu nguồn

[FONT=.VnTime]Gh-B-Bx-C-Cz-D-Dg-E-Ec[/FONT]
[FONT=.VnTime]Gk-F-Ft-Y-Ym-K-Kt-H-Ht[/FONT]
[FONT=.VnTime]Gy-O-Oj-P-Pk-L-Lm-N-Nj[/FONT]

[FONT=.VnTime]Du lieu dich[/FONT]

[FONT=.VnTime]Gh-B-Bx[/FONT]
[FONT=.VnTime]Gh-C-Cz[/FONT]
[FONT=.VnTime]Gh-D-Dg[/FONT]
[FONT=.VnTime]Gh-E-Ec[/FONT]
[FONT=.VnTime]Gk-F-Ft[/FONT]
[FONT=.VnTime]Gk-Y-Ym[/FONT]
[FONT=.VnTime]Gk-K-Kt[/FONT]
[FONT=.VnTime]Gk-H-Ht[/FONT]
[FONT=.VnTime]Gy-O-Oj[/FONT]
[FONT=.VnTime]Gy-P-Pk[/FONT]
[FONT=.VnTime]Gy-L-Lm[/FONT]
[FONT=.VnTime]Gy-N-Nj[/FONT]
 

File đính kèm

Upvote 0
Giai bai toan: dong thanh cot cua ban NGH

NHG đã viết:
Lại một bài toán nữa mà mình cần giải quyết các bạn giúp mình nhé, cũng là kết hợp dòng thành cột

- Cảm ơn bạn ThuNghi đã có những công thức đơn giản, dễ hiểu
- Mình sửa chút xíu cho hoàn chỉnh để giải bài toán của bạn NGH

- Bạn NGH xem đã được chưa?
 

File đính kèm

Upvote 0
NHG đã viết:
Các bạn ơi còn yêu cầu này nữa:

Dữ liệu nguồn

[FONT=.VnTime]Gh-B-Bx-C-Cz-D-Dg-E-Ec[/FONT]
[FONT=.VnTime]Gk-F-Ft-Y-Ym-K-Kt-H-Ht[/FONT]
[FONT=.VnTime]Gy-O-Oj-P-Pk-L-Lm-N-Nj[/FONT]

[FONT=.VnTime]Du lieu dich[/FONT]

[FONT=.VnTime]Gh-B-Bx[/FONT]
[FONT=.VnTime]Gh-C-Cz[/FONT]
[FONT=.VnTime]Gh-D-Dg[/FONT]
[FONT=.VnTime]Gh-E-Ec[/FONT]
[FONT=.VnTime]Gk-F-Ft[/FONT]
[FONT=.VnTime]Gk-Y-Ym[/FONT]
[FONT=.VnTime]Gk-K-Kt[/FONT]
[FONT=.VnTime]Gk-H-Ht[/FONT]
[FONT=.VnTime]Gy-O-Oj[/FONT]
[FONT=.VnTime]Gy-P-Pk[/FONT]
[FONT=.VnTime]Gy-L-Lm[/FONT]
[FONT=.VnTime]Gy-N-Nj[/FONT]
Bạn xem lại bài: "dong thanh cot"
"dong thanh cot.xls" và "attachment1.xls" cùng 1 yêu cầu nhw nhau
 
Upvote 0
Uh, đúng rồi, mình xin lỗi, gửi nhiều quá nên lộn xộn. Các bài các bạn đăng lên đều thỏa mãn những yêu cầu mình đề ra, cảm ơn mọi người,
 
Upvote 0
Các bạn sửa lại code giúp mình với:

Exceldongthanhcot.jpg

http://s258.photobucket.com/albums/hh275/hgiang0101/?action=view&current=Exceldongthanhcot.jpg
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
NHG đã viết:
Bạn dùng code sau:
PHP:
Sub DongCot()
Dim eCol As Integer, i As Integer, j As Integer, z As Integer
Sheet1.Select
Range("G12:I100").ClearContents
eCol = Range("AZ5").End(xlToLeft).Column - 1
z = 11
For i = 5 To 7
    For j = 2 To eCol Step 2
        If Cells(i, j + 1) <> "" And Cells(i, j + 2) <> "" Then
            z = z + 1
            Cells(z, 7) = Cells(i, 2)
            Cells(z, 8) = Cells(i, j + 1)
            Cells(z, 9) = Cells(i, j + 2)
        End If
    Next
Next
End Sub
Nhớ lần sau hạn chế đặt tên file là book1.xls
 
Upvote 0
Web KT

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

Back
Top Bottom