duong_nam_dao
Thành viên chính thức


- Tham gia
- 2/3/08
- Bài viết
- 89
- Được thích
- 44





Ô E3 gõ công thức:Mình có 2 danh sách tên ở 2 cột B và C(danh sách có thể thay đổi). Dùng công thức nào để gộp 2 danh sách đó vào 1 cột theo thứ tự hết cột B rồi đến cột C. Chờ tin các bạn !
Sau đó copy down công thức xuống dưới nhé!=IF(ROW()>COUNTA(B:B)+2,INDEX(C:C,ROW()-COUNTA(B:B),1),INDEX(B:B,ROW(),1))
Bạn ca_dafi phát triển lên, nếu muốn gộp 3-4 cột thì thế nào ?Ô E3 gõ công thức:
Sau đó copy down công thức xuống dưới nhé!
Bạn xem thêm file đính kèm!
To whitemouse: Bạn xem kỹ lại câu hỏi xem. Không đơn giản vậy đâu!
Bạn ca_dafi phát triển lên, nếu muốn gộp 3-4 cột thì thế nào ?
Mình cũng chưa rõ ứng dụng của tác giả topic. Còn thực tế thì mình thỉnh thoảng phải xử lý dữ liệu của người khác làm để lại do họ để hơi lộn xộn ở nhiều cột... sau khi gộp vào một cột chắc sau đó dùng để làm đầu vào cho các hàm như VLOOKUP() ... Trong trường hợp đó mình cứ bôi đen rồi copy dần thôiTheo mình, mình chưa hiểu ứng dụng của việc này để làm gì! Tuy nhiên, nếu 3,4 cột hoặc hơn thì ta dùng VBA cho gọn.
For Each xxi In xx là quét toàn bộ danh sách, như vậy rất dở! Theo tôi thì sẽ quét theo cột. Cụ thể file này chỉ quét có 2 lần, mổi lần copy 1 cột, paste vào cell dưới cell cuối có dử liệu của vùng đíchTôi đã viết Macro trong file đính kèm. Hãy nhập địa chỉ vùng cần gộp vô ô tiếp nhận kết quả gộp và đặt lại ô hoạt động về ô đó và thực hiện Macro.
Sub Macro1()
dc = ActiveCell
Set xx = Range(dc)
For Each xxi In xx
If xxi <> "" Then
ActiveCell = xxi
ActiveCell.Offset(1, 0).Range("A1").Select
End If
Next
End Sub
CT sẽ lấy địa chỉ vùng cần gộp và chuyển vào ô hoạt động và các ô ở dưới, bỏ qua các ô
gốc rỗng.
With Range("B3").CurrentRegion
For i = 1 To .Columns.Count
Range(.Cells(1, i), .Cells(1, i).End(xlDown)).Copy _
Destination:=[E65536].End(xlUp).Offset(1)
Next
End With
Sub CopyMultiCol()
Dim i As Long
Range([E3], [E3].End(xlDown)).Clear
With Range("B3").CurrentRegion
For i = 1 To .Columns.Count
Range(.Cells(1, i), .Cells(65536 - .Row, i).End(xlUp)).SpecialCells(2, 23).Copy _
Destination:=[E65536].End(xlUp).Offset(1)
Next
End With
End Sub
Tôi nghĩ nếu làm bằng tay, tôi sẽ:Các bác chỉ giúp hộ trường hợp này.
Chào bạn!Sheet1 và sheet2 gộp lại thành sheet 3. Số thứ tự của sheet3 không quan trọng phải đúng thứ tự. Các bác xem hộ.
Sub TongHop()
Dim Sh As Worksheet
Application.ScreenUpdating = False
Sheets("TongHop").[A6].CurrentRegion.Offset(1).ClearContents
For Each Sh In ThisWorkbook.Worksheets
If Sh.Name <> "TongHop" Then
With Sh.[A6].CurrentRegion.Offset(1)
.Copy: Sheets("TongHop").[B65536].End(xlUp).Offset(1, -1).PasteSpecial 3
End With
End If
Next
With Sheets("TongHop").[A6].CurrentRegion
.Offset(, 1).Resize(, 1).AdvancedFilter 1, , , 1
.SpecialCells(12).Copy Destination:=Sheets("TongHop").[AA6]
Sheets("TongHop").ShowAllData
.ClearContents
.Value = Sheets("TongHop").[AA6].CurrentRegion.Value
Sheets("TongHop").[AA6].CurrentRegion.Clear
.SpecialCells(2, 16).ClearContents
.Cells(1, 1).Select
End With
Application.ScreenUpdating = True
End Sub
Sub TongHop()
Dim Sh As Worksheet
Application.ScreenUpdating = False
With Sheets("TongHop").[A6].CurrentRegion
.Offset(1).ClearContents
.Resize(1).Copy Destination:=Sheets("TongHop").[AA6]
End With
For Each Sh In ThisWorkbook.Worksheets
If Sh.Name <> "TongHop" Then
Sh.[A6].CurrentRegion.Offset(1).Copy
With Sheets("TongHop").[AA6].CurrentRegion
.Offset(.Rows.Count).PasteSpecial 3
End With
End If
Next
With Sheets("TongHop").[AA6].CurrentRegion
.Offset(, 1).Resize(, 1).AdvancedFilter 1, , , 1
.Offset(1).SpecialCells(12).Copy: Sheets("TongHop").[A7].PasteSpecial 3
Sheets("TongHop").ShowAllData
.Clear
End With
Sheets("TongHop").[A6].Select
Application.ScreenUpdating = True
End Sub
Sub TongHop_2007()
Dim Sh As Worksheet
If Application.Version < 12 Then Exit Sub
Application.ScreenUpdating = False
Sheets("TongHop").[A6].CurrentRegion.Offset(1).ClearContents
For Each Sh In ThisWorkbook.Worksheets
If Sh.Name <> "TongHop" Then
Sh.[A6].CurrentRegion.Offset(1).Copy
With Sheets("TongHop").[A6].CurrentRegion
.Offset(.Rows.Count).PasteSpecial 3
End With
End If
Next
With Sheets("TongHop").[A6].CurrentRegion
.RemoveDuplicates 2, 1
.Cells(1).Select
End With
Application.ScreenUpdating = True
End Sub




Topic này là Hỏi đáp về Công thức! Vậy ta làm bằng công thức nhéBạn ca_dafi phát triển lên, nếu muốn gộp 3-4 cột thì thế nào ?
VT =IF(DS="","",TRANSPOSE(ROW(INDIRECT("1:"&COLUMNS(DS))))+ROW(INDIRECT("1:"&ROWS(DS)))/1000)
=IF(ROWS($1:1)>COUNT(VT),"",INDEX(DS,MOD(SMALL(VT,ROWS($1:1)),1)*1000,INT(SMALL(VT,ROWS($1:1)))))




Bạn nhấn ctrl+F3 xem sao nhéCái VT đó viết vào đâu hả bạn, mình xem file của bạn mà kiếm ko thấy cái VT đó. giúp mình với nha, cám ơn nhìu!





Bạn hỏi bài nào vậy?anh cho em hỏi với là tại sao khi kéo công thức xuống lại không được mà cứ phải copy công thức xuống mới đúng ạ. Em cảm ơn

Topic này là Hỏi đáp về Công thức! Vậy ta làm bằng công thức nhé
1> Quét chọn vùng dử liệu và đặt name cho nó là DS (trong file tôi DS =Sheet1!$B$3:$G$100)
2> Thêm 1 name nữa:
3> Cuối cùng là công thức:PHP:VT =IF(DS="","",TRANSPOSE(ROW(INDIRECT("1:"&COLUMNS(DS))))+ROW(INDIRECT("1:"&ROWS(DS)))/1000)
DS của bạn muốn bao nhiêu cột, bao nhiêu dòng cũng ko có vấn đề (chỉ sợ dử liệu quá lớn sẽ nặng file thôi)PHP:=IF(ROWS($1:1)>COUNT(VT),"",INDEX(DS,MOD(SMALL(VT,ROWS($1:1)),1)*1000,INT(SMALL(VT,ROWS($1:1)))))

Bài này cũng phải copy công thức xuống từng ô mới được, chứ nếu kéo thẳng xuống thì cũng không được là sao vậy?Ô E3 gõ công thức:
Sau đó copy down công thức xuống dưới nhé!
Bạn xem thêm file đính kèm!
To whitemouse: Bạn xem kỹ lại câu hỏi xem. Không đơn giản vậy đâu!