end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

全角=2文字,半角=1文字の換算で、文字列を分割

vbaには、Mid()関数で文字列を分割(substr?)できますが、このMid()は、全角半角問わず、1文字として扱います。

今回、全角=2文字,半角=1文字として、文字列を分割する機会があったので、調べてみたところ、次のように StrConv()とMidB()で実現できるようです。

Function byteMid(orgStr, startPos, endPos)
    
    Dim byteData() As Byte
    byteData = StrConv(orgStr, vbFromUnicode) 'ANSI に変換
    
    If UBound(byteData) < endPos Then
        endPos = UBound(byteData) + 1
    End If
    
    Dim midLen As Integer
    midLen = endPos - (startPos - 1)
    
    If midLen <= 0 Then
        Exit Function
    End If
    
    byteMid = Trim(StrConv(MidB(byteData, startPos, midLen), vbUnicode))
End Function