PDA

View Full Version : Nối nhiều chuỗi trong excel



HAiNV
05-05-10, 10:41 AM
Chào các bác!
Em có vấn đề này nhờ các bác giúp đỡ:
* Nội dung text trong ô A1 là: "- Công ty TNHH Tân Mai"
B1 là: "- Công ty TNHH Trường An"
C1 là: "- Công ty TNHH XD & TM Nguyên Vi"
* Em muốn nối cả 3 text trên A1, B1, C1 và chứa vào ô D1 (có dấu ngắt xuống dòng, như mình ấn Alt + Enter khi nhập chuỗi trong excel ấy), để được ô D1:
- Công ty TNHH Tân Mai ' dòng 1
- Công ty TNHH Trường An 'dòng 2
- Công ty TNHH XD & TM Nguyên Vi ' dòng 3
Nhờ các bác giải quyết giúp em với!
Em cảm ơn các bác trước!

Hai Lúa Miền Tây
05-05-10, 10:48 AM
Chào các bác!
Em có vấn đề này nhờ các bác giúp đỡ:
* Nội dung text trong ô A1 là: "- Công ty TNHH Tân Mai"
B1 là: "- Công ty TNHH Trường An"
C1 là: "- Công ty TNHH XD & TM Nguyên Vi"
* Em muốn nối cả 3 text trên A1, B1, C1 và chứa vào ô D1 (có dấu ngắt xuống dòng, như mình ấn Alt + Enter khi nhập chuỗi trong excel ấy), để được ô D1:
- Công ty TNHH Tân Mai ' dòng 1
- Công ty TNHH Trường An 'dòng 2
- Công ty TNHH XD & TM Nguyên Vi ' dòng 3
Nhờ các bác giải quyết giúp em với!
Em cảm ơn các bác trước!
Dùng hàm sau
D1=A1&CHAR(10)&B1&CHAR(10)&C1 --> Sau đó kéo xuống.
Nhớ chiọn Wrap Text nhé

BNTT
05-05-10, 10:49 AM
Chào các bác!
Em có vấn đề này nhờ các bác giúp đỡ:
* Nội dung text trong ô A1 là: "- Công ty TNHH Tân Mai"
B1 là: "- Công ty TNHH Trường An"
C1 là: "- Công ty TNHH XD & TM Nguyên Vi"
* Em muốn nối cả 3 text trên A1, B1, C1 và chứa vào ô D1 (có dấu ngắt xuống dòng, như mình ấn Alt + Enter khi nhập chuỗi trong excel ấy), để được ô D1:
- Công ty TNHH Tân Mai ' dòng 1
- Công ty TNHH Trường An 'dòng 2
- Công ty TNHH XD & TM Nguyên Vi ' dòng 3
Nhờ các bác giải quyết giúp em với!
Em cảm ơn các bác trước!
Có 2 cách đơn giản:

=A1 & CHAR(10) & B1 & CHAR(10) & C1

=CONCATENATE(A1, CHAR(10), B1, CHAR(10), C1)
Tuy nhiên, tại ô nhập công thức, bạn phải đánh dấu vào tùy chọn Wrap Text cho thuộc tính của ô (xem hình) thì mới có được kết quả như mong muốn.

http://www.giaiphapexcel.com/forum/attachment.php?attachmentid=45476

nghiaphuc
05-05-10, 10:52 AM
Chào các bác!
Em có vấn đề này nhờ các bác giúp đỡ:
* Nội dung text trong ô A1 là: "- Công ty TNHH Tân Mai"
B1 là: "- Công ty TNHH Trường An"
C1 là: "- Công ty TNHH XD & TM Nguyên Vi"
* Em muốn nối cả 3 text trên A1, B1, C1 và chứa vào ô D1 (có dấu ngắt xuống dòng, như mình ấn Alt + Enter khi nhập chuỗi trong excel ấy), để được ô D1:
- Công ty TNHH Tân Mai ' dòng 1
- Công ty TNHH Trường An 'dòng 2
- Công ty TNHH XD & TM Nguyên Vi ' dòng 3
Nhờ các bác giải quyết giúp em với!
Em cảm ơn các bác trước!
Trước hết, bạn chọn ô D1, chọn Format\Cells\Alignment và đánh dấu tick tại vị trí Wrap text --> OK.
Sau đó bạn nhập cho D1 công thức sau:=A1&CHAR(10)&B1&CHAR(10)&C1
+-+-+-+Lúc gõ trả lời thì chưa thấy gì, đến hồi gửi trả lời thì thấy tới mấy bài trả lời trước rồi... ẹc ẹc

