区切り位置機能の使い方
区切り位置機能を使用して指定する表の値を再表示するには、以下のようにコードを書きます。
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列目のテキストを「-」で分割して、逆の順番で結合して再表示します。
- 対象となる表の範囲を指定する
- 最初に、処理の対象となる表の範囲を指定します。このVBAでは、A1セルからB5セルまでの範囲を指定しています。
- この例では、対象となる表の範囲を
TargetRange
に指定しています。次に、ループ処理を使用して、表の値を再表示します。
- この例では、対象となる表の範囲を
- 最初に、処理の対象となる表の範囲を指定します。このVBAでは、A1セルからB5セルまでの範囲を指定しています。
- 表の値を再表示するためのループ処理
- 指定された表の範囲内のセルに対して、ループ処理を行います。まず、RowIndexという変数を用意して、1からTargetRange.Rows.Count(対象となる表の行数)までのループを行います。
- ループ処理で行ごとにセルの値を取得し、
Split
関数で区切り位置で分割して、SplitValue
に格納します。分割した値を結合して、再表示するために、SplitValue
の要素を取得し、文字列で結合します。最後に、TargetRange
の該当するセルに再表示した値を設定しています。
- ループ処理で行ごとにセルの値を取得し、
- 指定された表の範囲内のセルに対して、ループ処理を行います。まず、RowIndexという変数を用意して、1からTargetRange.Rows.Count(対象となる表の行数)までのループを行います。
- セルの値を取得し、区切り位置で分割する
- 各セルについて、その値を取得し、「-」で分割します。具体的には、次のようにCellValueとSplitValueという変数を用意して、それぞれセルの値を取得し、Split関数で分割します。
- 分割した値を結合して、再表示する
- 分割した値を逆の順番で結合し、再表示します。具体的には、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:負記号で始まる数値
コメント