[µo°Ý]¥HByte¬°³æ¦ì±N¦r¦ê¤©¥H°µ©î¤À¡A½Ð°ÝVBAn¦p¦ó³B²z¡H
| ©«¤l132 ¥DÃD25 ºëµØ0 ¿n¤À199 ÂI¦W0  §@·~¨t²Îwindow XP ³nÅ骩¥»Excel 2010 ¾\ŪÅv20 ©Ê§O¨k ¨Ó¦Û¥xÆW ·s¦Ë µù¥U®É¶¡2010-6-1 ³Ì«áµn¿ý2022-7-14 
   
 | 
 [µo°Ý]¥HByte¬°³æ¦ì±N¦r¦ê¤©¥H°µ©î¤À¡A½Ð°ÝVBAn¦p¦ó³B²z¡H
| ¦r¦êªºªø«×¬O 120 Ó Bytes ¦pªGn¨C60Ó Bytes n°µ¤@Ó¦r¦ê
 
 ´ú¸Õ¦r¦ê¦p¤U¡A¦@¬° 120 Ó Bytes
 ³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1
 
 ¥Øªº¬On©î¤À¦¨
 ³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1
 ³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1
 
 ¦ý¬O¥Î VBA ¼g¥X¨Ó·|Åܦ¨
 ³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1
 ³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1
 ³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1
 
 
 VBA»~»{¬°
 60=15(¤¤¤å¦r)*2+15(^¤å¦r¤]·|Åܦ¨2ÓByte)*2
 60=15(¤¤¤å¦r)*2+15(^¤å¦r¤]·|Åܦ¨2ÓByte)*2
 40=10(¤¤¤å¦r)*2+10(^¤å¦r¤]·|Åܦ¨2ÓByte)*2
 
 ¹ê»Ú¤W ¥»¤Hªº»{ª¾¬O
 45=15(¤¤¤å¦r)*2+15*1
 45=15(¤¤¤å¦r)*2+15*1
 30=10(¤¤¤å¦r)*2+10*1
 | 
 | 
|  | 
|  |  | 
|  |  | 
| ©«¤l132 ¥DÃD25 ºëµØ0 ¿n¤À199 ÂI¦W0  §@·~¨t²Îwindow XP ³nÅ骩¥»Excel 2010 ¾\ŪÅv20 ©Ê§O¨k ¨Ó¦Û¥xÆW ·s¦Ë µù¥U®É¶¡2010-6-1 ³Ì«áµn¿ý2022-7-14 
   
 | 
                
| ¥»©«³Ì«á¥Ñ Baracuda ©ó 2013-4-4 23:08 ½s¿è 
 Option Explicit½Æ»s¥N½XOption Explicit
Option Base 1
Const Max_Length = 60
Const Test_String = "³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1"
' 30  ªø«× "³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1"
' 120 ªø«× "³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1"
Sub main()
    Call Process_Over_Length_XX_Byte(Test_String)
End Sub
Sub Process_Over_Length_XX_Byte(Stg_Input As String)
' ±N©Ò¿é¤Jªº¦r¦ê¡A¦pªG¶W¹L60Ó Byte «á¡A¤©¥H¤À¬° N¦C  , Max_Length =60
Dim Total_Char_Byte As Integer, Total_Line_Output As Integer, i As Integer, CountDown_No As Integer
Dim First_Max_Length_Stg As String, Tmp_Integer As Integer
    Total_Char_Byte = LenB(Stg_Input)
    Total_Line_Output = 1 + Int(Total_Char_Byte / Max_Length)
    ' Á`¦@¦³´XÓ Line n³B²z                   Max_Length = 60
    CountDown_No = Total_Line_Output
    
    For i = 1 To Total_Line_Output
        If CountDown_No = 1 Then
        ' ¦pªG¬O³Ì«á¤@¦C®É¡A§Y¬O³Ì«á¤@¦¸¿é¥X
            Debug.Print (Stg_Input)
            Exit Sub
        Else
        ' ¦pªG¤£¬O³Ì«á¤@¦C®É¡ACountDown_No ªº¼Æ¦r§Y´î 1
            CountDown_No = CountDown_No - 1
            First_Max_Length_Stg = LeftB(Stg_Input, Max_Length) 'Max_Length = 60
            Tmp_Integer = LenB(First_Max_Length_Stg)
            Debug.Print First_Max_Length_Stg
            Stg_Input = RightB(Stg_Input, LenB(Stg_Input) - Max_Length)
            ' ±N¦r¦ê¤©¥H«¸m¡A¥h°£«e¤è60 Ó¦r¤¸                              Max_Length = 60
            Tmp_Integer = LenB(Stg_Input)
        End If
    Next i
End Sub
Option Base 1
 Const Max_Length = 60
 
 Const Test_String = "³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1"
 ' 30  ªø«× "³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1"
 ' 120 ªø«× "³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1³ü1¶L1°Ñ1¥|1¥î1³°1¤C1®Ã1¨h1¬B1"
 
 Sub main()
 Call Process_Over_Length_XX_Byte(Test_String)
 End Sub
 
 Sub Process_Over_Length_XX_Byte(Stg_Input As String)
 ' ±N©Ò¿é¤Jªº¦r¦ê¡A¦pªG¶W¹L60Ó Byte «á¡A¤©¥H¤À¬° N¦C  , Max_Length =60
 Dim Total_Char_Byte As Integer, Total_Line_Output As Integer, i As Integer, CountDown_No As Integer
 Dim First_Max_Length_Stg As String, Tmp_Integer As Integer
 
 Total_Char_Byte = LenB(Stg_Input)
 Total_Line_Output = 1 + Int(Total_Char_Byte / Max_Length)
 ' Á`¦@¦³´XÓ Line n³B²z                   Max_Length = 60
 CountDown_No = Total_Line_Output
 
 For i = 1 To Total_Line_Output
 If CountDown_No = 1 Then
 ' ¦pªG¬O³Ì«á¤@¦C®É¡A§Y¬O³Ì«á¤@¦¸¿é¥X
 Debug.Print (Stg_Input)
 Exit Sub
 Else
 ' ¦pªG¤£¬O³Ì«á¤@¦C®É¡ACountDown_No ªº¼Æ¦r§Y´î 1
 CountDown_No = CountDown_No - 1
 First_Max_Length_Stg = LeftB(Stg_Input, Max_Length) 'Max_Length = 60
 Tmp_Integer = LenB(First_Max_Length_Stg)
 Debug.Print First_Max_Length_Stg
 Stg_Input = RightB(Stg_Input, LenB(Stg_Input) - Max_Length)
 ' ±N¦r¦ê¤©¥H«¸m¡A¥h°£«e¤è60 Ó¦r¤¸                              Max_Length = 60
 Tmp_Integer = LenB(Stg_Input)
 End If
 Next i
 End Sub
 | 
 | 
|  | 
|  |  | 
|  |  | 
| ©«¤l132 ¥DÃD25 ºëµØ0 ¿n¤À199 ÂI¦W0  §@·~¨t²Îwindow XP ³nÅ骩¥»Excel 2010 ¾\ŪÅv20 ©Ê§O¨k ¨Ó¦Û¥xÆW ·s¦Ë µù¥U®É¶¡2010-6-1 ³Ì«áµn¿ý2022-7-14 
   
 | 
                
| ªþ¤Wµ{¦¡¤º®e¥H§K¦³µLªk¤U¸üªº°ÝÃD | 
 | 
|  | 
|  |  | 
|  |  | 
| ©«¤l4901 ¥DÃD44 ºëµØ24 ¿n¤À4916 ÂI¦W267  §@·~¨t²ÎWindows 7 ³nÅ骩¥»Office 20xx ¾\ŪÅv150 ©Ê§O¨k ¨Ó¦Û¥x¥_ µù¥U®É¶¡2010-4-30 ³Ì«áµn¿ý2025-10-31 
                
 | 
                
| ¦^´_ 3# Baracuda ³Ìª½±µªº¤èªk¬O§PÂ_¦r¤¸½X¨Ó¨M©w¦r¤¸ªº¦ì¤¸¼Æ
 ½Æ»s¥N½XSub ex()
Dim k&, t%, i%, c%, s%
k = Len(Test_String)
t = 1
Do Until i = k
   Do Until s = Max_Length
   i = i + 1
   c = Asc(Mid(Test_String, i, 1))
   s = s + IIf(c >= 0 And c <= 255, 1, 2) '§PÂ_¦r¤¸½X¬O§_¬°ASCII,¬O«h¦r¤¸ªº¦ì¤¸¼Æ¬°1§_«h¬°2
   Loop
   MsgBox Mid(Test_String, t, i - t + 1)
   t = i + 1
   s = 0
Loop
End Sub
 | 
 | 
| ¾Ç®üµL²P_¤£®¢¤U°Ý | 
|  |  | 
|  |  | 
| ©«¤l132 ¥DÃD25 ºëµØ0 ¿n¤À199 ÂI¦W0  §@·~¨t²Îwindow XP ³nÅ骩¥»Excel 2010 ¾\ŪÅv20 ©Ê§O¨k ¨Ó¦Û¥xÆW ·s¦Ë µù¥U®É¶¡2010-6-1 ³Ì«áµn¿ý2022-7-14 
   
 | 
                
| ¦³´ú¸Õ¹L¡AÃä¬ÉÈ·|¦³°ÝÃD 
 Bug ·|²£¥Íªº±¡ªp
 n¸ó¹L Max_Length ®É¡A¥¿¦n¹J¨ì¤¤¤åor¥þ«¬¦r¡C
 
 Ex:
 Max_Length=4
 ³ü1¶L1°Ñ1
 
 ³ü1¶L ¹ê»Ú¬O5Ó Byte
 Do Until s = Max_Length
 ¦]¬°¦pªG
 | 
 | 
|  | 
|  |  | 
|  |  | 
| ©«¤l132 ¥DÃD25 ºëµØ0 ¿n¤À199 ÂI¦W0  §@·~¨t²Îwindow XP ³nÅ骩¥»Excel 2010 ¾\ŪÅv20 ©Ê§O¨k ¨Ó¦Û¥xÆW ·s¦Ë µù¥U®É¶¡2010-6-1 ³Ì«áµn¿ý2022-7-14 
   
 | 
                
| Hsieh ª©¥D ³oÓ¸ò§Úì¨Ó·Qªº°µªk¡A¤è¦¡¤jP¬Û¦P¡C
 ·Q»¡¬Ý¦³µL¤ñ¸û¦nªº¤èªk°µ¡C
 ³o¼Ë¬Ý¨Ó¦³¨Ç¥Î¡u¼É¤O¡v¸ÑÃD¡C
 ¬Ý¨Ó VBA ¤]¨S¦³¨ä¥L¨ç¼Æ¤ñ¸û¦n¥Î¡C
 [è«öªº¤Ó§Ö]
 Ex:
 Max_Length=4
 ³ü1¶L1°Ñ1
 
 ³ü1¶L ¹ê»Ú¬O5Ó Byte
 Do Until s = Max_Length
 ³o¼Ë·|¸ó¹L¤@Ó¦r¡C
 
 ª©¥D¡A³oÓ Bug §Ú·Q§Ú¥i¥H¦Û¦æ¸Ñ¨M¡C
 ¦pªG¦³·sªº VBA Defalult Function ªº¸Ü¡A¦A§i¶D¡C
 | 
 | 
