Làm sao gộp được hai cột thành một?

Liên hệ QC

thanhtam348

Thành viên thường trực
Tham gia
9/3/07
Bài viết
288
Được thích
62
Chào các bạn và anh chị trong GPE!
Tôi có dử liệu ở cột "B", VD là:
B2=1
B3=2
B4=3
Ở cột "C", VD là:
C2=4
C3=5
C4=6
Vậy ở cột "D" tôi muốn nối chúng lại thành:
1
2
3
4
5
6
Nếu có công thức nào nhờ anh chị và các bạn giúp đở dùm.
Cám ơn.
 
Chào các bạn và anh chị trong GPE!
Tôi có dử liệu ở cột "B", VD là:
B2=1
B3=2
B4=3
Ở cột "C", VD là:
C2=4
C3=5
C4=6
Vậy ở cột "D" tôi muốn nối chúng lại thành:
1
2
3
4
5
6
Nếu có công thức nào nhờ anh chị và các bạn giúp đở dùm.
Cám ơn.
Tôi nghĩ dữ liệu thật của bạn chắc phải khác với những gì bạn mô tả chứ nhỉ? Nếu không thì chỉ với 2 cột, ta copy/ paste cái rẹt là xong chứ cần gì công thức
 
Cám ơn anh ndu!
Anh đoán đúng rồi đó. Nó không phải là DL bình thường mà nó là 2 cột name động, và em muốn làm thêm cột name nầy nửa để cho vào việc khác hơn nên không thể copy dán được. Anh có thể giúp dùm. cám ơn anh.
 
Lần chỉnh sửa cuối:
Cám ơn anh ndu!
Anh đoán đúng rồi đó. Nó không phải là DL bình thường mà nó là 2 cột name động, và em muốn làm thêm cột name nầy nửa để cho vào việc khác hơn nên không thể copy dán được. Anh có thể giúp dùm. cám ơn anh.
Nếu đã có sự khác biệt so với mô tả thì tốt nhất đưa file lên đi nhé
Hỏi thêm: Bắt buộc dùng công thức hay sao? VBA có được không?
 
Nếu đã có sự khác biệt so với mô tả thì tốt nhất đưa file lên đi nhé
Hỏi thêm: Bắt buộc dùng công thức hay sao? VBA có được không?

Em nghỉ VBA sẽ nhẹ file hơn, nhưng làm sau để khi thêm dử liệu vào cột "B" và cột "C" thì cột "D" vẩn cập nhật được.
 

File đính kèm

  • File VD.xls
    23 KB · Đọc: 14
Em nghỉ VBA sẽ nhẹ file hơn, nhưng làm sau để khi thêm dử liệu vào cột "B" và cột "C" thì cột "D" vẩn cập nhật được.
Làm cho bạn bằng VBA
PHP:
Function JoinMCol(sRng As Range, Pos As Long) As String
  Dim i As Long, j As Long, TmpArr
  TmpArr = sRng.Value
  For j = LBound(TmpArr, 2) To UBound(TmpArr, 2)
    For i = LBound(TmpArr, 1) To UBound(TmpArr, 1)
      If TmpArr(i, j) <> "" Then
        Pos = Pos - 1
        If Pos = 0 Then JoinMCol = TmpArr(i, j): Exit Function
      End If
    Next
  Next
End Function
Tại D2, gõ công thức =JoinMCol($B$2:$C$10000,ROWS($1:1)) rồi kéo fill xuống đến đâu tùy ý
--------------------
Bài này nếu dùng Sub thì chắc chắn sẽ nhẹ nhàng hơn so với dùng Function ---> Tuy nhiên mỗi lần muốn cập nhật phải tốn công chạy lại code
 
Lần chỉnh sửa cuối:
Anh ndu! - không biết sao em dùng công thức =JoinMCol($B$2:$C$10000,ROWS($1:1)) thì bị báo lổi #NAME? ...
 
Xin lổi anh, em quên đoạn VBA phía trên của anh, đã khắc phục rồi. rất cám ơn anh.
 
Có thể dùng công thức:
Đặt name động cho vùng dữ liệu 2 cột B và C là "Dulieu"

Công thức ô đầu tiên (vị trí bất kỳ):

