アプリ版:「スタンプのみでお礼する」機能のリリースについて

EXCEL関数についてとなります。
添付画像のように、
共通した文字列"様"より6文字左(手前)といった

A列からC列のような抽出は可能でしょうか。
可能であれば数式をご教示いただけますと幸いです。

「EXCEL 特定の文字より○文字分の抽出」の質問画像

質問者からの補足コメント

  • 皆さま回答ありがとうございます。
    今更過ぎて補足にもならないやもしれませんのですが、

    条件が[共通した文字列"様"より6文字左(手前)]のみであった理由といたしまして、
    セルの初めの一文(品名)につきましては、

    おいしい 豆腐 1個
    絶品 牛乳 2つ

    というったように、全角・半角スペースが入るものがあったためでした。
    必要な情報が抜けており申し訳ございません。
    これまでの客数から文字数を決めてしまって、イレギュラーな際は修正をするという形も検討したいと思います。

      補足日時:2015/11/27 19:09

A 回答 (7件)

姓名合わせて6文字以上とか「武豊」のようにたった2文字の場合もありえるのだから、丁度好い方法はないかも。

    • good
    • 0
この回答へのお礼

早々にご回答ありがとうございます!
フルネーム2文字の方については失念しておりました。
ひとまず、空白分も加味して「6文字」とする場合で
何か手段をご存知であれば、お知らせいただけますと幸いです。

お礼日時:2015/11/27 15:29

>共通した文字列"様"より6文字左(手前)


ならC1に入れる式は「=MID(A1,FIND("様",A1)-6,7)」です。でもやるとわかるけど「個 A山B郎様」が表示されます。当たり前ですね、前提が間違ってるんで。

・名前の前に必ず全角スペースが入ります。
・名前は必ず「様」で終わります。
という前提なら、C1に入れる式は「=MID(A1,FIND(" ",A1)+1,FIND("様",A1)-FIND(" ",A1))」になります。エラー処理とか入れてないんで、そのくらいは宜しく。
    • good
    • 0
この回答へのお礼

早々にご回答ありがとうございます!
MID・FIND関数が理解しきれていなかったようで、申し訳ございません。
大変助かりました。ありがとうございます。

お礼日時:2015/11/27 16:33

こんにちは!



個人名の前には必ず全角スペースが入るのであれば
=TRIM(MID(A1,FIND(" ",A1),FIND("様",A1)-FIND(" ",A1)+1))
としてみてはどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

早々にご回答ありがとうございます!
TRIMは新発見でした!使わせていただきましたら、ちょうど良い収まりとなりました。

お礼日時:2015/11/27 19:05

=TRIM(MID(A1,FIND("様",A1)-5,6))

    • good
    • 0

No.3です。



>イレギュラーな際は修正をする
というコトですが、この質問だけの関数を作ってみてはどうでしょうか?
考え方として、「様」があるところから遡ってスペース(半角、全角どちらでもOK)
までを表示させる方法です。

Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)
C1セルに通常の関数の使い方で数式を入れます。

Function myStr(myRng As Range) 'この行から//
Dim k As Long, myEnd As Long
myEnd = InStrRev(myRng, "様")
k = myEnd
Do
k = k - 1
If Mid(StrConv(myRng, vbNarrow), k, 1) = " " Then Exit Do
Loop
myStr = Trim(Mid(myRng, k, myEnd - k + 1))
End Function 'この行まで//

C1セルに
=myStr(A1)
としてフィルハンドルで下へコピーしてみてください。

※ エラー処理はしていませんので、IF関数などで随時エラー処理は行ってください。

尚、保存時は「マクロ有効ブック」として保存します。m(_ _)m
    • good
    • 0

VBA で良いのならということで



A列のものを一気に処理して C列に書き出します
以下を標準モジュールに転記して、
処理するシートを見ながら Samp1 を実行してどうなりますか

Public Sub Samp1()
  Dim vA As Variant
  Dim i As Long, j As Long, k As Long

  With Range("A1", Cells(Rows.Count, "A").End(xlUp))
    vA = .Value
    For i = 1 To UBound(vA)
      k = InStr(vA(i, 1), "様")
      If (k > 0) Then
        j = InStrRev(" " & vA(i, 1), " ", k, vbTextCompare)
        vA(i, 1) = Mid(vA(i, 1), j, k - j + 1)
      Else
        vA(i, 1) = ""
      End If
    Next
    .Offset(, 2) = vA
  End With
End Sub

やっていることは
・A列の処理するものを読み込んでおいて
・1つ1つ "様" の位置を求め
あったら、その位置より前の空白を求め文字列を抜き出します
・結果をC列に書き出して終了

なので、"様" は、存在するのなら1つだけ・・・の条件が出てきます
    • good
    • 0

2名前は2文字以上で12文字未満(変更可)ということにして


=TRIM(MID(SUBSTITUTE(ASC(A1)," ",REPT(" ","10")),
FIND("様",SUBSTITUTE(ASC(A1)," ",REPT(" ","10")))-12,13))
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!