0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

指定文字列以前、以降削除

Last updated at Posted at 2025-04-28

文字列から、指定した方向より削除文字列までを削除する。
削除文字列発見位置の指定あり

引数情報指定

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' 指定文字列以前、以降削除
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' 引数情報初期化
'------------------------------------------------------------------------------
Public Property Get G_String_InitArgDelInf() As T_STRING_ARG_DEL_INF
    Dim wkInf As T_STRING_ARG_DEL_INF
    
    With G_String_InitArgDelInf
        .SrchInf = G_String_InitArgSrchInf
        
        .DelPosSpec = E_STRING_SPEC_POS_START
        .AddDelFlg = False
    End With
    
    G_String_InitArgDelInf = wkInf
End Property

'------------------------------------------------------------------------------
' 指定文字列以降、以前削除(引数情報指定)
'------------------------------------------------------------------------------
Public Function F_String_ReturnDeleteStr_Inf( _
        ByRef aArgInf As T_STRING_ARG_DEL_INF) As String
    Dim wkRtn As String
    
    Dim wkArgInf As T_STRING_ARG_DEL_INF: wkArgInf = aArgInf
    Dim wkInfAryAry As Variant, wkInfAry As Variant
    Dim wkDelStt As Long, wkDelEnd As Long
    Dim wkStrLen As Long
    
    '文字列位置取得
    With wkArgInf
        wkRtn = .SrchInf.Target
        
        '検索文字列作成
        If F_String_GetSearchInfArray_Inf(wkInfAryAry, .SrchInf) <> True Then
            '検索文字が見つからなかった場合は無視
        Else
            wkStrLen = Len(.SrchInf.Target)
            
            '開始~文字列位置まで削除
            If M_Common.F_CheckBitOn(.DelPosSpec, E_STRING_SPEC_POS_START) = True Then
                '削除開始位置を設定
                wkDelStt = .SrchInf.SttPos
                
                '削除終了位置を設定
                wkDelEnd = wkInfAryAry(LBound(wkInfAryAry))(E_STRING_IDX_SRCH_INF_POS_START)
                '削除文字列追加指定ありの場合
                If .AddDelFlg = True Then
                    wkDelEnd = wkDelEnd - 1
                '削除文字列追加指定なしの場合
                Else
                    wkDelEnd = wkDelEnd + wkInfAryAry(LBound(wkInfAryAry))(E_STRING_IDX_SRCH_INF_LENGTH) - 1
                End If
            '文字列位置~終了まで削除
            Else
                '削除開始位置を設定
                wkDelStt = wkInfAryAry(LBound(wkInfAryAry))(E_STRING_IDX_SRCH_INF_POS_START)
                '削除文字列追加指定ありの場合
                If .AddDelFlg = True And wkDelStt > D_POS_START Then
                    wkDelStt = wkDelStt + wkInfAryAry(LBound(wkInfAryAry))(E_STRING_IDX_SRCH_INF_LENGTH)
                End If
                
                '削除終了位置を設定
                wkDelEnd = .SrchInf.EndPos
                If wkDelEnd < D_POS_START Then
                    PF_String_GetPosEndAdjust wkDelEnd, wkStrLen, .SrchInf.SttPos, .SrchInf.Length
                End If
            End If
            
            '削除位置に問題ない場合、削除実施
            If wkDelStt <= wkDelEnd Then
                wkRtn = ""
                If wkDelStt > 1 Then
                    wkRtn = Left(.SrchInf.Target, wkDelStt - 1)
                End If
                If wkDelEnd < wkStrLen Then
                    wkRtn = wkRtn & Right(.SrchInf.Target, (wkStrLen - wkDelEnd))
                End If
            End If
        End If
    End With
    
    F_String_ReturnDeleteStr_Inf = wkRtn
End Function

引数指定

'------------------------------------------------------------------------------
' 指定文字列以降、以前削除(引数指定)
'------------------------------------------------------------------------------
Public Function F_String_ReturnDeleteStr( _
        ByVal aTarget As String, _
        ByVal aDelete As String, _
        Optional ByVal aDelPosSpec As E_STRING_SPEC = E_STRING_SPEC_POS_START, _
        Optional ByVal aDelIdx As Long = D_IDX_START) As String
    Dim wkArgInf As T_STRING_ARG_DEL_INF: wkArgInf = G_String_InitArgDelInf
    
    With wkArgInf
        .SrchInf.Target = aTarget
        .SrchInf.Search = aDelete
        .SrchInf.GetIdx = aDelIdx
        
        .DelPosSpec = aDelPosSpec
    End With
    
    F_String_ReturnDeleteStr = F_String_ReturnDeleteStr_Inf(wkArgInf)
End Function
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?