Nối nhiều chuỗi trong excel (1 người xem)

  • Thread starter Thread starter HAiNV
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

HAiNV

Thành viên mới
Tham gia
25/6/06
Bài viết
13
Được thích
5
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!
 
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é
 
Lần chỉnh sửa cuối:
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.
attachment.php
 
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
 
Lần chỉnh sửa cuối:
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.
 
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...
 
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)
 

File đính kèm

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 à
Mã:
Function JoinText(ByVal Cells As Range) As String

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

End Function
 
Thử dùng hàm sau Thầy à
Mã:
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:
PHP:
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
 

File đính kèm

Lần chỉnh sửa cuối:
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:
PHP:
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

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 à.
 
@ 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?
PHP:
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
 
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
 
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ổ"?
 
Bạn xem file đính kèm có được không?
Mã:
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
  [COLOR=magenta]JoinText = Replace(WorksheetFunction.Trim(Tmp), "-", Sep)[/COLOR]
End Function
Trong VBA hình như cũng có "chim" mà sao lại WorksheetFunction.....nhỉ
Híc
 
Mã:
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
  [COLOR=magenta]JoinText = Replace(WorksheetFunction.Trim(Tmp), "-", Sep)[/COLOR]
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!
 
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ì:
PHP:
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 Function
Khi ấ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
Mã:
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
  [COLOR=magenta]JoinText = Replace(WorksheetFunction.Trim(Tmp), "-", Sep)[/COLOR]
End Function
Trong 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)
 
Lần chỉnh sửa cuối:
@ 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"...
 
Lần chỉnh sửa cuối:
Ẹ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
 
@ 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!
 
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)
PHP:
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
 
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)
PHP:
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 à
 
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)
PHP:
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
 
Lần chỉnh sửa cuối:
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
 
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
 
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
 
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
 
cho hỏi để nối 2 ô 1 ô là text 1 ô là ngày tháng năm thì phải làm sao
 
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ô:
Mã:
=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.
 
Code không Chạy được
 
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
 
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.
 
nhờ mọi người giúp đỡ code vba nối dữ liệu trong 2 cell.
 

File đính kèm

nhờ mọi người giúp đỡ code vba nối dữ liệu trong 2 cell.
VBA thì nó như thế này:
[GPECODE=vb]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[/GPECODE]
Trong code trên, 2 câu lệnh Application.EnableEvents = FalseApplication.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.
 
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
 
Lần chỉnh sửa cuối:
VBA thì nó như thế này:
[GPECODE=vb]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[/GPECODE]
Trong code trên, 2 câu lệnh Application.EnableEvents = FalseApplication.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.
 
Có ai giúp em đoạn code này thiếu hay sai ở đâu với. help với
 
Lần chỉnh sửa cuối:
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 !
 
các bạn ơi mình cũng giống thớt này , gộp 2 ô lại 1 , sau khi đọc xong mình làm được rồi , nhưng khổ nỗi là mỗi dòng của mình có 1 font khác nhau , và in nghiêng , in đậm khác nhau như trong hình ô D1 , bạn nào giúp mình với
attachment.php
i
 
Cho mình hỏi chút.
Mình có một bảng trong Sheet “Dulieu” là toàn bộ dữ liệu
- Cột A là tên của Chồng
- Cột B là tên của Vợ
Giờ phải thêm vào đoạn code trên như thế nào để tên chồng ở hàng trên, tên vợ ở hàng dưới trong một Cell trong cột C của một sheet khác. (giống như ấn tổ hợp phím Alt+Enter khi viết trong cell)
Trích Code
Range("C" + Format(dong_sheet)).Value = Workbooks(work_wb).Worksheets("Dulieu").Range("A" + Format(dong_goc)).Value + Workbooks(work_wb).Worksheets("Dulieu").Range("B" + Format(dong_goc)).Value
 
Lần chỉnh sửa cuối:
Chỉ bạn kimdong cách làm đơn giản nhất nha
B1: thêm cột stt bên chồng 1,3,5,,,
B2: copy danh sach bên vợ bỏ xuống cột chồng, sau đó đánh stt là 2,4,6,8,,,
B3 sắp xếp theo thứ tự là xong
 
Chỉ bạn kimdong cách làm đơn giản nhất nha
B1: thêm cột stt bên chồng 1,3,5,,,
B2: copy danh sach bên vợ bỏ xuống cột chồng, sau đó đánh stt là 2,4,6,8,,,
B3 sắp xếp theo thứ tự là xong
Em có viết Sub xuất bảng biểu ấy anh. Chứ không phải làm thủ công à.
Như dòng code của em trích trên thì tên vợ và chồng ở cùng 1 dòng trong 1 ô
VD: Nguyễn Văn A và Nguyền Thị B
 
