エクセルの関数の作成の御依頼です。

下記のような英数字の文字列があります。
ハイフンが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

よろしく、お願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/02/14 15:31:27
  • 終了:2013/02/21 15:35:03

回答(2件)

id:taknt No.1

きゃづみぃ回答回数13481ベストアンサー獲得回数11982013/02/14 15:41:30

ポイント50pt
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

ユーザー関数なので 標準モジュールのほうに記述してください。

id:taknt

使い方は
セルのところに
=カット(A1)
みたいに 入れて使います。

2013/02/15 09:44:11
id:karuishi No.2

ニャンざぶろう回答回数764ベストアンサー獲得回数1282013/02/14 21:38:30

ポイント50pt

わざわざ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を変えてペーストしてくださいね。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません