Giúp code nối chuỗi
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
Function NoiChuoi(ByVal RangeInOneRow As Range) As String
Dim Cls As Range
For Each Cls In RangeInOneRow
NoiChuoi = NoiChuoi & Cls
Next
End Function
www.giaiphapexcel.com/diendan/threads/gi%C3%BAp-code-n%E1%BB%91i-chu%E1%BB%97i.96427/
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)
=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:
=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):
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!
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)
chuẩn hok cần chỉnh. Đa tạ sư huynh
Sau bước 3, nếu bạn làm đúng thì nó sẽ bạn sẽ nhận được ( xem Screenshot ):
={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ả 🙂
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.
Mình thì cứ khoái code ngắn ngủn thôi
Function noichuoi(byval rng As Range) As String
noichuoi = Join(Application.Transpose(rng), "")
End Function
www.giaiphapexcel.com/diendan/threads/gi%C3%BAp-code-n%E1%BB%91i-chu%E1%BB%97i.96427/post-604018
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.
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.
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
www.giaiphapexcel.com/diendan/threads/gi%C3%BAp-code-n%E1%BB%91i-chu%E1%BB%97i.96427/post-604376
Sao "phức tạp vụ" vậy bạn, ở bài #2 đã giải quyết được mọi vấn đề rồi!
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:
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
Ờ 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).
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)
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
=noichuoi(A1:A100)
=noichuoi(A1:Z1)
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Bình luận