Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
文字の抽出
投稿日時: 20/08/25 12:46:47
投稿者: JIRO-KUN

【Sheet2】
 

	

	A	B	C	D	E	F	G
1							
2	=IF(INDIRECT("Sheet1!D2")="","",INDIRECT("Sheet1!D2"))	=A:A&" "	=IFERROR(LOOKUP(10^15,1*MID($A2,AGGREGATE(15,6,ROW($1:$1689)/(MMULT(1*ISERR(MID("|"&$A2,ROW($1:$1689)+{0,1},1)*0),{2;1})=2),COLUMN(A2)),ROW($1:$1689))),"")				
3	=IF(INDIRECT("Sheet1!D3")="","",INDIRECT("Sheet1!D3"))	=A:A&" "					
4	=IF(INDIRECT("Sheet1!D4")="","",INDIRECT("Sheet1!D4"))	=A:A&" "					
5	=IF(INDIRECT("Sheet1!D5")="","",INDIRECT("Sheet1!D5"))	=A:A&" "					
6	=IF(INDIRECT("Sheet1!D6")="","",INDIRECT("Sheet1!D6"))	=A:A&" "					
7	=IF(INDIRECT("Sheet1!D7")="","",INDIRECT("Sheet1!D7"))	=A:A&" "					
8	=IF(INDIRECT("Sheet1!D8")="","",INDIRECT("Sheet1!D8"))	=A:A&" "					



A2= =IF(INDIRECT("Sheet1!D2")="","",INDIRECT("Sheet1!D2"))
A3= A2を↓にコピー A8まで。
 
B2= =A:A&" "
B3= B2を↓にコピー B8まで。
 
C2= =IFERROR(LOOKUP(10^15,1*MID($A2,AGGREGATE(15,6,ROW($1:$1689)/(MMULT(1*ISERR(MID("|"&$A2,ROW($1:$1689)+{0,1},1)*0),{2;1})=2),COLUMN(A2)),ROW($1:$1689))),"")
 
C2〜はG8まで → ↓に関数をコピーしてます。
 
 
【Sheet1!D2〜D8】
 
D2=
1234B ’2345B ’3456B ’5555B ’*8888 ’*8344 8068
 
D3=パソコン ’*1010
 
D4=
+パソコン ’+2020 +キーボード ’3030
 
D5=
*7777
 
D6=
2222
 
D7=(セル内で改行されています)
+1111
6666
パソコン
マウス
4567
 
D8=
3333
 
 
A	B	C	D	E	F	G
1							
2	1234B ’2345B ’3456B ’5555B ’*8888 ’*8344 8068	1234B ’2345B ’3456B ’5555B ’*8888 ’*8344 8068 	1234	2345	3456	5555	8888
3	パソコン ’*1010	パソコン ’*1010 	1010				
4	+パソコン ’+2020 +キーボード ’3030	+パソコン ’+2020 +キーボード ’3030 	2020	3030			
5	*7777	*7777 	7777				
6	2222	2222 	2222				
7	"+1111
6666
パソコン
マウス
4567
"	"+1111
6666
パソコン
マウス
4567 "	1111	6666	4567		
8	3333	3333 	3333


				
		


これを下記のように

3行目
C3 = 1010
↓
C3 = パソコン
D3 = 1010

4行目
C4 = 2020
D4 = 3030
↓
C4 = パソコン
D4 = 2020
E4 = キーボード
F4 = 3030

7行目(ひとつのセルで改行されてます。)
C7 = 1111
D7 = 6666
E7 = 4567
↓
C7 = 1111
D7 = 6666
E7 = パソコン
F7 = マウス
G7 = 4567


////
1行目のセル(セル内で改行されていません)
 1234B ’2345B ’3456B ’5555B ’*8888 ’*8344 8068

7行目のセル(セル内で改行されています)
"+1111
6666
パソコン
マウス
4567
"


