文字列から複数の数字を抽出し区切り表示したい。

Anonymous
2020-11-19T06:28:31+00:00

お世話になります。

首題の件、エクセルで例として以下を抽出する関数プログラムを作成し、エクセルト365で作成するとうまくいきましたが、それをOFFICE2016で使用しようとすると#NAMEと表示されてしまいます。(例題は3種類の数字ですが、最大で数字は4種類)

(例)  

5.計測・試験・評価・検査, 7.不具合・クレームの未然防止・対策, 11.営業・サービス・メンテナンス

→OUTPUT :5&7&11

「エクセル365のプログラム(成功例):」

'=IF(J22="自己の業務内容や課題が変わり、活用機会がなくなった。","-",SUBSTITUTE(TRIM(CONCAT(IFERROR(VALUE(MID(K22,SEQUENCE(LEN(K22)),1))," ")))," ","&"))

これをOFFICE2016ではしらせると、何かの操作時に#NAMEと表示され後戻りがききません。

尚、とCONCATとSEQUENSE関数の前に「_xlfn.」がついています。

'=IF(J22="自己の業務内容や課題が変わり、活用機会がなくなった。","

",SUBSTITUTE(TRIM(_xlfn.CONCAT(IFERROR(VALUE(MID(K22,_xlfn.SEQUENCE(LEN(K22)),1))," "))),"

","&"))

「質問」OFFICE2016でも対応可能なプログラム法を教えてください。

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Makapu 92,110 評価のポイント ボランティア モデレーター
2020-11-21T12:42:44+00:00

横合いから失礼いたします。

関数を使用する方法であれば、Hebikuzureさんが示されています様に、以下の サポート記事の 3番目の方法 にある様な MID 関数、SEARCH 関数または FIND 関数などを駆使する事で実現は可能と思います。

関数を使用してテキストを複数の列に分割する(日本語版)

ただ、日本語版は機械翻訳で関数式も変に変換されているので、関数式は英語版で読むのが良いです。

Split text into different columns with functions(英語版)

ただ、挑戦しました所、入れ子になりすぎて訳が分からなくなってきましたので、ユーザー定義関数を組んでみました。

関数名:Keisoku

・Jouken:"自己の業務内容や課題が変わり、活用機会がなくなった。" または "-" のセル

・strBuf :"5.計測・試験・評価・検査, 7.不具合・クレームの未然防止・対策, 11.営業・サービス・メンテナンス" のセル

(例)

・式:=keisoku(J22,K22) 

・結果:5&7&11

Function Keisoku(Jouken As String, strBuf As String)

    Dim iCnt As Variant

    Dim strSplit

    Dim strWk As String

    Dim StrAll As String

    strSplit = Split(strBuf, ",")

    For iCnt = LBound(strSplit) To UBound(strSplit)

        strWk = Trim(Left(strSplit(iCnt), InStr(strSplit(iCnt), ".") - 1))

        If iCnt = 0 Then

            StrAll = strWk

        End If

        If iCnt > 0 And Trim(strSplit(iCnt)) <> "" Then

            StrAll = StrAll & "&" & strWk

        End If

    Next iCnt

    If Jouken = "自己の業務内容や課題が変わり、活用機会がなくなった。" Then

       Keisoku = "-"

    Else

       Keisoku = StrAll

    End If  

End Function

<参考>

【Excel VBA入門】ユーザー定義関数の作り方。Functionプロシージャを理解する

ただ、通常の関数で出来た方がベストですよね(^^;

こちらには頻繁にはお見掛けしませんが、VBA 、関数式に精通されている方もいらっしゃいます。回答が付く事を期待してお待ちしましょう。

こちらはユーザー同士の相互互助で成り立っているコミュニティとなっており、必ず回答を必ず得られる場所ではありません。申し訳ございませんが、ご理解いただけますと幸いです。

※一連のやり取りを拝見して思いましたのは、初めにご提示いただいた関数式を 作成される優れた力量の持ち主でいらっしゃる事から、ヒントから時間を掛けて調べて挑戦すれば必ず出来る、という「獅子の子落とし」的なコメントと受け取って、是非成功していただきたいと思います。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

質問作成者が受け入れた回答

Hebikuzure aka Murachi Akira 327.6K 評価のポイント MVP ボランティア モデレーター
2020-11-21T10:23:06+00:00

> あなたの回答がいかがわしくないと思った

「いかがわしくない」というのは通常肯定的な評価を示す言い回しですね。ありがとうございます。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2020-11-21T13:18:22+00:00

Makapu様

 ご連絡ありがとうございます。

 非常にご丁寧にまた真摯に対応頂きましたこと深く感謝するとともに、同じように他に困っている方

の参考として連絡させていただきます。

 なお、私も昨日から様々なネット回答を参考に

自分で取り組み、関数でうまくいきました。

FIND関数とMID関数でしたね。

 今回初めての依頼で藁をもすがる思いだったので私自身にも失礼があったと思います。そのため、素気ない回答に失望し、コミュニティはあまり役にたたないという先入観を持ってしまいましたが、このような回答をいただける方もおられることがわかりました。私もMakapu様のような気持ちのいい対応を今後も心掛けていこうと思います。

 ありがとうございました。!!

「文字列から複数の数字を抽出し、区切り表示を

行うケース」

例)02.性能・作業性・耐久性向上・安定性, 04.原理・現象・原因の探求、解明, 08.時間短縮、業務改善、リードタイム短縮

目的)2&4&8を取り出す。

<第一段階> 1番目の数字抽出

=IFERROR(MID($K24,FIND(".", $K24)-2,2),"")

→ これで02を抽出

<第二段階> 2番目の数字抽出

=IFERROR(MID($K24,FIND(".", $K24, FIND(".",$K24)+1)-2,2),"")

→ これで04を抽出

<第三段階> 3番目の数字抽出

=IFERROR(MID($K24,FIND(".",$K24,FIND(".",$K24,FIND(".",$K24,FIND(".",$K24)+1)+1))-2,2),"")→ これで08を抽出

このあと、TEXT関数を使って上の0をとる。

次に、CONCATENATE関数を使って

2&4&8となりました。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

10 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2020-11-19T06:51:21+00:00

    連絡ありがとうございます。

    Excel 2016でも機能するプログラムの組み方がわからないので、

    もしご教示いただける方がおられましたらうれしいです。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Hebikuzure aka Murachi Akira 327.6K 評価のポイント MVP ボランティア モデレーター
    2020-11-19T06:45:22+00:00

    エラーになるのは SEQUENCE 関数も CONCAT 関数も、Excel 2016 には無いからですね。

    リンク先に書かれているように、これらの関数は Office 365 などのサブスクリプション版(CONCAT は Excel 2019 でも)で利用可能です。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません