人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルの関数の作成の御依頼です。
下記のような英数字の文字列があります。
ハイフンが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

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

●質問者: martytaka
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●50ポイント
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

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


きゃづみぃさんのコメント
使い方は セルのところに =カット(A1) みたいに 入れて使います。

2 ● ニャンざぶろう
●50ポイント

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

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