Em có viết Sub xuất bảng biểu ấy anh. Chứ không phải làm thủ công à.
Như dòng code của em trích trên thì tên vợ và chồng ở cùng 1 dòng trong 1 ô
VD: Nguyễn Văn A và Nguyền Thị B
Bạn dùng công thức sau ở C1=A1 & CHAR(10) & B1, fill xuống. Chọn cột C - Format cell - Wrap text. Còn code thì mình bó tay.
 
Em có viết Sub xuất bảng biểu ấy anh. Chứ không phải làm thủ công à.
Như dòng code của em trích trên thì tên vợ và chồng ở cùng 1 dòng trong 1 ô
VD: Nguyễn Văn A và Nguyền Thị B
File cụ thể đi, tôi sẽ giúp, chứ khi làm rồi bạn lại đẻ ra các trường hợp khá nữa?
 
Em muốn hỏi câu lệnh VBA xuống dòng như ấn tổ hợp phím Alt + Enter là gì thôi ạ.
Ví dụ: Range("C" + Format(dong_sheet)).Value = Workbooks(work_wb).Worksheets("Dulieu").Range("A" + Format(dong_goc)).Value + Workbooks(work_wb).Worksheets("Dulieu").Range("B" + Format(dong_goc)).Value
Trong ô C em muốn làm như này: Dòng trên là tên Chồng, Dòng dưới là tên vợ ấy. thì phải thêm vào chỗ trước đoạn này là gì (
+ Workbooks(work_wb).Worksheets("Dulieu").Range("B" + Format(dong_goc)).Value)
 
Em muốn hỏi câu lệnh VBA xuống dòng như ấn tổ hợp phím Alt + Enter là gì thôi ạ.
Ví dụ: Range("C" + Format(dong_sheet)).Value = Workbooks(work_wb).Worksheets("Dulieu").Range("A" + Format(dong_goc)).Value + Workbooks(work_wb).Worksheets("Dulieu").Range("B" + Format(dong_goc)).Value
Trong ô C em muốn làm như này: Dòng trên là tên Chồng, Dòng dưới là tên vợ ấy. thì phải thêm vào chỗ trước đoạn này là gì (
+ Workbooks(work_wb).Worksheets("Dulieu").Range("B" + Format(dong_goc)).Value)
Hình như là cái này Chr(10) xuống hàng cái này bài 47 có đề cập rồi mà bạn
 
Xin mấy đại ca cho em thỉnh giáo vài điều như sau:

+em có cell A1, B1 là: Mã 1 và Mã 2

+em có cell A2, B2 là: 10 và 20

+em có cell A3, B3 là: 30 và 0

Em xin nhờ mấy đại ca giúp em 1 đoạn code VBA để nối nội dung các text trên tại ô C2 với nội dung như sau: Mã 1 (10) Mã 2 (20)

Tương tự tại ô C3 là: Mã 1 (30)

Nếu B3=0 thì chỉ nối cột A3, nội dung sẽ là: Mã 2 (30)

Lưu ý: cell A1, B1 là mình để cố định (có thể định dạng range kéo dài khi có nhiều sự lựa chọn)
Em mò hoài mà ko biết cách nào để viết cho đúng.

Hiện em đã mò được cái text nối nội dung lại có code như sau:

Function GhepTen(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
If Len(rng.Item(i, j)) > 0 Then 'bo cell khong co text'
tam = tam & Trim(rng.Item(i, j)) & "; " 'thêm dau ; vao cuoi moi gia tri'
End If
Next j
Next i
GhepTen = Left(tam, Len(tam) - 2) 'bo dau ; cuoi doan text sau khi noi'
GhepTen = Replace(GhepTen, ":;", ":") 'thay the
GhepTen = Replace(GhepTen, "; )", ")") 'thay the
End Function

Còn ghép nội dung từ trên xuống thì em chưa mần được. Mong các sư phụ chỉ giáo
 

File đính kèm

Xin mấy đại ca cho em thỉnh giáo vài điều như sau:

....

Lưu ý: cell A1, B1 là mình để cố định (có thể định dạng range kéo dài khi có nhiều sự lựa chọn)
Em mò hoài mà ko biết cách nào để viết cho đúng.

Hiện em đã mò được cái text nối nội dung lại có code như sau:

.......
Còn ghép nội dung từ trên xuống thì em chưa mần được. Mong các sư phụ chỉ giáo
Chữ màu đỏ thấy.....ghê quá
Lưu ý: cell A1, B1 là mình để cố định (có thể định dạng range kéo dài khi có nhiều sự lựa chọn)
Để cố định cũng phải khai báo trong code cho nó hiểu
Đại khái code thế này
Mã:
Public Function Gom(Ma, Vung) As String
    Dim I, Kq
        For I = 1 To Vung.Columns.Count
            If Vung(I) > 0 Then Kq = IIf(Kq = "", Ma(I) & " (" & Vung(I) & ")", Kq & " " & Ma(I) & " (" & Vung(I) & ")")
        Next I
    Gom = Kq
End Function
Công thức ở cell muốn lấy kết quả
Muốn bao nhiêu Mã thì cứ thêm vào rồi chỉnh lại địa chỉ trong công thức
Híc
 
Mã:
Public Function Gom(Ma, Vung) As String
    Dim I, Kq
        For I = 1 To Vung.Columns.Count
            If Vung(I) > 0 Then Kq = IIf(Kq = "", Ma(I) & " (" & Vung(I) & ")", Kq & " " & Ma(I) & " (" & Vung(I) & ")")
        Next I
    Gom = Kq
End Function
Công thức ở cell muốn lấy kết quả

Muốn bao nhiêu Mã thì cứ thêm vào rồi chỉnh lại địa chỉ trong công thức
Híc[/QUOTE]


Nói thật là quá nhanh, quá nguy hiểm nun ạ, xin đa tạ --=0 /-*+/ %#^#$

Có 1 câu hỏi nhỏ nữa là:

Ví dụ em muốn gộp tất cả nội dung sheet 1sheet 2 .... sheet (n-1) được đưa vào sheet n với mong muốn là:

nội dung sheet 1 -> chèn thêm 1 cột -> nội dung sheet 2 -> chèn thêm 1 cột ->.... -> sheet (n-1)

Em chỉ có thêm 1 ước ao, 1 khát khao như vậy thôi ạ.... xin nhờ pác thêm phen này nữa nhé! }}}}}}}}}}}}}}}
 
các pác ơi, giúp em với hiu hiu :.,:.,:.,:.,:.,:.,:.,

Lưu ý: ghép nội dung các sheet theo cột... Tks all bro !
 
Thử dùng hàm sau Thầy à
Mã:
Function JoinText(ByVal Cells As Range) As String

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

End Function
Cho mình hỏi, nếu mình muốn nối chuỗi có điều kiện có cách nào không vậy? Bạn chỉ giúp mình nhé. Thanks!
 

File đính kèm

Cho mình hỏi, nếu mình muốn nối chuỗi có điều kiện có cách nào không vậy? Bạn chỉ giúp mình nhé. Thanks!
1 cách:
PHP:
Function Gop(s As String) As String
    Dim LR, i
    LR = Range("A" & Rows.Count).End(xlUp).Row
    For i = 1 To LR
        If Range("A" & i) = s Then
            If InStr(1, Gop, Range("B" & i)) Then GoTo Thu5
            Gop = Gop & ", " & Range("B" & i)
        End If
Thu5:
    Next i
    Gop = Mid(Gop, 2, Len(Gop))
End Function
 
VBA thì nó như thế này:
[GPECODE=vb]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[/GPECODE]
Trong code trên, 2 câu lệnh Application.EnableEvents = FalseApplication.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.
cám ơn anh đã chia sẻ kiến thức quí giá, em đã sử dụng code vba này để nối chuỗi. tuy nhiên e muốn hỏi anh là em muốn nối một vùng có nhiều chuỗi trong hàng, cột thì code như thế nào ak? vì dùng hàm textjoin để nối nhiều chuỗi nó báo lỗi value. anh có cách nào để code vba với nhiều chuỗi không ak. của em có hàng ngàn chuỗi thì bó tay ak
 
cám ơn anh đã chia sẻ kiến thức quí giá, em đã sử dụng code vba này để nối chuỗi. tuy nhiên e muốn hỏi anh là em muốn nối một vùng có nhiều chuỗi trong hàng, cột thì code như thế nào ak? vì dùng hàm textjoin để nối nhiều chuỗi nó báo lỗi value. anh có cách nào để code vba với nhiều chuỗi không ak. của em có hàng ngàn chuỗi thì bó tay ak
bạ đưa file giả lập và hết quả mong muốn mà hàm textjoin() chưa làm được lên xem
 
cám ơn anh đã chia sẻ kiến thức quí giá, em đã sử dụng code vba này để nối chuỗi. tuy nhiên e muốn hỏi anh là em muốn nối một vùng có nhiều chuỗi trong hàng, cột thì code như thế nào ak? vì dùng hàm textjoin để nối nhiều chuỗi nó báo lỗi value. anh có cách nào để code vba với nhiều chuỗi không ak. của em có hàng ngàn chuỗi thì bó tay ak
Bài này đã hỏi và được trả lời tại đây: Tách số từ chuỗi, không được hỏi nhiều nơi.
 

File đính kèm

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

Back
Top Bottom