エクセルの関数を作って頂きたく思います。

○○-△△-□□-□□
というコードがあります。
最初のハイフンの後の、△△を下記のような要件で
抜き出しいのです。

最初のハイフンの直後の1文字が英字→最初のハイフンの直後の1文字だけ抜き
出す
最初のハイフンの直後の1文字が数字→最初のハイフンの直後の3文字だけ抜き
出す

以上の要件で関数を作って頂けますでしょうか。
お忙しい所恐縮です。
一番良い回答にはイルカ賞を進呈させて頂きます。
よろしく、お願いいたします。


AA2-G10-180-D →G
AA2-3G1456-180-D →3G1

何か、要件上のお問い合わせ等ありましたら、
コメント欄にて、お聞きいただけると幸いです。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/05/30 11:59:50
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:mezase50 No.2

回答回数143ベストアンサー獲得回数17

ポイント12pt

これでどうでしょうか?A1に文字列が入っていると仮定しています。

=IF(ISNUMBER(1*MID(A1,FIND("-",A1)+1,1)),MID(A1,FIND("-",A1)+1,3),MID(A1,FIND("-",A1)+1,1))

id:martytaka

ありがとうございます。

シンプルなので、こちらを採用させて頂こうと思います。

2011/05/30 11:58:18

その他の回答4件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント14pt

該当しない場合は 何も値は 返しません。

Function getdata(a As String) As String
    getdata = ""
    b = InStr(1, a, "-")
    If b = 0 Or b = Len(a) Then Exit Function
    
    c = Mid(a, b + 1, 1)
    
    If c >= "a" And c <= "z" Then
        getdata = Mid(a, b + 1, 1)
        Exit Function
    End If
    
    If c >= "A" And c <= "Z" Then
        getdata = Mid(a, b + 1, 1)
        Exit Function
    End If
    
    If c >= "0" And c <= "9" Then
        getdata = Mid(a, b + 1, 3)
        Exit Function
    End If
    
    
End Function
id:martytaka

ありがとうございます。

わずかですがポイントにて感謝の意を表させて頂きます。

でも長いですね。。

2011/05/30 11:59:15
id:mezase50 No.2

回答回数143ベストアンサー獲得回数17ここでベストアンサー

ポイント12pt

これでどうでしょうか?A1に文字列が入っていると仮定しています。

=IF(ISNUMBER(1*MID(A1,FIND("-",A1)+1,1)),MID(A1,FIND("-",A1)+1,3),MID(A1,FIND("-",A1)+1,1))

id:martytaka

ありがとうございます。

シンプルなので、こちらを採用させて頂こうと思います。

2011/05/30 11:58:18
id:ootatmt No.3

回答回数1307ベストアンサー獲得回数65

ポイント12pt

対象の文字列が A1 に入っているとして、

=IF(ISERROR(MID(A1,FIND("-",A1)+1,1)*1),MID(A1,FIND("-",A1)+1,1),MID(A1,FIND("-",A1)+1,3))

このような関数でいかがでしょうか。

id:martytaka

ありがとうございます。

わずかですがポイントにて感謝の意を表させて頂きます。

2011/05/30 11:58:49
id:spyglass No.4

回答回数455ベストアンサー獲得回数29

ポイント12pt

数字の部分は半角数字で良かったでしょうか。

どうぞお使いくださいね。


Sub Macro1()

'1行目がタイトルの場合は2を指定してください。

sro = 1: 'タイトルが無いと仮定

'

lro = Range("A1").End(xlDown).Row

For i = sro To lro

samd = Cells(i, 1)

fst = InStr(samd, "-") + 1

If IsNumeric(Mid(samd, fst, 1)) Then

Cells(i, 2).Value = Mid(samd, fst, 3)

Else

Cells(i, 2).Value = Mid(samd, fst, 1)

End If

Next

End Sub

id:martytaka

ありがとうございます。

わずかですがポイントにて感謝の意を表させて頂きます。

2011/05/30 11:59:01

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 lipper 33 28 2 2011-05-30 11:41:08
  • id:SALINGER
    ほんの少し短くするとしたら
    =MID(A1,FIND("-",A1)+1,IF(ISNUMBER(MID(A1,FIND("-",A1)+1,1)*1),1,3))

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

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

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

回答リクエストを送信したユーザーはいません