Nối dữ liệu text ở nhiều ô thành một ô duy nhất (với số lượng nhiều)

Liên hệ QC

ngocrin1

Thành viên chính thức
Tham gia
9/5/09
Bài viết
55
Được thích
10
Tình hình là mình cần nối dữ liệu text ở nhiều ô (dạng cột) thành một ô duy nhất. Bình thường thì thường hay dùng công thức "&". Ví dụ: A1=A; A2=B --> A3= AB = "A"&"B" nhưng thực tế thì dữ liệu của mình ở đây có tới hơn 300 ô nếu mà làm như vậy thì mất rất nhiều thời gian. Không biết bạn nào có cách làm nhanh hơn ko chỉ mình với? Cảm ơn!**~**
 

File đính kèm

Code ấy thuộc về thời "xa xưa" rồi
Sau này tôi đã hoàn thiện nó như sau:
PHP:
Function JoinText(ByVal sArray, ByVal Sep As String, Optional IgnoreBlanks As Boolean = True) As String
  Dim TmpArr, Arr(), Item, n As Long
  On Error Resume Next
  TmpArr = sArray
  If TypeName(TmpArr) <> "Variant()" Then
    JoinText = TmpArr
  Else
    For Each Item In TmpArr
      If IgnoreBlanks = False Or Len(Trim(CStr(Item))) > 0 Then
        n = n + 1
        ReDim Preserve Arr(1 To n)
        Arr(n) = CStr(Item)
      End If
    Next
    JoinText = Join(Arr, Sep)
  End If
End Function
Code hoạt động được trên Range, mảng 1 chiều, mảng 2 chiều, thậm chí là mảng do công thức trả về đều chơi tuốt
Optional IgnoreBlanks cho phép khi nối chuổi có lấy luôn phần tử rổng hay không (mặc định sẽ không lấy giá trị rổng)
 
Tình hình là mình cần nối dữ liệu text ở nhiều ô (dạng cột) thành một ô duy nhất. Bình thường thì thường hay dùng công thức "&". Ví dụ: A1=A; A2=B --> A3= AB = "A"&"B" nhưng thực tế thì dữ liệu của mình ở đây có tới hơn 300 ô nếu mà làm như vậy thì mất rất nhiều thời gian. Không biết bạn nào có cách làm nhanh hơn ko chỉ mình với? Cảm ơn!**~**
Hổng biết EX.2003 trong 1 ô chứa được bi nhiêu ký tự, làm thí Hàm "Củ chuối" này thử xem.
Gõ: = GPE(Vùng muốn nối chuỗi)
Hên xui! Vì Gửi bài rồi mới đọc được bài của Ndu...
 

File đính kèm

Hổng biết EX.2003 trong 1 ô chứa được bi nhiêu ký tự, làm thí Hàm "Củ chuối" này thử xem.
Gõ: = GPE(Vùng muốn nối chuỗi)
Hên xui! Vì Gửi bài rồi mới đọc được bài của Ndu...
Ba Tê cố lên! Bạn nghiên cứu VBA là điều đáng mừng
Chỉ góp ý vài điểm:
1> Thay vì viết Public Function GPE(Rngs As Range) As String hãy cố gắng viết thành Public Function GPE(byVal Rngs As Range) As String ---> Tạm thời đừng hỏi tại sao, mai này gặp trường hợp đặc biệt tự nhiên sẽ biết, vì ngoài ByVal còn có ByRef, 2 cái khác nhau (gọi là thói quen tốt)
2> For Each Clls In Rngs là duyệt từng cell trong Rngs ---> Mọi hoạt động tính toán trực tiếp trên Range đều cho tốc độ chậm ---> Có điều kiện Ba Tê cố gắng nghiên cứu theo hướng xử lý mảng đi ---> Tốc độ cực nhanh
 
Giải thích dùm luôn ByValByRef
ByVal
là truyền tham trị nó chỉ truyền giá trị vào hàm thôi sau khi kết thúc hàm thì giá trị của nó vẫn không thay đổi
ByRef
là truyền tham biến nó truyền địa chỉ của biến vào trong hàm và nếu trong hàm có sự thay đổi gì thì nó cũng thay đổi theo
Ví dụ
PHP:
 Dim n As Integer
      Sub goi()
      n = 10
      Call thamtri(n)
       MsgBox ("tham tri" & n)
       Call thambien(n)
         MsgBox ("tham bien" & n)
End Sub

Sub thamtri(ByVal n As Integer)
      n = n + 1
End Sub
Sub thambien(ByRef n As Integer)
      n = n + 1
End Sub
 
Lần chỉnh sửa cuối:
Một cách chuôi chuối (chuối chà bột, cũng thơm thơm):

Copy tất cả các ô vào word
Nếu là dạng table, thì convert to text (nhấn 1 phát)
Nhấn Ctrl H
Find what = ^p
Replace with gõ ; hoặc bất kỳ thứ gì mình muốn
Nhấn Replace All
Copy paste trở lại vào Excel.

Tính ra chừng 5 - 7 giây.
 
Cảm ơn các bạn nhiều lắm! Mình đã làm được theo cách của bạn Ptm0412.

Function JoinText(ByVal sArray, ByVal Sep As String, Optional IgnoreBlanks As Boolean = True) As String
Dim TmpArr
, Arr(), Item, n As
Long
On Error Resume Next
TmpArr
=
sArray
If TypeName(TmpArr) <> "Variant()"
Then
JoinText
=
TmpArr
Else
For
Each Item In TmpArr
If IgnoreBlanks = False Or Len(Trim(CStr(Item))) >
0 Then
n
= n +
1
ReDim Preserve Arr
(1 To n
)
Arr(n) = CStr(Item
)
End
If
Next
JoinText
= Join(Arr, Sep
)
End
If
End
Function

Còn cách của bạn ndu96081631 thì làm sao mà mình có thể chạy được vậy? mình ko rành về VBA. Hix...
 

File đính kèm

em có bài này mong cái anh chị giúp đỡ, nội dung e gửi kèm trong excel
Bài đã được tự động gộp:

Cho code trên vào 1 Module rồi gõ hàm bình thường thôi
Xem file
Chú ý: Phải Enable Macros thì hàm mới chạy được
e có cái này mong anh giúp đỡ
 

File đính kèm

Web KT

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

Back
Top Bottom