Excel 文字列の分割(u_split)

文字列を区切り文字で分割する場合、VBAならsplit関数があるので良いが、
セル上で使用できる関数が見当たらない。

で、以前作ったものがあったのでメモしておきます。
こんな感じで、区切り文字と何番目の項目を取得するか指定して利用します。

split2

以下のソースを標準モジュールとして登録して利用します。
文字列の分割以外でも汎用的に使えそうな関数をちょっぴり載せておきます

'================================================================================
'区切り文字列から指定の項目番号の文字列を求める 2013/11/05 t.ohishi
'str1:区切り文字を含む文字列, str2:区切り文字, str3:項目数
'================================================================================
Function u_split(str1 As String, str2 As String, str3 As Long)
    Dim x
    x = Split(str1, str2)
    u_split = ""
    If (str3 > 0) And (str3 <= UBound(x) + 1) Then
        u_split = x(str3 - 1)
    End If
End Function


'================================================================================
'区切り文字列の先頭から指定の項目数までの文字列を求める 2013/11/05 t.ohishi
'str1:区切り文字を含む文字列, str2:区切り文字, str3:項目数
'================================================================================
Function u_split2(str1 As String, str2 As String, str3 As Long)
    Dim x
    If Right(str1, 1) = str2 Then
        str1 = Left(str1, Len(str1) - 1)
    End If
    x = Split(str1, str2)
    u_split2 = ""
    If str3 > 0 Then
        For i = 0 To str3 - 1
            If i <= UBound(x) Then
                u_split2 = u_split2 & x(i) & str2
            End If
        Next
        If Right(u_split2, 1) = str2 Then
            u_split2 = Left(u_split2, Len(u_split2) - 1)
        End If
    End If
End Function

'================================================================================
'上位10セルから最初に見つかった空白以外の文字を求める 2013/11/05 t.ohishi
'str1:上位の最初のセルを指定する
'================================================================================
Function u_up10(R1 As Range)
    Dim x
    For i = 0 To 9
        x = R1.Offset(i * -1, 0).Value
        If (x <> "") Or (R1.Offset(i * -1, 0).Row = 1) Then
            Exit For
        End If
        x = ""
    Next
    u_up10 = x
End Function

'================================================================================
'下位10セルから最初に見つかった空白以外の文字を求める 
'str1:下位の最初のセルを指定する
'================================================================================
Function u_dw10(R1 As Range)
    Dim x
    For i = 0 To 9
        x = R1.Offset(i, 0).Value
        If (x <> "") Or (R1.Offset(i, 0).Row = 65536) Then
            Exit For
        End If
    Next
    u_dw10 = x
End Function

'================================================================================
'データ件数カウント(100行の空白で終了とする)
'R1:データセルの先頭を指定する
'================================================================================
Function u_count(R1 As Range)
    Dim cnt_space As Long, i As Long, j As Long
    cnt_space = 0
    i = 0
    Do Until cnt_space >= 100
        If R1.Offset(i, 0).Value <> "" Then
            cnt_space = 0
        Else
            cnt_space = cnt_space + 1
        End If
        i = i + 1
    Loop
    u_count = i - cnt_space
End Function

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です