trunghtpco
05-05-10, 10:56 AM
Trong ví dụ trên chỉ có 3 ô cần nối là Á, B1 và C1, có cách nào để nếu dữ liệu nhiều hơn mà mình không cần phải gõ công thức quá dài không mấy bac.

BNTT
05-05-10, 10:58 AM
Trong ví dụ trên chỉ có 3 ô cần nối là Á, B1 và C1, có cách nào để nếu dữ liệu nhiều hơn mà mình không cần phải gõ công thức quá dài không mấy bac.
Có chớ. Chả cần gõ công thức nữa kìa.
Viết một cái code VBA, dùng vòng lặp nối hết chúng lại với nhau...
Đặt cho cái code đó một cái nút nhấn hoặc một cái phím tắt, rồi nhấn một cái, xong...

ndu96081631
05-05-10, 11:08 AM
Có chớ. Chả cần gõ công thức nữa kìa.
Viết một cái code VBA, dùng vòng lặp nối hết chúng lại với nhau...
Đặt cho cái code đó một cái nút nhấn hoặc một cái phím tắt, rồi nhấn một cái, xong...
Với dữ liệu gốc nằm cùng 1 dòng hoặc cùng 1 cột thì chẳng cần vòng lập nào cũng viết được
Ai thử sức xem (viết hẳn thành 1 Function nha)

dat_butmuc
05-05-10, 11:13 AM
Trong ví dụ trên chỉ có 3 ô cần nối là Á, B1 và C1, có cách nào để nếu dữ liệu nhiều hơn mà mình không cần phải gõ công thức quá dài không mấy bac.

Bạn xem file đính kèm có được không?

Hai Lúa Miền Tây
05-05-10, 11:35 AM
Với dữ liệu gốc nằm cùng 1 dòng hoặc cùng 1 cột thì chẳng cần vòng lập nào cũng viết được
Ai thử sức xem (viết hẳn thành 1 Function nha)

Thử dùng hàm sau Thầy à

Function JoinText(ByVal Cells As Range) As String

JoinText = Join(WorksheetFunction.Transpose(Cells.Value), Chr(10))

End Function

ndu96081631
05-05-10, 12:22 PM
Thử dùng hàm sau Thầy à

Function JoinText(ByVal Cells As Range) As String

JoinText = Join(WorksheetFunction.Transpose(Cells.Value), Chr(10))

End Function

Code trên chỉ đúng nếu dữ liệu nằm cùng 1 cột... Còn nếu dữ liệu nằm cùng 1 dòng thì sao?
Nói chung, UDF phải có tính tổng quát, dữ liệu nguồn được bố trí cùng dòng hay cùng cột đều xài được
Tôi đề xuất cái này:


Function JoinText(ByVal SrcText, ByVal Sep As String)
Dim Temp
On Error GoTo Stp1
With WorksheetFunction
Temp = .Transpose(SrcText)
GoTo Stp2
Stp1:
Temp = .Transpose(.Transpose(SrcText))
Stp2:
JoinText = Join(Temp, Sep)
End With
End Function
Lưu ý: Biến SrcText tôi không khai báo dạng Range, vì thế dù dữ liệu nguồn là Range hay Array cũng xài được

Hai Lúa Miền Tây
05-05-10, 12:35 PM
Code trên chỉ đúng nếu dữ liệu nằm cùng 1 cột... Còn nếu dữ liệu nằm cùng 1 dòng thì sao?
Nói chung, UDF phải có tính tổng quát, dữ liệu nguồn được bố trí cùng dòng hay cùng cột đều xài được
Tôi đề xuất cái này:


Function JoinText(ByVal SrcText, ByVal Sep As String)
Dim Temp
On Error GoTo Stp1
With WorksheetFunction
Temp = .Transpose(SrcText)
GoTo Stp2
Stp1:
Temp = .Transpose(.Transpose(SrcText))
Stp2:
JoinText = Join(Temp, Sep)
End With
End FunctionLưu ý: Biến SrcText tôi không khai báo dạng Range, vì thế dù dữ liệu nguồn là Range hay Array cũng xài được

Còn 1 điểm cần cải thiện là không nên gộp những cell rỗng Thầy à.

BNTT
05-05-10, 12:35 PM
@ Anh Ndu, đằng nào thì cũng là nối các giá trị theo từng hàng, vậy sao mình không đưa luôn cái dấu ngắt dòng vào trong hàm, thay vì dùng biến?
Em nghĩ, nếu đưa vào trong hàm luôn thì chỉ cần gõ tên hàm rồi dùng chuột quét khối ô cần nối lại với nhau, vậy có phải nhanh và tiện hơn không?

Function JoinText(ByVal SrcText)
Dim Temp
On Error GoTo Stp1
With WorksheetFunction
Temp = .Transpose(SrcText)
GoTo Stp2
Stp1:
Temp = .Transpose(.Transpose(SrcText))
Stp2:
JoinText = Join(Temp, Chr(10))
End With
End Function

ndu96081631
05-05-10, 12:39 PM
Còn 1 điểm cần cải thiện là không nên gộp những cell rỗng Thầy à.
Nếu tính đến vụ cell rỗng này thì ta lại quay về vòng lập For mất rồi ---> Vì thế thay vì sửa lại hàm tôi đề xuất chúng ta nên bố trí lại dữ liệu không có cell rổng ---> Mục đích giúp cho UDF của chúng ta đở "cực khổ"

@ Anh Ndu, đằng nào thì cũng là nối các giá trị theo từng hàng, vậy sao mình không đưa luôn cái dấu ngắt dòng vào trong hàm, thay vì dùng biến?
Em nghĩ, nếu đưa vào trong hàm luôn thì chỉ cần gõ tên hàm rồi dùng chuột quét khối ô cần nối lại với nhau, vậy có phải nhanh và tiện hơn không?

Vấn đề nằm ở chổ hàm này phải mang tính tổng quát ---> Người khác muốn nối chuổi bằng 1 dấu phân cách khác thì sao?
Vậy thì ta đưa biến Sep vào cho người dùng tự quyết định

BNTT
05-05-10, 12:52 PM
Nếu tính đến vụ cell rỗng này thì ta lại quay về vòng lập For mất rồi ---> Vì thế thay vì sửa lại hàm tôi đề xuất chúng ta nên bố trí lại dữ liệu không có cell rổng ---> Mục đích giúp cho UDF của chúng ta đở "cực khổ"

Vấn đề nằm ở chổ hàm này phải mang tính tổng quát ---> Người khác muốn nối chuổi bằng 1 dấu phân cách khác thì sao?
Vậy thì ta đưa biến Sep vào cho người dùng tự quyết định
Hai cái câu em tô màu đỏ hình như nó.. choảng nhau, anh ơi...
Nếu nói như anh, hì hì, muốn "tổng quát" thì sao lại sợ "cực khổ"?

concogia
05-05-10, 12:53 PM
Bạn xem file đính kèm có được không?

Function JoinText(Range As Range, Sep As String) As String
Dim Clls As Range, Tmp As String
For Each Clls In Range
Tmp = Tmp & "-" & Clls.Value
Next Clls
JoinText = Replace(WorksheetFunction.Trim(Tmp), "-", Sep)
End Function
Trong VBA hình như cũng có "chim" mà sao lại WorksheetFunction.....nhỉ
Híc

BNTT
05-05-10, 12:56 PM
Function JoinText(Range As Range, Sep As String) As String
Dim Clls As Range, Tmp As String
For Each Clls In Range
Tmp = Tmp & "-" & Clls.Value
Next Clls
JoinText = Replace(WorksheetFunction.Trim(Tmp), "-", Sep)
End Function
Trong VBA hình như cũng có "chim" mà sao lại WorksheetFunction.....nhỉ
Híc
Ẹc, bác cò ơi bác cò, lâu nay hăm chọt bác mà chưa có dịp...
"Chim" của Excel (WorksheetFunction) và "Chim" của VBA hỏng có giống nhau đâu à nghen. Không tin, "sờ" thử coi!

ndu96081631
05-05-10, 01:01 PM
Hai cái câu em tô màu đỏ hình như nó.. choảng nhau, anh ơi...
Nếu nói như anh, hì hì, muốn "tổng quát" thì sao lại sợ "cực khổ"?
2 chuyện khác nhau mà Tường!
"cực khổ" ở đây là tôi muốn nói đến "tốc độ" làm việc cơ
Còn nếu muốn đở mất công (cho riêng bài này) thì:


Function JoinText(ByVal SrcText, Optional Sep As String = vbLf)
Dim Temp
On Error GoTo Stp1
With WorksheetFunction
Temp = .Transpose(SrcText)
GoTo Stp2
Stp1:
Temp = .Transpose(.Transpose(SrcText))
Stp2:
JoinText = Join(Temp, Sep)
End With
End FunctionKhi ấy, nếu bỏ qua biến Sep thì xem như là ta đang nối chuổi bằng dấu ngắt dòng


Function JoinText(Range As Range, Sep As String) As String
Dim Clls As Range, Tmp As String
For Each Clls In Range
Tmp = Tmp & "-" & Clls.Value
Next Clls
JoinText = Replace(WorksheetFunction.Trim(Tmp), "-", Sep)
End FunctionTrong VBA hình như cũng có "chim" mà sao lại WorksheetFunction.....nhỉ
Híc
Hàm "chim" trong VBA chỉ loại bỏ khoảng trắng 2 đầu chuổi thôi anh à (khúc giữa nó cóc chơi)

BNTT
05-05-10, 01:03 PM
@ Anh Ndu, anh hiểu sai ý em rồi.
Ý em hỏng phải là đưa cái Chr(10) vào, mà ý em là "xơi tái" luôn mấy cái cell rỗng cơ!



... Hàm "chim" trong VBA chỉ loại bỏ khoảng trắng 2 đầu chuổi thôi anh à (khúc giữa nó có chơi)
Câu này phải nói vầy mới chính xác: "Khúc giữa nó ứ chơi"...

concogia
05-05-10, 01:09 PM
Ẹc, bác cò ơi bác cò, lâu nay hăm chọt bác mà chưa có dịp...
"Chim" của Excel (WorksheetFunction) và "Chim" của VBA hỏng có giống nhau đâu à nghen. Không tin, "sờ" thử coi!
Thầy ơi, theo mình bạn í muốn loại cái chỗ ni:
Tmp = Tmp & "-" & Clls.Value
Thì dùng "chim" trong VBA là được mà Thầy, nếu viết khác đi : Trim(replace.....) có đúng không Thầy?
Híc, học hoài mà vẫn chưa thông

ndu96081631
05-05-10, 01:43 PM
@ Anh Ndu, anh hiểu sai ý em rồi.
Ý em hỏng phải là đưa cái Chr(10) vào, mà ý em là "xơi tái" luôn mấy cái cell rỗng cơ!

Vậy mình đưa ra các dữ kiện thế này:
- Dữ liệu được bố trí cùng dòng hoặc cùng cột
- Trong vùng dữ liệu có thể có cell rỗng
Yêu cầu:
- Dùng VBA nối các cell lại với nhau bằng 1 dấu phân cách nào đó nhưng bỏ qua các cell rỗng
- Code VBA không dùng vòng lập
------------------------------------
Tôi chưa làm nhưng vẫn có cảm giác rằng sẽ xử lý được đấy (đang có ý tưởng)
Các bạn thử xem!

ThuNghi
05-05-10, 02:01 PM
Vậy mình đưa ra các dữ kiện thế này:
- Dữ liệu được bố trí cùng dòng hoặc cùng cột
- Trong vùng dữ liệu có thể có cell rỗng
Yêu cầu:
- Dùng VBA nối các cell lại với nhau bằng 1 dấu phân cách nào đó nhưng bỏ qua các cell rỗng
- Code VBA không dùng vòng lập
------------------------------------

Dùng cáh củ chuối xem sao.
Vậy mình dùng replace 2 lần
- Thay chr(10) = " "
- Dùng worksheetFunction.Trim
- Thay " =chr(10)

Function JoinText(ByVal SrcText)
Dim Temp
On Error GoTo Stp1
With WorksheetFunction
Temp = .Transpose(SrcText)
GoTo Stp2
Stp1:
Temp = .Transpose(.Transpose(SrcText))
Stp2:
JoinText = Join(Temp, Chr(10))
End With
JoinText = Replace(JoinText, Chr(10), " ")
JoinText = WorksheetFunction.Trim(JoinText)
JoinText = Replace(JoinText, " ", Chr(10))
End Function

Hai Lúa Miền Tây
05-05-10, 02:05 PM
Dùng cáh củ chuối xem sao.
Vậy mình dùng replace 2 lần
- Thay chr(10) = " "
- Dùng worksheetFunction.Trim
- Thay " =chr(10)

Function JoinText(ByVal SrcText)
Dim Temp
On Error GoTo Stp1
With WorksheetFunction
Temp = .Transpose(SrcText)
GoTo Stp2
Stp1:
Temp = .Transpose(.Transpose(SrcText))
Stp2:
JoinText = Join(Temp, Chr(10))
End With
JoinText = Replace(JoinText, Chr(10), " ")
JoinText = WorksheetFunction.Trim(JoinText)
JoinText = Replace(JoinText, " ", Chr(10))
End Function
Nó sẽ xuống dòng tất cả những khoản trắng anh à

ThuNghi
05-05-10, 02:16 PM
Nó sẽ xuống dòng tất cả những khoản trắng anh à
Thấy nó bỏ các khoản trắng mà. Chắc chưa kéo độ cáo của cell lại.

ndu96081631
05-05-10, 03:17 PM
Dùng cáh củ chuối xem sao.
Vậy mình dùng replace 2 lần
- Thay chr(10) = " "
- Dùng worksheetFunction.Trim
- Thay " =chr(10)

Function JoinText(ByVal SrcText)
Dim Temp
On Error GoTo Stp1
With WorksheetFunction
Temp = .Transpose(SrcText)
GoTo Stp2
Stp1:
Temp = .Transpose(.Transpose(SrcText))
Stp2:
JoinText = Join(Temp, Chr(10))
End With
JoinText = Replace(JoinText, Chr(10), " ")
JoinText = WorksheetFunction.Trim(JoinText)
JoinText = Replace(JoinText, " ", Chr(10))
End Function
Nếu 1 cell chỉ chứa 1 từ đơn thì OK
Nếu cell chứa tên 1 người thì sao? Tức bản thân dữ liệu cell ấy cũng có khoảng trắng
Ví dụ:
A1 = Trần Thanh
A2 Rỗng
A3 = Nguyễn Vũ
---------
Bài này đã từng làm rồi, đại khái ta sẽ:
- Thay khoảng trắng thành gì gì đó trước
- Thay Chr(10) thành khoảng trắng
- TRIM để cắt bỏ khoảng trắng thừa
- Thay khoảng trắng thành Chr(10)
- Thay gì gì đó thành khoảng trắng

vidangtinhyeu99
07-06-11, 11:52 AM
Nhờ các anh chị giúp em với khi em nối nhiều text ở các cell đến vài ngàn ký tự là nó bị mất một số nội dung ở các cell cuối cùng. Vậy có cách nào không. Xin chân thành cảm ơn sự quan tâm giúp đỡ. dùng hàm đã cho cũng không được

vodoi2x
07-06-11, 01:10 PM
Nếu 1 cell chỉ chứa 1 từ đơn thì OK

- Thay khoảng trắng thành gì gì đó trước


gì gì đó là gì, chắc nên thành thành - Dấu xuống dòng?

ndu96081631
07-06-11, 01:12 PM
gì gì đó là gì, chắc nên thành thành - Dấu xuống dòng?
Gì gì đó là bất cứ text nào, miễn sao bảo đảm nó không trùng với Text có sẳn ---> Thường thì tôi sẽ dùng các ký tự đặc biệt, chẳng hạn là vbBack

vidangtinhyeu99
08-06-11, 12:08 PM
Nhờ các anh chị giúp em với khi em nối nhiều text ở các cell đến vài ngàn ký tự là nó bị mất một số nội dung ở các cell cuối cùng. Vậy có cách nào không. Xin chân thành cảm ơn sự quan tâm giúp đỡ. dùng hàm đã cho cũng không được

oh Vậy có cách nào không. Xin chân thành cảm ơn sự quan tâm giúp đỡ. dùng hàm đã cho cũng không được

Do Trong Hien
08-06-11, 01:04 PM
Seo em mần hoài giống như các Bác chỉ trỏ mà nó cứ ra #Name? hoài là sao vậy ta? Hic! Bác nào mần hoàn chỉnh thì tải file lên cho cả nhà ngắm đi

bobo2009
04-08-11, 02:43 PM
cho hỏi để nối 2 ô 1 ô là text 1 ô là ngày tháng năm thì phải làm sao

Hai Lúa Miền Tây
04-08-11, 03:21 PM
cho hỏi để nối 2 ô 1 ô là text 1 ô là ngày tháng năm thì phải làm sao

Kết hợp hàm Text với dấu &

Ví dụ A1 là ngày 15/06/1977
A2 là 34

Công thức sẽ là:


=Text(A1,"dd/mm/yyyy") & " " & A2

bebo021999
04-08-11, 03:31 PM
cho hỏi để nối 2 ô 1 ô là text 1 ô là ngày tháng năm thì phải làm sao
Chào người anh em,
Nếu A1 chứa chuỗi, A2 chứa ngày tháng, tại A3 người anh em oánh vô:
=A1&TEXT(A2,"dd/mm/yyyy") Tùy chọn kiểu ngày nhé.
Chúc người anh em thành công.

TVAG
03-10-12, 09:04 PM
Nó sẽ xuống dòng tất cả những khoản trắng anh à
Sao code không chạy vậy bạn

TVAG
03-10-12, 09:05 PM
Code không Chạy được

chickenlove258
09-01-13, 01:17 AM
Xin Chao Các Bạn, Mình gặp vấn đề giống bạn chủ topic, nhưng mình cần khi nối thành 1 cell với phân biệt là kí tự Char(10), thì định dạng Font cũng như size của text giữ nguyên như cell ban đầu. Điều này các Bạn giúp dùm...Thanks

vst1986
13-04-13, 05:27 PM
Trong ví dụ trên chỉ có 3 ô cần nối là Á, B1 và C1, có cách nào để nếu dữ liệu nhiều hơn mà mình không cần phải gõ công thức quá dài không mấy bac.

Cái này có thể viết hàm trong VBA để nối các ô trong 1 vùng chọn.Có thể nối dữ liệu ở 1 hàng hoặc 1 cột hoặc 1 vùng gồm cả hàng cả cột.

namkpac
19-05-13, 04:45 PM
nhờ mọi người giúp đỡ code vba nối dữ liệu trong 2 cell.

nghiaphuc
19-05-13, 10:04 PM
nhờ mọi người giúp đỡ code vba nối dữ liệu trong 2 cell.
VBA thì nó như thế này:
Sub NoiDuLieu()
Dim Tmp, Arr(), i As Long
Application.EnableEvents = False
Tmp = Sheet1.[F6:H1000]
ReDim Arr(1 To UBound(Tmp), 1 To 1)
For i = 1 To UBound(Tmp)
If Tmp(i, 1) > 0 Then Arr(i, 1) = Tmp(i, 2) & Tmp(i, 3)
Next
Sheet1.[D6].Resize(UBound(Tmp)) = Arr
Application.EnableEvents = True
End Sub
Trong code trên, 2 câu lệnh Application.EnableEvents = False và Application.EnableEvents = True nhằm tránh đụng chạm với Sub Worksheet_Change cho Sheet1 của bạn. Mà cái Sub Worksheet_Change của bạn có vấn đề, ai lại đi khai báo biến khơi khơi như vậy, nếu nằm ở dòng riêng thì tên biến phải đi sau từ khóa Dim, còn nếu không muốn Dim thì đưa nó lên dòng trên (đã có Dim) và phân cách bởi dấu phẩy với các biến phía trước.

namkpac
21-05-13, 12:12 PM
Em cảm ơn, em đã sửa lại code nhưng vấn đề là nếu cột F = 1 thì nối 2 chuỗi ký tự ở cột G và H không thì thoát. code anh chỉ em thêm vào chạy rồi và em sửa 1 xíu là tmp(i, 1) = 1 thay vì >1. thanks a nhiều