|  | 
|  |  | 
|  |  | 
| ©«¤l132 ¥DÃD25 ºëµØ0 ¿n¤À199 ÂI¦W0  §@·~¨t²Îwindow XP ³nÅ骩¥»Excel 2010 ¾\ŪÅv20 ©Ê§O¨k ¨Ó¦Û¥xÆW ·s¦Ë µù¥U®É¶¡2010-6-1 ³Ì«áµn¿ý2022-7-14 
   
 | 
                
| ½Æ»s¥N½XConst Contatenate_Char = "_"
Const Max_Length = 78
'================================´ú¸Õ¤º®e========================================================================
'Hsiehª©¥D´ú¸Õ¤º®e¡A·|¦³ Bug
'³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6
'¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2
'180="³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0"
'Max_Length = 78
'³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°
'_6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0³ü1
'_¶L2°Ñ3¥|4¥î5³°6¤C7®Ã8¨h9¬B0
Sub main()
        Call Process_Over_Length_XX(Test_String)
End Sub
Function If_ASCII_Stg(Stg_Test As String) As Boolean
' ´ú¸Õ¦r¤¸½X¬O§_¬°ASCII ¡A¦pªG¬O >= 0 ¥B <= 255 ®É¡A«h¬° ASCII
' ¦ý¬O¦r¤¸ªø«×¤j©ó 1®É¡Aµ{¦¡·|§ì²Ä1Ó¦r¤¸°µ§PÂ_
    If Asc(Stg_Test) >= 0 And Asc(Stg_Test) <= 255 Then
        If_ASCII_Stg = True
    Else
        If_ASCII_Stg = False
    End If
