Nhờ hoàn thiện code cắt chữ theo độ dài tùy chọn (1 người xem)

Liên hệ QC

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

hondatron

Thành viên mới
Tham gia
14/9/10
Bài viết
49
Được thích
3
Mình có viết được đoạn code cắt chữ theo độ dài cho trước, nhưng không biết cách nào để biến nó thành function như kiểu.
Fnsplit(đoạn text, độ dài)
Mã:
Function FnSplit(giatri As String, so As Number)

'----------------------------------------

    Dim strMainString As String
    Dim strTemp
    Dim i As Integer
    Dim temp
   
    
    Application.ScreenUpdating = False
  
   
    strMainString = Trim(giatri)
    
    arrsplit = Split(strMainString, " ")
    
    ReDim Arr(1 To UBound(arrsplit), 1 To 1)
 
   For i = 0 To UBound(Arr)
 
   
   If Len(temp + " " + arrsplit(i)) <= [COLOR=#ff0000]so[/COLOR] Then '- Số này tùy biến
   temp = Trim(temp + " " + arrsplit(i))
   
    Else
    Exit For
   End If
    

   Next i
   
 [COLOR=#ff0000]Range("b6").value[/COLOR] = temp
'-- mình muốn kết quả ra bất kỳ ô mình bỏ function Fnslip() vào.
 
  Application.ScreenUpdating = True
  
End Function
 
Muốn lấy trị cho function thì làm như sau
Thay dòng:
Range(:b6").value = temp
Bằng:
FnSplit = temp

Bạn hỏi gì tôi chỉ nắy. Còn code của bạn chạy kết quả có đúng hay không là chuyện khác.
 
Upvote 0
Thủ thuật cắt chữ theo độ dài:

Đếm ngược chuỗi kể từ độ dài cần cắt. Hễ thấy từ cuối chuỗi (đứng trước một dấu trắng, đấu chấm, dấu phẩy, ...) thì dừng lại. Cắt từ chỗ đó.
 
Upvote 0
Thủ thuật cắt chữ theo độ dài:

Đếm ngược chuỗi kể từ độ dài cần cắt. Hễ thấy từ cuối chuỗi (đứng trước một dấu trắng, đấu chấm, dấu phẩy, ...) thì dừng lại. Cắt từ chỗ đó.

Thanks you mình đã khắc phục được chỗ sai rồi. code chạy ok hết rồi...
 
Lần chỉnh sửa cuối:
Upvote 0
Mình có viết được đoạn code cắt chữ theo độ dài cho trước, nhưng không biết cách nào để biến nó thành function như kiểu.
Fnsplit(đoạn text, độ dài)
Mã:
Function FnSplit(giatri As String, so As Number)

'----------------------------------------

    Dim strMainString As String
    Dim strTemp
    Dim i As Integer
    Dim temp
   
    
    Application.ScreenUpdating = False
  
   
    strMainString = Trim(giatri)
    
    arrsplit = Split(strMainString, " ")
    
    ReDim Arr(1 To UBound(arrsplit), 1 To 1)
 
   For i = 0 To UBound(Arr)
 
   
   If Len(temp + " " + arrsplit(i)) <= [COLOR=#ff0000]so[/COLOR] Then '- Số này tùy biến
   temp = Trim(temp + " " + arrsplit(i))
   
    Else
    Exit For
   End If
    

   Next i
   
 [COLOR=#ff0000]Range("b6").value[/COLOR] = temp
'-- mình muốn kết quả ra bất kỳ ô mình bỏ function Fnslip() vào.
 
  Application.ScreenUpdating = True
  
End Function

Bạn đã sửa OK rồi nhưng tôi viết cho những người sẽ đọc chủ đề này, và mới bắt đầu viết code. Để họ học được trên lỗi của người khác. Để khỏi đi theo "vết xe đổ".
Tôi viết xong mới thấy bài của bạn, vậy thì công đó hãy có ích cho người khác.
---------------
1. Đã là hàm để dùng trong công thức cho cell bất kỳ thì hàm phải trả giá trị tính toán về. Làm gì có chuyện "luôn luôn" chỉnh cell B6 (Range("b6").Value) như thế. Mà không trả về giá trị thì dùng sub cho rồi. Chỉ có điều sub thì làm gì dùng được trong công thức.

2. Đã có "trong tay" mảng các chuỗi cần thiết arrsplit rồi thì cần gì mảng Arr? Dùng Arr và Redim chỉ để lấy UBoun(Arr)? Sao không dùng luôn UBound(arrsplit)???
Mà tại sao lại cho Arr là mảng hai chiều?

3. Quan trọng vì cơ bản:
a. Hãy tập khai báo tường minh. Hãy khai báo arrsplit
b.
Mã:
Function FnSplit(giatri As String, so As Number)
???

Làm gì có kiểu dữ liệu Number?

Mã:
s As BYTE hoặc
s As Integer hoặc
s As Long hoặc
...

4. Nếu tôi hiểu ý bạn thì
Mã:
Function FnSplit(ByVal giatri As String, so As Long) As String
Dim arrsplit, strMainString As String
Dim i As Integer
Dim temp As String
    strMainString = Trim(giatri)
    arrsplit = Split(strMainString, " ")
    
    For i = 0 To UBound(arrsplit)
        If Len(temp + " " + arrsplit(i)) <= so Then
            temp = Trim(temp + " " + arrsplit(i))
        Else
            Exit For
        End If
    Next i
    
    FnSplit = temp
End Function

Công thức cho B6 (ví dụ)
Mã:
=FnSplit(A1;8)

hoặc 

=FnSplit("He he                            he dễ thế mà lại hơi bị nhầm";8)


5. Tôi đề nghị
Mã:
Function FnSplit(ByVal giatri As String, so As Long) As String
Dim strMainString As String
    strMainString = Left(WorksheetFunction.Trim(giatri), so)
    FnSplit = Trim(strMainString)
End Function

hoặc

Function FnSplit(ByVal giatri As String, so As Long) As String
    giatri = Left(WorksheetFunction.Trim(giatri), so)
    FnSplit = Trim(giatri)
End Function
 
Upvote 0
Cảm ơn @switom. Code đã gọn đi rất nhiều và mình cũng hiểu thêm cái thiết sót của mình
 
Upvote 0

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

Back
Top Bottom