例文を使って繰り返し業務を時短

【マクロ・VBA】区切り位置機能を使ってセルを再表示する

エクセル、マクロ、VBAで区切り位置機能を使ってセルを再表示する VBA

区切り位置機能の使い方

区切り位置機能を使用して指定する表の値を再表示するには、以下のようにコードを書きます。

Sub SplitTableValues()
    '対象となる表の範囲を指定する
    Dim TargetRange As Range
    Set TargetRange = Range("A1:B5")
    
    '表の値を再表示するためのループ処理
    Dim RowIndex As Long
    For RowIndex = 1 To TargetRange.Rows.Count
        'セルの値を取得し、区切り位置で分割する
        Dim CellValue As String
        CellValue = TargetRange(RowIndex, 2).Value
        Dim SplitValue As Variant
        SplitValue = Split(CellValue, "-")
        
        '分割した値を結合して、再表示する
        Dim NewValue As String
        NewValue = SplitValue(1) & "-" & SplitValue(0)
        TargetRange(RowIndex, 2).Value = NewValue
    Next RowIndex
MsgBox "完了"
End Sub

解説

このVBAは、指定された表の範囲内のセルにあるテキストを特定の区切り文字で分割し、その値を結合して再表示するという処理を行います。具体的には、以下のような表があった場合に、2列目のテキストを「-」で分割して、逆の順番で結合して再表示します。

  1. 対象となる表の範囲を指定する
    • 最初に、処理の対象となる表の範囲を指定します。このVBAでは、A1セルからB5セルまでの範囲を指定しています。
      • この例では、対象となる表の範囲をTargetRangeに指定しています。次に、ループ処理を使用して、表の値を再表示します。
  2. 表の値を再表示するためのループ処理
    • 指定された表の範囲内のセルに対して、ループ処理を行います。まず、RowIndexという変数を用意して、1からTargetRange.Rows.Count(対象となる表の行数)までのループを行います。
      • ループ処理で行ごとにセルの値を取得し、Split関数で区切り位置で分割して、SplitValueに格納します。分割した値を結合して、再表示するために、SplitValueの要素を取得し、文字列で結合します。最後に、TargetRangeの該当するセルに再表示した値を設定しています。
  3. セルの値を取得し、区切り位置で分割する
    • 各セルについて、その値を取得し、「-」で分割します。具体的には、次のようにCellValueとSplitValueという変数を用意して、それぞれセルの値を取得し、Split関数で分割します。
  4. 分割した値を結合して、再表示する
    • 分割した値を逆の順番で結合し、再表示します。具体的には、SplitValueの要素を逆順に結合してNewValueという変数に代入し、TargetRangeの対象セルに再表示します。

この方法を使用すると、指定した表の値を区切り位置で分割して再表示することができます。区切り位置は、Split関数の第2引数で指定することができます。また、区切り文字を指定することもできます。詳細は、VBAヘルプファイルを参照してください。

TextToColumnsを使用してセルを再表示

VBAでテキストを区切る場合には、TextToColumnsメソッドを使用します。このメソッドは、区切り文字を指定して、テキストを分割し、各列に割り当てます。

Sub 区切り位置機能を使ってセルを再表示()
    Dim iColStart       As Integer      '開始列位置
    Dim iColEnd         As Integer      '終了列位置
    Dim i               As Integer      'ループのカウンタ
    Dim iCol            As Integer      '列位置
    Dim iRow            As Long         '行位置
    Dim rInit           As Range        '開始時選択セル
    
    Application.ScreenUpdating = False
    
    Set rInit = Selection
    
    iRow = ActiveSheet.UsedRange.Row
    iColStart = ActiveSheet.UsedRange.Column
    iColEnd = ActiveSheet.UsedRange.Columns.Count + iColStart - 1
    
    '開始列から終了列までループ
    For i = iColStart To iColEnd
        '列選択
        Cells(iRow, i).Columns("A:A").EntireColumn.Select
        
        'データ区切りを指定列に対して実行
        Call Selection.TextToColumns( _
            Destination:=Cells(iRow, i), _
            DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, _
            ConsecutiveDelimiter:=False, _
            Tab:=True, _
            Semicolon:=False, _
            Comma:=False, _
            Space:=False, _
            Other:=False, _
            FieldInfo:=Array(1, 1), _
            TrailingMinusNumbers:=True)
    Next
    
    '開始時セルを再選択
    rInit.Select

    Application.ScreenUpdating = True
MsgBox "完了"
End Sub

解説

  • TextToColumnsメゾット:
    セルに入力されているデータ (1 つのセル内で、カンマ、スペース、タブなどで区切られたデータ) を、複数の列に区切ります。対象となる列は 1 列のみ
  • ConsecutiveDelimiter :
    True を指定すると連続した区切り文字を 1 つの区切り文字として認識(既定値は False)
  • Tab:
    True を指定すると引数 DataType は xlDelimited で区切り文字がタブ文字(既定値は False)
  • Semicolon :
    True を指定すると引数 DataType はxlDelimited で区切り文字がセミコロン(;)(既定値は False)
  • Comma:
    True を指定すると引数 DataType は xlDelimited で区切り文字がコンマ(,)(既定値は False)
  • Space:
    True を指定すると引数 DataType は xlDelimited で区切り文字がスペース(既定値は False)
  • Other:
    True を指定すると引数 DataType は xlDelimited で
    区切り文字が引数 OtherChar で指定文字(既定値は False)
  • FieldInfo :区切り後の列のデータ形式に関する情報を持つ配列を指定
    <引数 FieldInfo について>
    分割後の列に対して表示形式を指定。引数 DataType の値が xlDelimited の場合
    (データが区切り文字で区切られている場合)の FieldInfo は、Array (列番号, 表示形式)
     のように指定。「表示形式」は、XlColumnDataType 列挙 の定数(値)を指定。
  • TrailingMinusNumbers:負記号で始まる数値

コメント

タイトルとURLをコピーしました