2017年9月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

« MidA(文字列, 開始バイト位置, バイト長)関数を作る(VBScript) | トップページ | MidA(文字列, 開始バイト位置, バイト長)関数を作る(VB.NET) »

2008年10月 2日 (木)

MidA(文字列, 開始バイト位置, バイト長)関数を作る(VBA)

VBAに焼き直し。

Sub a()
MsgBox MidA("abcdefg", 3, 2)
MsgBox MidA("あいうefg", 3, 2)
MsgBox MidA("あいうefg", 3, 3)
MsgBox MidA("aいうefg", 3, 2)
MsgBox MidA("aいうefg", 3, 3)
End Sub

Function MidA(Str As String, bStart As Long, bLength As Long) As String
Dim aStart As Long
Dim aLength As Long
Dim bPosition As Long
Dim aPosition As Long
aStart = 0
aLength = -1
bPosition = 1
For aPosition = 1 To Len(Str)
  If aStart = 0 Then
    If bStart = bPosition Then
      aStart = aPosition
    ElseIf bStart < bPosition Then
      aStart = aPosition - 1
      bStart = bPosition - 2
    End If
  Else
    If bStart + bLength = bPosition Then
      aLength = aPosition - aStart
      Exit For
    ElseIf bStart + bLength < bPosition Then
      aLength = aPosition - aStart - 1
      bLength = bPosition - bStart - 2
      Exit For
    End If
  End If
  bPosition = bPosition + 1 - (Asc(Mid(Str, aPosition, 1)) < 0)
Next
If aStart Then
  If aLength = -1 Then
    aLength = aPosition - aStart
    bLength = bPosition - bStart
  End If
  MidA = Mid(Str, aStart, aLength)
End If
End Function

引数の位置と長さは、補正後の値を返すように、ByRefにしています。

« MidA(文字列, 開始バイト位置, バイト長)関数を作る(VBScript) | トップページ | MidA(文字列, 開始バイト位置, バイト長)関数を作る(VB.NET) »