Giúp code nối chuỗi

Liên hệ QC

congnguyen88

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
22/7/14
Bài viết
356
Được thích
31
mình muốn nối chuổi từ A1:A100 thì phải dùng công thức
[h=3]=CONCATENATE ( a1,a2,...a100) dài quá[/h]
có cách nào không các sư huynh giúp mình với
 
Mã:
Function NoiChuoi(ByVal RangeInOneRow As Range) As String
    Dim Cls As Range
    For Each Cls In RangeInOneRow
        NoiChuoi = NoiChuoi & Cls
    Next
End Function
 
Upvote 0
mình muốn nối chuổi từ A1:A100 thì phải dùng công thức
=CONCATENATE ( a1,a2,...a100) dài quá


có cách nào không các sư huynh giúp mình với

Bạn có thể làm như sau:
Bước 1:

Chọn ô bạn muốn ghi kết quả nối chuỗi
Bước 2:

Nhập vào ô công thức: ( Lưu ý sau khi nhập không bấm nút Enter mà bấm F9)
PHP:
=A1:A100
Bước 3:

Bấm nút F9 trên bàn phím
Bước 4:

Thay dấu "{" bằng "CONCATENATE(" và dấu "}" bằng ")" rồi bấm nút Enter.
Sau bước này bạn sẽ nối được chuỗi với nhau

P.S: nếu bạn cần nối chuỗi và ngăn cách bởi 1 kí tự , ví dụ dấu "," chẳng hạn thì ở bước 2 bạn nhập công thức sau:

PHP:
=A1:A100&","

Ngoài ra bạn có thể dùng VBA như ở câu trả lời thứ nhất và mở rộng nếu bạn muốn ngăn cách các thành phần của chuỗi đã nối bằng kí tự bất kì ( trong tiếng Anh gọi là Delimiter):

PHP:
Function NoiChuoi(ByVal RangeInOneRow As Range, Optional Delimiter As String) As String    
  Dim Cls As Range    
  For Each Cls In RangeInOneRow        
    NoiChuoi = NoiChuoi & Cls & Delimiter    
  Next    
  NoiChuoi = Left(NoiChuoi, Len(NoiChuoi) - 1)
End Function

Chúc thành công!
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể làm như sau:
Bước 1:

Chọn ô bạn muốn ghi kết quả nối chuỗi
Bước 2:

Nhập vào ô công thức: ( Lưu ý sau khi nhập không bấm nút Enter mà bấm F9)
PHP:
=A1:A100
Bước 3:

Bấm nút F9 trên bàn phím
Bước 4:

Thay dấu "{" bằng "CONCATENATE(" và dấu "}" bằng ")" rồi bấm nút Enter.
Sau bước này bạn sẽ nối được chuỗi với nhau

P.S: nếu bạn cần nối chuỗi và ngăn cách bởi 1 kí tự , ví dụ dấu "," chẳng hạn thì ở bước 2 bạn nhập công thức sau:

PHP:
=A1:A100&","

Ngoài ra bạn có thể dùng VBA như ở câu trả lời thứ nhất

Chúc thành công!


Bước 4: nó hiện như thế này Enter báo lỗi bạn ơi

=CONCATENATE(0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0)
 
Upvote 0
Bước 4: nó hiện như thế này Enter báo lỗi bạn ơi

=CONCATENATE(0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0)

Sau bước 3, nếu bạn làm đúng thì nó sẽ bạn sẽ nhận được ( xem Screenshot ):

PHP:
={1;2;3;4;5;6;7;"a";"b";"c";"d";"e";"f";"f";"d";"a"}

Nếu enter báo lỗi bạn có thể thử thay ";" bằng "," hoặc xem lại từ bước đầu tiên

Đây là cách không cần dùng đến VBA, bạn có thể chọn 1 trong 2 cách, cách nào cũng okie cả :)
 
Upvote 0
Bước 4: nó hiện như thế này Enter báo lỗi bạn ơi

=CONCATENATE(0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0)
Báo lỗi có thể do bạn dùng dấu "," để phân cách tham số. Để sửa thì bạn bỏ dấu = đi, bấm enter, chọn ô kết quả, bấm Ctrl-H để thay thế các dấu ; thành , sau đó thêm dấu = đằng trước.
Cũng có thể lỗi do bạn dùng exel 2003 chỉ nối được 30 chuỗi trong khi 2007 nối được 255 chuỗi.
 
Upvote 0
mình muốn nối chuổi từ A1:A100 thì phải dùng công thức
=CONCATENATE ( a1,a2,...a100) dài quá


có cách nào không các sư huynh giúp mình với
Mình thì cứ khoái code ngắn ngủn thôi
PHP:
Function noichuoi(byval rng As Range) As String
noichuoi = Join(Application.Transpose(rng), "")
End Function
 
Upvote 0
Mình thì cứ khoái code ngắn ngủn thôi
PHP:
Function noichuoi(byval rng As Range) As String
noichuoi = Join(Application.Transpose(rng), "")
End Function
Ngắn gọn nhưng cũng phải chính xác nữa chứ anh! Với dữ liệu trên một cột (A1:A10) thì OK, nhưng với dữ liệu trên hàng (A1:G1) thì kết quả là #VALUE! đấy nhé!
 