namkpac
31-05-13, 10:47 AM
VBA thì nó như thế này:
Sub NoiDuLieu()
Dim Tmp, Arr(), i As Long
Application.EnableEvents = False
Tmp = Sheet1.[F6:H1000]
ReDim Arr(1 To UBound(Tmp), 1 To 1)
For i = 1 To UBound(Tmp)
If Tmp(i, 1) > 0 Then Arr(i, 1) = Tmp(i, 2) & Tmp(i, 3)
Next
Sheet1.[D6].Resize(UBound(Tmp)) = Arr
Application.EnableEvents = True
End Sub
Trong code trên, 2 câu lệnh Application.EnableEvents = False và Application.EnableEvents = True nhằm tránh đụng chạm với Sub Worksheet_Change cho Sheet1 của bạn. Mà cái Sub Worksheet_Change của bạn có vấn đề, ai lại đi khai báo biến khơi khơi như vậy, nếu nằm ở dòng riêng thì tên biến phải đi sau từ khóa Dim, còn nếu không muốn Dim thì đưa nó lên dòng trên (đã có Dim) và phân cách bởi dấu phẩy với các biến phía trước.

xem giúp em đoạn code này với, ko biết nó sai chỗ nào nhưng em thử trên 1 file khác thì nó nối 2 chuỗi ok.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range, Rng As Range
If Target.Column <> 3 And Target.Column <> 10 And Target.Column <> 23 Then Exit Sub
For Each Cll In Intersect(Target, [C:C,J:J])
If Cll = "" Then
Cll.Offset(, IIf(Cll.Column = 3, -2, -1)).ClearContents
Cll.Offset(, IIf(Cll.Column = 23, -2, 0)).ClearContents
Else
If Cll.Column = 3 Then
Cll.Offset(, -1) = UCase(Left(Target, 2))
End If
'If Len(Cll.Offset(, -1)) < 1 Then Exit Sub
If Cll.Offset(, -1) = "PT" Then
Cll.Offset(, -2) = 3
ElseIf Cll.Offset(, -1) = "CT" Then
Cll.Offset(, -2) = 1
ElseIf Cll.Offset(, -1) = "GR" Then
Cll.Offset(, -2) = 2
ElseIf Cll.Offset(, -1) = "TT" Then
Cll.Offset(, -2) = 4
ElseIf Cll.Offset(, -1) = "PC" Then
Cll.Offset(, -2) = 9
End If
If Cll.Column = 10 Then
Set Rng = K02.[A:A].Find(Cll, LookAt:=xlWhole)
If Rng Is Nothing Then
Cll.Offset(, 12).ClearContents
Else
Cll.Offset(, 12) = Rng.Offset(, 2)
End If

End If
If Cll.Column = 23 Then
Cll.Offset(, -2) = Cll.Offset(, -9) & Cll.Offset(, -1)
End If
End If
Next
End Sub

chỉ có đoạn tại
If Cll.Column = 23 Then
Cll.Offset(, -2) = Cll.Offset(, -9) & Cll.Offset(, -1)
End If
thì 2 chuỗi ko hiển thị nối với nhau; các chỗ khác đều chạy tốt nhờ các anh chị trên diễn đàn giúp với.

namkpac
31-05-13, 12:51 PM
Có ai giúp em đoạn code này thiếu hay sai ở đâu với. help với

hungmo
16-09-14, 10:46 AM
Có 2 hàm : GhepTen1,GhepTen2

Hàm GhepTen1(A1,A2,B1,B2,D1,E1)
Hàm GhepTen2(A1:B2) & GhepTen2(D1:E1)
=> Có cách nào viết gọp lại thành hàm GhepTen(A1:B2,D1:E1) được không ?

Function GhepTen1(ParamArray rng() As Variant) As String
Dim i As Long
Dim iRet As Long
Dim tam As String
For i = LBound(rng) To UBound(rng)
tam = tam & Trim(rng(i))
Next
GhepTen1 = tam
End Function
==========
Function GhepTen2(rng As Range) As String
Dim i,j As Long
Dim tam As String
For i = 1 To rng.Rows.count
For j = 1 To rng.Columns.count
tam = tam & Trim(rng.Item(i, j))
Next j
Next i

GhepTen2 = tam
End Function

Trong diễn ai nghiên cứu lĩnh vực này giúp đỡ dùm ! Cám ơn !