2009年3月3日火曜日

クエリ内の1フールドで指定した数で文字列を分離する ACCESS for VBA

通常のACCESS VBAでの関数は解らないが、ある文字列を指定した数で2つに分離するとなるとなかなか大変である。

そこで独自に関数を作成してクエリ内で使用することにより簡単に分離が可能な関数をメモします。

この関数の場合は全角半角の文字が混入しても指定した半角数を対象にします。
(例)東京ディズニーランド(15文字)10で分けたい場合 東京ディズニ  -ランドのように出来ます。

まず、ACCESSのモジュール内に Functionのモジュールを作成

Function MyLenLeft(ByVal a, ByVal b)
 Dim c, LenName
 c = 0
 Dim i, nul
 nul = 0
 For i = 0 To Len(a) - 1
  Dim k
  k = Mid(a, i + 1, 1)
  If (Asc(k) And &HFF00) = 0 Then  
    c = c + 1
  Else
   c = c + 2
  End If
  If c <= b * 1 Then
   LenName = LenName & k
  End If
  Next
  MyLenLeft = LenName
End Function

Function MyLenMidOver (ByVal a, ByVal b)
 Dim c, LenName
 c = 0
 Dim i, nul
 nul = 0
 For i = 0 To Len(a) - 1
  Dim k
  k = Mid(a, i + 1, 1)
  If (Asc(k) And &HFF00) = 0 Then  
    c = c + 1
  Else
   c = c + 2
  End If
  If c <= b * 1 Then
   LenName = LenName & k
  End If
  Next
  MyLenMidOver = LenName
End Function


この2つをコピペで作成して
クエリ内に LeftやRight等の関数と同じように使用する。

(例)住所の列がものすごく長い場合に30文字で分けたい場合
住所A:MyLenLeft(住所、30)、住所B:MyLenMidOver(住所、30)
これで綺麗に分割できます。

なにかと便利な関数ですので他の用途にも応用が利くと思います。