Xuống dòng dựa vào số lượng ký tự cho trước

Liên hệ QC
1.1. Hàm Mid cũng chả có gì là không đơn giản. Tuy rằng nó là hàm duy nhất trong VBA mà có thể nằm bên trái phép gán.
Tất cả các hàm khác đều phải nằm bên phải phép gán. Khi bạn tự viết một hàm UDF có khả năng nằm bên trái phép gán như vậy thì mới là rắc rối.
Về việc dùng MID khi nào thì bác đúng rồi. Nhưng không có chuyện HÀM nằm bên trái dấu = đâu. Sở dĩ chúng ta làm được MID(...) = "..." là do MID ở đây không là MID function mà là MID statement.


mid function.jpg


mid statement.jpg
 
Về việc dùng MID khi nào thì bác đúng rồi. Nhưng không có chuyện HÀM nằm bên trái dấu = đâu. Sở dĩ chúng ta làm được MID(...) = "..." là do MID ở đây không là MID function mà là MID statement.
Ờ nhỉ. Tôi quen khái niệm 'piping' của mấy ngôn ngữ khác rồi nên không biết Microsoft có cách khác để miêu tả cách pipe của họ.
 
Góp vui một cách khác:
PHP:
Public Function SplitTextX(ByVal rng As Range, ByVal num As Long) As String
...End Function
Cách dùng: =SplitTextX(A1:A189,5)
.
Code này có 2 điểm:
1. nếu tham số thứ nhất là 1 ô thì nó tỏi. Phương thức CopyValues của VBA mặc định là nếu Range chỉ mọt ô thì nó kết quả là trị của ô ấy; nếu Range nhiều hơn một ô thì mới ra mảng.
2. Sau khi nhét dấu xuống hàng xong thì mỗi hàng vẫn còn một dấu cách ở sau.

Lâu quá quên luôn code rồi, phải tập lại từ đầu thôi, hihi

Mã:
Function DichChu(ByVal chu As String) As String
...End Function
Code này cộng thêm LF vào sau mỗi 5 từ.
Sửa thành chỉ thay thế cái dấu cách thứ 5.
(máy tôi không có VBScript cho nên khong thử được)
 
Code này cộng thêm LF vào sau mỗi 5 từ.
Sửa thành chỉ thay thế cái dấu cách thứ 5.
(máy tôi không có VBScript cho nên khong thử được)
LF là phải có, thừa Cr.

Và thừa dấu cách ở cuối mỗi dòng.

Tôi thử như sau
Mã:
Function DichChu(ByVal chu As String, ByVal so As Long) As String
    chu = WorksheetFunction.Trim(chu)
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "((?:\S+\s){" & so - 1 & "}\S+)\s"
        DichChu = .Replace(chu, "$1" & vbLf)
    End With
End Function

Nếu bác có pattern đơn giản hơn thì cho tôi xin.
 
LF là phải có, thừa Cr.

Và thừa dấu cách ở cuối mỗi dòng.

Tôi thử như sau
Mã:
Function DichChu(ByVal chu As String, ByVal so As Long) As String
    chu = WorksheetFunction.Trim(chu)
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "((?:\S+\s){" & so - 1 & "}\S+)\s"
        DichChu = .Replace(chu, "$1" & vbLf)
    End With
End Function

Nếu bác có pattern đơn giản hơn thì cho tôi xin.
Lúc hỏi cái cô ả xe hơi xẹp lốp kia thì tôi đã nghĩ trong đầu cái pattern tương tự vậy. (không hoàn toàn giống nhưng không đơn giản hơn)
Tôi dùng máy Mac cho nên khó nghiên cứu cái pattern cho VBScript.
(các website hỗ trợ thử pattern trên mạng chuyên về JavaScript cho nên có thể không giống lắm)
 
Lúc hỏi cái cô ả xe hơi xẹp lốp kia thì tôi đã nghĩ trong đầu cái pattern tương tự vậy. (không hoàn toàn giống nhưng không đơn giản hơn)
Tôi dùng máy Mac cho nên khó nghiên cứu cái pattern cho VBScript.
(các website hỗ trợ thử pattern trên mạng chuyên về JavaScript cho nên có thể không giống lắm)
Cái này chỉ là thử coi anh đẹp chai còn ghé diễn đàn nữa không mà :). Bị lâu quá không thấy tưởng anh đã...
Mình đề xuất anh cài bootcamp "cửa sổ 10" chứ không nên đổ thừa tại xài Mác mà không tét được réc géc nha. Hihi
 
Cái này chỉ là thử coi anh đẹp chai còn ghé diễn đàn nữa không mà :). Bị lâu quá không thấy tưởng anh đã...
Mình đề xuất anh cài bootcamp "cửa sổ 10" chứ không nên đổ thừa tại xài Mác mà không tét được réc géc nha. Hihi
1. mình đã xổ-lồng rồi (ủa hình như tiếng Việt "xổ lôngf" có nghĩa khác. Thoiius thì viết rõ Tây bồi là "so long" đi)
Nhưng thấy có mấy bạn nói chuyện cốt kiết cho nên đơ-rốp bay vào ba mớ thí-ồ-rì vậy mà.

2. buốt cái mả mốc gì. Máy đã 10 năm tuổi. Còn ì ạch được là tốt rồi. Thử VBScrip hay mấy cái PAI's không có hứng. Đó là đồ pơ-rắc-tít. Mình lỡ làm dân thì-ồ-rì rồi thì để thì giờ đọc sách sướng hơn.
 
Web KT
Back
Top Bottom