Upvote 0
Ngắn gọn nhưng cũng phải chính xác nữa chứ anh! Với dữ liệu trên một cột (A1:A10) thì OK, nhưng với dữ liệu trên hàng (A1:G1) thì kết quả là #VALUE! đấy nhé!
Nếu lòi ra lỗi thì vớt thêm 1 bài nữa, ka ka, mau lên sao. Đang đua sao mà lị.
Nhưng mà cũng đang hơi tâm trạng 1 chút nên thôi kệ đi, sai đúng cũng thôi kệ đi.
 
Upvote 0
Thấy bài này quen quá. Hình như mình đã có code một bài tương tự rồi nhưng kiếm không ra.

Code lần nữa. Thay đổi một chút. Bài kia mình code chỉ làm được hoặc dòng hoặc cột. Code mới này làm mọi loại ranges.

Mã:
Function ConcStr(ByVal rg As Range) As String
[COLOR=#008000]' concatenates all strings within a range. Column priority (one row after another)
' ues comma as delimiter
[/COLOR]Const DELIM = ","
Dim rw As Variant
ConcStr = ""
If rg.Columns.Count > 1 Then [COLOR=#008000]' range có nhiều hơn 1 cột[/COLOR]
    For Each rw In rg.Rows
        ConcStr = ConcStr & IIf(Len(ConcStr), DELIM, "") _
                & Join(Application.Transpose(Application.Transpose(rw)), DELIM)
    Next rw
Else [COLOR=#008000]' range chỉ có 1 cột[/COLOR]
    If rg.Rows.Count > 1 Then [COLOR=#008000]' cột có nhiều hơn 1 dòng[/COLOR]
        ConcStr = Join(Application.Transpose(rg), DELIM)
    Else [COLOR=#008000]' đơn độc 1 cell[/COLOR]
        ConcStr = rg.Cells(1, 1)
    End If
End If
End Function
 
Upvote 0
Thấy bài này quen quá. Hình như mình đã có code một bài tương tự rồi nhưng kiếm không ra.

Code lần nữa. Thay đổi một chút. Bài kia mình code chỉ làm được hoặc dòng hoặc cột. Code mới này làm mọi loại ranges.

Mã:
Function ConcStr(ByVal rg As Range) As String
[COLOR=#008000]' concatenates all strings within a range. Column priority (one row after another)
' ues comma as delimiter
[/COLOR]Const DELIM = ","
Dim rw As Variant
ConcStr = ""
If rg.Columns.Count > 1 Then [COLOR=#008000]' range có nhiều hơn 1 cột[/COLOR]
    For Each rw In rg.Rows
        ConcStr = ConcStr & IIf(Len(ConcStr), DELIM, "") _
                & Join(Application.Transpose(Application.Transpose(rw)), DELIM)
    Next rw
Else [COLOR=#008000]' range chỉ có 1 cột[/COLOR]
    If rg.Rows.Count > 1 Then [COLOR=#008000]' cột có nhiều hơn 1 dòng[/COLOR]
        ConcStr = Join(Application.Transpose(rg), DELIM)
    Else [COLOR=#008000]' đơn độc 1 cell[/COLOR]
        ConcStr = rg.Cells(1, 1)
    End If
End If
End Function
Sao "phức tạp vụ" vậy bạn, ở bài #2 đã giải quyết được mọi vấn đề rồi!

http://www.giaiphapexcel.com/forum/showthread.php?96427-Giúp-code-nối-chuỗi&p=603996#post603996

Hoặc nếu chọn Range cách quãng kiểu:

=NoiChuoi(A1:C1,A5,A2:C2)

Thì dùng Hàm dưới đây:

Mã:
Function NoiChuoi(ParamArray AllRange()) As String
    Dim ArrItm, Itm
    For Each ArrItm In AllRange
        If Not IsArray(ArrItm) Then
            ArrItm = Array(ArrItm)
        End If
        For Each Itm In ArrItm
            NoiChuoi = NoiChuoi & Itm
        Next
    Next
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Ờ bài #2 đầy đủ rồi.
Đúng là mình phức tạp thiệt. Lỗi tại cái thói quen giảm thiểu con toán cộng chuỗi (lý do cá nhân thôi).
 
Upvote 0
Em thấy hàm nay hay quá ạ, nhưng có vấn đề là lấy luôn ô trống, bỏ ô trống luôn dùm e đc không
 
Upvote 0
Em thấy hàm nay hay quá ạ, nhưng có vấn đề là lấy luôn ô trống, bỏ ô trống luôn dùm e đc không
Code này dùng cho vùng chọn là 1 cột nhiều dòng, hoặc 1 dòng nhiều cột nhé
=noichuoi(A1:A100)
=noichuoi(A1:Z1)
PHP:
Option Explicit
Private Function noichuoi(ByVal rng As Range)
With Application
    If rng.Columns.Count > 1 And rng.Rows.Count > 1 Then
        noichuoi = "Chon lai vung 1 dong hoac 1 cot!"
        Exit Function
    ElseIf rng.Columns.Count > 1 Then
        noichuoi = Join(.Transpose(.Transpose(rng.Value)), "") ' vung co 1 dong nhieu cot
    Else
        noichuoi = Join(.Transpose(rng.Value), "") ' vung co 1 cot nhieu dong
    End If
End With
End Function
 
Upvote 0
Kính nhờ các anh/chị giúp em sub nối các ô lần lượt từ A1 đến A9 với B1 đến B9 và ngăn cách nhau bởi dấu ",", cho kết quả nối vào ô C1 và sắp xếp từ nhỏ đến lớn với ạ. Em chân thành cảm ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom