下記のような英数字の文字列があります。
ハイフンが3つあった場合、
その3つ目のハイフン以下をカットする関数を
作って頂けないでしょうか。
3つめのハイフンが無い場合は、そのままの文字列のままにしたいです。
例
AAA-1A22-222-A →AAA-1A22-222
AA-1S22-45-A →AA-1S22-45
AAA-H22-500-A →AAA-H22-500
AAA-1A22-222→AAA-1A22-222
AA-1S22-45→AA-1S22-45
AAA-H22-500→AAA-H22-500
よろしく、お願いいたします。
Function カット(a As String) As String If Len(a) - Len(Replace(a, "-", "")) <= 2 Then カット = a Exit Function End If b = InStr(a, "-") c = InStr(b + 1, a, "-") b = InStr(c + 1, a, "-") カット = Left(a, b - 1) End Function
ユーザー関数なので 標準モジュールのほうに記述してください。
わざわざVBAを介さなくとも
3番目の"-"までを取り出す程度でしたら何とかなりそうなので
普通のワークシート関数でやる方法を回答いたします。
元の文字列が入っているセルを"A1"とすると、
=IF(
ISERROR(LEFT(A1,FIND("-",A1,1+FIND("-",A1,1+FIND("-",A1,1)))-1)),
A1,
LEFT(A1,FIND("-",A1,1+FIND("-",A1,1+FIND("-",A1,1)))-1)
)
で、関数の入ったセルに表示できます。
3番目の"-"より左側の文字列を拾っているだけです。
(3個以下だとエラーを検出してセル全体を返しています。)
ワークセルを使って良いのなら
LEFT(A1,FIND("-",A1,1+FIND("-",A1,1+FIND("-",A1,1)))-1)
をくくりだせば、記述が重複しないで簡単です。
1つ目のセル指定が面倒だったら
=IF(ISERROR(LEFT(
A1,FIND("-",
A1,1+FIND("-",
A1,1+FIND("-",
A1,1)))-1)),
A1,LEFT(
A1,FIND("-",
A1,1+FIND("-",
A1,1+FIND("-",
A1,1)))-1))
の行頭のA1を変えてペーストしてくださいね。
使い方は
2013/02/15 09:44:11セルのところに
=カット(A1)
みたいに 入れて使います。