End Function
Sub Process_Over_Length_XX(Stg_Input As String)
Dim Total_Pesudo_Char_Byte As Integer
Dim Skip_1_or_2 As Byte, Current_Stg_Process_Position As Integer
Dim Current_Stg As String, Ctr As Integer, Ctr_I As Integer
Dim Counter_Stg_ProC_Bytes As Integer, Output_Stg As String
Dim Line_1_Or_Not As Boolean
Dim IS_ASCII_Boolean As Boolean
' ¦pªG¶W¹LNÓ¦r®É¡A´N¤À«e¬qªº³¡¤À
' ==========   «Å§i¦r¦êÁ`ªø«×  & ¦r¦ê²{¦b³B²zªº¦ì¸m  ==========================
    Total_Pesudo_Char_Byte = Len(Stg_Input): Ctr = 0: Ctr_I = 0             '¥ý³]©w¬°ªÅ¦r¦ê  & ¬°0
    Current_Stg_Process_Position = 1: Current_Stg = "" '¥ý³]©w¬°ªÅ¦r¦ê  & ¬°0
    
    Do Until Ctr = Total_Pesudo_Char_Byte
        Do Until Counter_Stg_ProC_Bytes >= Max_Length - 1 Or Ctr = Total_Pesudo_Char_Byte  ' ¦pªG¶W¹L Max Length ®É¡A´Nn¸õ¤U¤@Ó¦r¤¸
            Ctr = Ctr + 1
            Current_Stg = Mid(Test_String, Ctr, 1) ' ¦V«e±À¶i 1Ó¦r¤¸
            IS_ASCII_Boolean = If_ASCII_Stg(Current_Stg)
            Skip_1_or_2 = IIf(IS_ASCII_Boolean, 1, 2)   ' n Skip ´XÓ Byte  ¦pªG ¦r¤¸½X¬OASCII,«h ¸õ¹L ¦ì¤¸¼Æ¬°1 §_«h¬°2
            Counter_Stg_ProC_Bytes = Counter_Stg_ProC_Bytes + Skip_1_or_2
            ' ²{¦b¦b¨º¤@Ó String Byte ªº¦ì¸m
            If Counter_Stg_ProC_Bytes >= Max_Length And Not IS_ASCII_Boolean Then
            ' ¦pªG¤w¬O±µªñ¨C¦æªº (³Ì¤j¼Æ-1) ®É¡Anª`·N¬O§_¦³ ¥¿¦n¹J¨ì¤¤¤åor¥þ«¬¦r¡A¨Ï±o¥[2«á¡A·|¶W¹L1Ó¦r¡C
                Counter_Stg_ProC_Bytes = Max_Length: Ctr = Ctr - 1     '°h«á1Ó¦r ±j¨î¸õ¥X¦^°é¡A¥H³B²zªºByte ±j¨î¤Æ¬°³Ì¤jÈ
            End If
           
        Loop
        Output_Stg = Mid(Stg_Input, Current_Stg_Process_Position, Ctr - Current_Stg_Process_Position + 1)
        Debug.Print (Output_Stg)
        Current_Stg_Process_Position = Ctr + 1
        Counter_Stg_ProC_Bytes = 0  ' ¤©¥HÂk 0
    Loop
End Sub
 | 
 | 
|  | 
|  |  | 
|  |  |