忍者ブログ

Mid関数で文字を切り出すマクロ(ランチャー3)

2021年03月20日
前回、文頭および文末の文字を削除するマクロを作った。

ユーザーフォームで削除対象の文字を確認しながら
上下ボタンで文字数を設定できるUIが便利だった。

いつもMid関数で何文字目か調べるのがめんどくさいので、
Midで抜き出すバージョンを作ってみた。

基本的な作りは前回と全く同じ。

Leftの代わりにMidでSample文字を表示する仕様に変更。
文字数を指定しないとすぐに表示できないので、
文字数のデフォルト値を10に設定した。
マクロで文字を確認してMid関数を使う方が多そう。


ダウンロード


プロパティは以下のとおり。

オブジェクト名:strMidForm(フォーム名)
Caption(表示名):MID(selection,開始文字,文字数)

オブジェクト名:stPos '開始位置
TabIndex(タブ遷移の順番):1
IMEMode(日本語入力制御):2 (fmIMEModeOff) 英語モード
TextBoxに数字のみ入力させる 【VBA在庫管理#33】 | オレグラミング (oregramming.com)

オブジェクト名:Ln '文字数
TabIndex(タブ遷移の順番):2
IMEMode(日本語入力制御):2 (fmIMEModeOff) 英語モード
Value(デフォルト値):10 

オブジェクト名:CommandButton1 ’キャンセルボタン
Accelerator(操作キー Alt + ...):C
Cancel(ESCキー紐づけ):True
TabIndex(タブ遷移の順番):4

オブジェクト名:CommandButton2 '実行ボタン
Accelerator(操作キー Alt + ...):M
TabIndex(タブ遷移の順番):3

オブジェクト名:SampleMid 'Mid後の文字サンプル表示
TabStop(タブ遷移の対象):False
TextAlign(テキスト位置):2 fmTextAlignCenter(中央揃え)

以下、ソース

(ユーザーフォーム表示は省略)
Sub strMidMain(stPos As Long, Ln As Long)
Dim r As Range
For Each r In Selection
    If Left(r.Formula, 1) <> "=" Then
        If Val(stLen) + Val(edLen) < Len(r) Then
            r.Value = Mid(r.Value, stPos, Ln)
        End If
    End If
Next r
End Sub

Private Sub stPos_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
        Case vbKeyReturn, vbKeyBack, vbKeyDelete, vbKeyTab
        Case vbKey0, vbKey1, vbKey2, vbKey3, vbKey4, vbKey5, vbKey6, vbKey7, vbKey8, vbKey9
        Case vbKeyNumpad0, vbKeyNumpad1, vbKeyNumpad2, vbKeyNumpad3, vbKeyNumpad4, vbKeyNumpad5, vbKeyNumpad6, vbKeyNumpad7, vbKeyNumpad8, vbKeyNumpad9
        Case vbKeyLeft, vbKeyRight
        Case vbKeyUp
            If stPos = "" Then
                stPos = 1
            Else
                stPos.Value = stPos + 1
            End If
        Case vbKeyDown
            If stPos <> "" And stPos <> 0 Then
                stPos.Value = stPos - 1
            End If
            KeyCode = 0
        Case vbKeyEscape
        Case Else
            KeyCode = 0
    End Select
End Sub
Private Sub stPos_change()
    If Left(Selection(1).Formula, 1) <> "=" Then
        If stPos.Value <> "" And stPos.Value <> 0 Then
            If Ln.Value <> "" And Ln.Value <> 0 Then
                SampleMid.Caption = Mid(Selection(1).Value, Val(stPos.Value), Ln.Value)
            End If
        End If
    End If
End Sub
Private Sub Ln_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
        Case vbKeyReturn, vbKeyBack, vbKeyDelete, vbKeyTab
        Case vbKey0, vbKey1, vbKey2, vbKey3, vbKey4, vbKey5, vbKey6, vbKey7, vbKey8, vbKey9
        Case vbKeyNumpad0, vbKeyNumpad1, vbKeyNumpad2, vbKeyNumpad3, vbKeyNumpad4, vbKeyNumpad5, vbKeyNumpad6, vbKeyNumpad7, vbKeyNumpad8, vbKeyNumpad9
        Case vbKeyLeft, vbKeyRight
        Case vbKeyUp
            If Ln = "" Then
                Ln = 1
            Else
                Ln.Value = Ln + 1
            End If
        Case vbKeyDown
            If Ln <> "" And Ln <> 0 Then
                Ln.Value = Ln - 1
            End If
            KeyCode = 0
        Case vbKeyEscape
        Case Else
            KeyCode = 0
    End Select
End Sub
Private Sub Ln_change()
    If Left(Selection(1).Formula, 1) <> "=" Then
        If stPos.Value <> "" And stPos.Value <> 0 Then
            If Ln.Value <> "" And Ln.Value <> 0 Then
                SampleMid.Caption = Mid(Selection(1).Value, Val(stPos.Value), Ln.Value)
            End If
        End If
    End If
End Sub
Private Sub CommandButton1_Click() 'キャンセルボタン
'https://excel-ubara.com/excelvba3/EXCELFORM003.html
Unload Me
End Sub
Private Sub CommandButton2_Click()  '実行ボタン
If stPos = "" Then Exit Sub
If Ln = "" Then Exit Sub
Call strMidMain(stPos, Ln)
Unload Me
End Sub

PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字