=INDEX(dulieu;MOD((ROW(1:1)-1);ROWS(dulieu))+1;INT((ROW(1:1)-1)/ROWS(dulieu))+1)

Kéo xuống đến khi nào #VALUE thì ngưng. Khi thêm dữ liệu vào thì kéo công thức xuống thêm. (Cũng hễ gặp #VALUE thì ngưng)
 

File đính kèm

  • 2Dto1D.xls
    14 KB · Đọc: 32
Có thể dùng công thức:
Đặt name động cho vùng dữ liệu 2 cột B và C là "Dulieu"

Công thức ô đầu tiên (vị trí bất kỳ):

=INDEX(dulieu;MOD((ROW(1:1)-1);ROWS(dulieu))+1;INT((ROW(1:1)-1)/ROWS(dulieu))+1)

Kéo xuống đến khi nào #VALUE thì ngưng. Khi thêm dữ liệu vào thì kéo công thức xuống thêm. (Cũng hễ gặp #VALUE thì ngưng)
Em cũng có nghĩ qua phương pháp dùng công thức, nhưng e rằng công thức của sư phụ phải cải tiến thêm cho trường hợp dữ liệu có cell rổng nữa mới hoàn thiện được
 
Xin nhờ anh ndu sửa dùm là trong thực tế 2 cột name của em nằm cách nhau một cột name khác mà trong file VD em sai sót điều đó, giờ đem áp dụng không được. em cám ơn
 

File đính kèm

  • File VD2.xls
    34 KB · Đọc: 6
Nếu có ô trống (đặc biệt là 2 cột B và C có số dòng khác nhau), thì dùng công thức gần như là không thể. Khỏi cải tiến.
 
Xin nhờ anh ndu sửa dùm là trong thực tế 2 cột name của em nằm cách nhau một cột name khác mà trong file VD em sai sót điều đó, giờ đem áp dụng không được. em cám ơn
Bởi vậy mới nói bạn đưa dữ liệu thật lên, mất công sửa tới sửa lui
PHP:
Function JoinMCol(sRng As Range, Pos As Long) As String
  Dim i As Long, j As Long, TmpArr, Area As Range
  For Each Area In sRng.Areas
    TmpArr = Area.Value
    For j = LBound(TmpArr, 2) To UBound(TmpArr, 2)
      For i = LBound(TmpArr, 1) To UBound(TmpArr, 1)
        If TmpArr(i, j) <> "" Then
          Pos = Pos - 1
          If Pos = 0 Then JoinMCol = TmpArr(i, j): Exit Function
        End If
      Next
    Next
  Next
End Function
Công thức tại E2
PHP:
=JoinMCol(($B$2:$B$10000,$D$2:$D$10000),ROWS($1:1))
 
Anh ndu! - Nếu áp dụng công thức đó cho dạng số thì lại không format Cells được, phải làm sao?
 
Anh ndu! - Nếu áp dụng công thức đó cho dạng số thì lại không format Cells được, phải làm sao?
Sau này khi hỏi bất cứ vấn đề gì các bạn nên chú ý:
- Cấu trúc dữ liệu của file mà bạn giả lập phải giống y chang với file thật
- Kiểu dữ liệu của file mà bạn giả lập cũng phải giống y chang với file thật

Có vậy sẽ đở mất công cho bạn và mọi người
PHP:
Function JoinMCol(sRng As Range, Pos As Long)
  Dim i As Long, j As Long, TmpArr, Area As Range
  JoinMCol = ""
  For Each Area In sRng.Areas
    TmpArr = Area.Value
    For j = LBound(TmpArr, 2) To UBound(TmpArr, 2)
      For i = LBound(TmpArr, 1) To UBound(TmpArr, 1)
        If TmpArr(i, j) <> "" Then
          Pos = Pos - 1
          If Pos = 0 Then JoinMCol = TmpArr(i, j): Exit Function
        End If
      Next
    Next
  Next
End Function
Nhìn dữ liệu của bạn, tôi cứ đoán rằng KIỂU DỮ LIỆU của bạn đang dùng là dạng chuổi ---> Hic...
 
Có những chuyện không lường hết được đó anh! cám ơn các anh chị và các bạn nhiều.
 
Web KT
Back
Top Bottom