C列〜の結果を
半角、全角の「アルファベット」「+」「*」「’」や「スペース」を除き、
数字 カナを返したいです。

 
 
 
	C	D	E	F	G
2	1234	2345	3456	5555	8888
3	パソコン	1010			
4	パソコン	2020	キーボード	3030	
5	7777				
6	2222				
7	1111	6666	パソコン	マウス	4567
8	3333				
			


 
C2〜か
H2〜に 入れる関数は?
こんな条件では無理でしょうか?

回答
投稿日時: 20/08/25 14:12:55
投稿者: QooApp

すみませんが、なにやってるのかさっぱりわかりませんでした。
 
プログラムのソースを書いていただいたのはありがたいのですが、行数が多いのに具体的にやりたいことへの説明が足りてないと感じています。
 
言葉で動作を説明できますでしょうか。
 
また、動作を順番に説明していただけると助かります。

回答
投稿日時: 20/08/25 14:18:53
投稿者: んなっと

【方法1】Wordの置換機能を利用
 
 A2:A8をコピー
→Wordを起動して貼り付け
→[置換]
→[ワイルドカードを使用する]にチェック
→検索する文字列
[!0-90-9ァ-ヶー]{1,}
 置換後の文字列
^t
→すべて置換
→OK
→全範囲コピー
 
→Excelに戻る
→[貼り付け][形式を選択して貼り付け]テキスト
 
 
【方法2】長すぎるExcelの式利用
 
                  A B      C   D      E
2  +パソコンB’+20+キーボード    パソコン 20 キーボード
3 3パソコンB ’+20+マウス01   3パソコン 20 マウス01
 
C2
=IFERROR(MID(LEFT($A2,AGGREGATE(15,6,ROW($1:$2000)/(MMULT(1*ISERR(FIND(MID($A2&"|",ROW($1:$2000)+{0,1},1),"01234567890123456789ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶー")),{2;1})=1),COLUMN(A2))),AGGREGATE(15,6,ROW($1:$2000)/(MMULT(1*ISERR(FIND(MID("|"&$A2,ROW($1:$2000)+{0,1},1),"01234567890123456789ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶー")),{2;1})=2),COLUMN(A2)),1000),"")
右方向・→

回答
投稿日時: 20/08/25 14:28:47
投稿者: QooApp

ソースというか関数でしたね失礼いたしました。
 
A2のセルに入っている関数とB2の関数の境界がわかりづらいため、関数X・Yのようにいったん表の外へ出した方がいいかも?
 
表題が文字の抽出、となっており、結構下にすすむまで本題に入っていない?と感じております。
 

引用:
C列〜の結果を
半角、全角の「アルファベット」「+」「*」「’」や「スペース」を除き、
数字 カナを返したいです。

 
この部分が本題でしょうか。
 
半角のアルファベットを関数で削除するだけでも下記URL先のようにかなり面倒になると思います。
https://yotsuba-navi.com/archives/4323
 
これが全角の場合、パワープレイでごり押しする必要が出てくるんじゃないか?と考えます。
 
また、アルファベットや記号は塊になっていて、前後カナ等の文字と境界線があるのか、(「0000XXXあああ」のような)
 
「aあいうbえ*お」のようなランダムが想定されるのか、によっても話が変わると思います。

回答
投稿日時: 20/08/25 14:31:15
投稿者: QooApp

んなっと様が書かれているようにWordの正規表現・置換機能を私も推奨します。
 
Officeソフトで正規表現が特別強力なソフトになっているのがWordなので。

投稿日時: 20/08/25 15:02:18
投稿者: JIRO-KUN

QooApp 様
コード表示:

 の仕方がうまくできず

質問がわかりずらくてすみませんでした。
 
本題は引用:されてる部分でした。
 
 
んなっと様
ありがとうございます。
 
方法2でうまくできましたし、
C2〜 に関数を入れておけば何もせずに結果が出るので
方法2でやっていきたいと思います。
 
 
QooApp 様 んなっと様 ありがとうございました。