質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

5回答

391閲覧

Excel関数 セル内の不特定数の特定文字の次の1文字の連続抽出

addresshopeph

総合スコア5

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2023/09/24 11:05

Excelのセル内の特定の文字を検索してその文字の次の文字を連続して抽出したいのですが、FIND関数だと最初とその次の2個目まではできるのですがそれ以上を検索して抽出するとなると複雑になってしまいます。

セル内の特定文字の数が不特定数の場合はさらに難しくなります。

Excel関数を使ってセル内に不特定数ある特定文字を検索して、各々の次の1文字を連続してセル内に抽出するにはどのExcel関数を使ってどうすればいいでしょうか。

ご教授のほどよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2023/09/24 14:00

> FIND関数だと最初とその次の2個目まではできるのですがそれ以上を検索して抽出するとなると複雑になってしまいます。 は、どういうコードでしょうか? 「連続抽出」とは「全て抽出」と言うことでしょうか?
guest

回答5

0

ベストアンサー

対象が、abcaxyapqaだと、bxpを得たいということですかね。
Office365などで、Excel新関数が使えるなら、

Excel

1(最初の誤っていた回答)=TEXTJOIN("",,MAP(TEXTSPLIT(A1,"a"),LAMBDA(x,LEFT(x,1)))) 2=TEXTJOIN("",,MAP(DROP(TEXTSPLIT(A1,"a"),0,1),LAMBDA(x,LEFT(x,1))))

で。まずabcaxyapqaを区切り文字で分割して、[空,bc, xy, pq]という配列にしてそれぞれのLEFTの1文字を取って、全部つなぐ。
再追記:
最初の解答は誤ってましたので訂正しました。
abcaxyapqaを区切り文字で分割して、第一要素(先頭のaより前の前部分)を捨て、[bc, xy, pq]という配列にしてそれぞれのLEFTの1文字を取って、全部つなぐ。

追記:
新機能が使えないExcel(上記関数が#NAME?エラーになるバージョン)なら、繰り返し処理・配列処理できないので、補助セルを使うしかないと思います。

ABCDEFGHIJ
1abcaxyapq1(右にドラッグして連続数値を入れる)23456789
2a=IF(MID($A$1,B$1,1)=$A$2,MID($A$1,B$1+1,1),"")左のセルのドラッグ同左同左同左同左同左同左同左
3=CONCAT(B2:J2)

で、

ABCDEFGHIJ
1abcaxyapq123456789
2abxp
3bxq

投稿2023/09/24 15:03

編集2023/09/24 17:07
otn

総合スコア84598

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

addresshopeph

2023/09/25 02:46

ご指摘ありがとうございます。 不慣れなことをお許しください。 ご回答2 を採用させていただきたいと思います。 深夜にもかかわらず、誠意あるご対応に心よりお礼申し上げます。
otn

2023/09/25 10:54

従来のセル関数で簡単に書けないことは、すぐVBAコードを書いちゃうため、いままであまりこういう新セル関数を使ったことが無かったので、やってみました。 TEXTJOIN TEXTSPLIT DROPあたりは(私が添えた処理説明と)関数名から動作が分かると思いますが、 MAPとLAMBDAは、一般の言語のプログラミング経験が無い人に説明するのは難しいです。
guest

0

Office365が最新にアップデートすることができ、ご教授いただいた関数を使用することができました。
しかし、抽出された結果には関係のない対象文字列の先頭の最初の文字も一番最初に抽出されています。
aの次の文字のみを抽出するにはどうすればいいでしょうか。
よろしくお願いします。

投稿2023/09/24 16:42

addresshopeph

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2023/09/24 17:03

すいません。最初に現れる a 以前は無視しないといけないのに入れてましたので、訂正しておきました。
otn

2023/09/24 17:04 編集

ところで、他の人の質問ページと見比べて、自分の回答欄の使い方が間違っていると気づかないのでしょうか?
guest

0

Office365が最新にアップデートすることができ、ご教授いただいた関数を使用することができました。
しかし、抽出された結果には関係のない対象文字列の先頭の最初の文字も一番最初に抽出されています。
aの次の文字のみを抽出するにはどうすればいいでしょうか。
よろしくお願いします。

投稿2023/09/24 16:14

addresshopeph

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ご指摘の通り「対象が、abcaxyapqaだと、bxpを得たいということ」です。ご指摘の通り「対象がabcaxyapqaだとbxpを得たいということ」です。
Office365なのですがご教授いただいた関数を入力しても「#NAME?」になってしまいます。
できればご教授いただいた関数の数式を使いたいのですが、Office365が最新にアップデートされていないということでしょうか。
もしそうなら、最新にアップデートする方法もご教授いただければ幸いです。
よろしくお願いします。

投稿2023/09/24 15:44

addresshopeph

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2023/09/24 16:36

> Office365が最新にアップデートされていないということでしょうか。 わかりません。そうかもしれないし、Office365だと思っているが実は違うということかもしれないし。 > もしそうなら、最新にアップデートする方法もご教授いただければ幸いです。 「Office365 最新化」でググりましょう。
guest

0

"a"という文字を検索してその次の文字を抽出していく場合、

MID(A1,FIND("a",A1)+1,1)& MID(A1,FIND("a",A1)+1,1, FIND("a",A1)+1)&….

"a"の個数分だけ連続していきます。

「連続抽出」とは「全て抽出」と言うことです。

よろしくお願いします。

投稿2023/09/24 14:30

addresshopeph

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問