スラッシュ区切り文字を最後の要素を除いて表示
するマクロを組みました。
動きとしては下記の通りです。
【実行前】
【実行後】
以下ソースです。
/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
Dim Out_str As String
Dim cls As Range
Dim cellB As Range
Dim cnt As Integer
Worksheets("Sheet1").Activate
In_str = ActiveSheet.Range("A" & cnt).Value
If In_str = "dt1" Then
'処理なし
Else
Out_str = CreatePath(In_str)
ActiveSheet.Range("B" & cnt).Value = Out_str
End If
cnt = cnt + 1
In_str = ActiveSheet.Range("A" & cnt).Value
Dim ArrLen As Integer
Dim cnt As Integer
Dim RetStr As String
Arr = Split(pValue, "/")
ArrLen = UBound(Arr)
RetStr = RetStr & Arr(cnt)
If cnt <> ArrLen - 1 Then
RetStr = RetStr & "/"
End If
cnt = cnt + 1
CreatePath = RetStr
/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
取り立てて解説するほどのところはありませんが、しいて言うなら、
In_str = ActiveSheet.Range("A" & cnt).Value
ここのところは、例えば今回のように、「A列にある要素を上から順にひとつづつ処理して、隣のB列に結果を書いていきたい」というような場合に便利だと思うのでポイントです。
Range()の中の部分で文字列結合をInteger変数を使って行えるというのがなんとも乱暴な感じがします。
あと
Dim Arr As Variant
の記載について、今回のようにSplitから返される配列の長さが不定の場合、あらかじめ格納する変数を宣言するときはこのVariant型で配列を宣言するといいみたいです。そのあとの処理で普通に文字列配列として使えていますが、配列に要素を格納した時点で型が決まったりするのでしょうか…
長さが不定の配列の宣言の仕方としてはRedimとPreserveというやり方もあるみたいですが、こちらの方がお手軽です。
以上二点がポイントです。