A列に、『a-b-c d』といった文字列があります。
a、b、c、dはそれぞれ英数字で、文字数が各行異なり、
aとb、bとcの間には必ず”-”で区切られ、dの前はスペースで区切られています。
またこの文字列は、以下の文字列の場合もあります。
『a-b d』(cの文字列が無い)
『a d』(b、cの文字列が無い)
『d』(a、b、cの文字列が無い)
この条件の上で、aの文字列のみをB列、bの文字列のみをC列、cの文字列のみをD列に
表示するには、どういった関数の組み方をすれば良いのでしょうか。
LEFT、MID、RIGHT、FIND、、、そのあたりだと思うのですが、
”-”(ハイフン)が複数存在する時の、()の中の組み方が分かりません。
分かる方がいましたらお願いします。
No.9ベストアンサー
- 回答日時:
こういうものを関数で行う場合、作業列を使うととても易しくになりますね。
B2セルに
=IF(ISNUMBER(FIND(" ",A2)),LEFT(A2,MIN(FIND({"-"," "},A2&"-"))-1),"")
半角スペースが見つかったら計算。なかったら空白にする。
計算部分は
"-"と" "を左から検索して、先に見つかったところ-1 までの文字を返す。
配列定数が分かりにくい場合、
=IF(ISNUMBER(FIND(" ",A2)),LEFT(A2,MIN(FIND("-",A2&"-"),FIND(" ",A2))-1),"")
でも同じ
作業列のC2セル
=RIGHT(A2,LEN(A2)-LEN(B2)-1)
aの部分+1文字分を消す。
D2セルは B2セルをコピペ
E2セルも C2セルをコピペ
E2セルも B2(D2)セルをコピペ
B2:F2セルを選択し、下へオートフィル
作業列は非表示にしておけばよいでしょう
添付図参照 参考まで
No.13
- 回答日時:
◆文字列が1つのときは、「a」か「d」かが区別できません、
◆dの前はスペースで区切られています。
◆このことから「a」は「a」とし、「_d」のように前に半角スペースがあれば「d」とすると、
B1=TRIM(MID(SUBSTITUTE(SUBSTITUTE($A1," ",REPT(" ",100*(3-(LEN($A1)-LEN(SUBSTITUTE($A1,"-",)))))),"-",REPT(" ",100)),100*COLUMN(A1)-99,100))
★下にコピー
No.12
- 回答日時:
B1=IF(OR(COUNTIF($A1,"*-*"),COUNTIF($A1,"* *")),TRIM(MID(SUBSTITUTE(SUBSTITUTE($A1," ",REPT(" ",100*(3-(LEN($A1)-LEN(SUBSTITUTE($A1,"-",)))))),"-",REPT(" ",100)),100*COLUMN(A1)-99,100)),TRIM(MID(REPT(" ",400)&$A1,100*COLUMN(A1),100)))
★右と下にコピー
No.11
- 回答日時:
CoalTar様、補足ありがとうございました。
ただ、同一文字列が含まれているかどうかが一定していない場合、C1セルのSUBSTITUTEの第4引数は「2」ではなくて可変にしないといけないので、式がもう少し長くなってしまいそうです。そのような対応が必要であると、質問者さんから具体的な説明・相談があれば、修正案を考えたいと思います。同一文字列を含む行数がわずかであれば、数式による対応は別にいらないという場合もあるでしょう。No.10
- 回答日時:
#4 MarcoRossiItalyさんへ
>>使用するセルの範囲が多いのでちょっと、
は
>a~dの4種類の文字列どうしで全く同一のものが含まれている場合は、置換によってグチャグチャになります。
の意見かもしれないです。つまり、データ数が多いからチェックできないということかもしれません。
対策は SUBSTITUTE関数にあります。
B2セル =SUBSTITUTE(SUBSTITUTE(F2,G2,"",1),"-","",1)
C2セル =SUBSTITUTE(SUBSTITUTE(G2,H2,"",1),"-","",1)
とすればよいでしょう。
No.8
- 回答日時:
>使用するセルの範囲が多いのでちょっと
作業列をたくさん用いるのがExcelなど表計算ソフトの「まっとうな」使い方です。ワークシートには列がたくさん用意されているのですから、それを使わなければ、Excelは本領を発揮することができません。是非、こういう方法を覚えられることをお勧めします。
作業列が表示されているのが気に食わないのであれば、見せたくない列を非表示にすることができます。あるいは、作業列だけ別シートに分けても、計算には何の問題もありません。
No.7
- 回答日時:
ANo.5です。
もし、dの文字列も表示させる場合には、D2セルに次の関数を入力してから、D2セルをコピーして、D3以下に貼り付けて下さい。
=IF(ISNUMBER(FIND(" ",INDEX($A:$A,ROW()))),REPLACE(INDEX($A:$A,ROW()),1,FIND(" ",INDEX($A:$A,ROW())),),INDEX($A:$A,ROW())&"")
No.6
- 回答日時:
細かいトコをイロイロ定義(宣言)してからやらないと、直ぐにまた修正主義者になるだけですね?
項目はどこから来たもの?
入力(これはない筈?)、引用、それとも生成(これもない筈?)??
a、b、cの中にブランクがある?
dの中に「-」がある?
デリミタの連続はある?
1項目だけ、「d」と「a」はどうやって区別する?
No.5
- 回答日時:
今仮に、元の文字列がA2以下に入力されているものとします。
まず、B2セルに次の関数を入力して下さい。
=IF(ISNUMBER(FIND(" ",$A2)),MID($A2,FIND("★",SUBSTITUTE("-"&LEFT($A2,FIND(" ",$A2&" ")-1)&"--","-","★",COLUMNS($B:B))),FIND("★",SUBSTITUTE(LEFT($A2,FIND(" ",$A2&" ")-1)&"---","-","★",COLUMNS($B:B)))-FIND("★",SUBSTITUTE("-"&LEFT($A2,FIND(" ",$A2&" ")-1)&"--","-","★",COLUMNS($B:B)))),"")
そして、B2セルをコピーして、B~D列の2行目以下のセル範囲に貼り付けて下さい。
これで、B~D列にa~cの文字列が自動的に表示されます。
尚、Excelの関数は、参照先のセルに対して切り取り、削除、挿入等を行った場合、セルの参照先がずれてしまうために、正しい計算処理の結果を得られなくなる事が普通なのですが、B2列に入力する関数を以下の様に改良しますと、A列のセルに対して、切り取り、削除、挿入等を行って、セルの位置関係が上下方向にずれてしまった場合でも、正しい結果が得られる様になります。(セルの位置関係が横方向にずれた場合に対しては、対応しておりません)
=IF(ISNUMBER(FIND(" ",INDEX($A:$A,ROW()))),MID(INDEX($A:$A,ROW()),FIND("★",SUBSTITUTE("-"&LEFT(INDEX($A:$A,ROW()),FIND(" ",INDEX($A:$A,ROW())&" ")-1)&"--","-","★",COLUMNS($B:B))),FIND("★",SUBSTITUTE(LEFT(INDEX($A:$A,ROW()),FIND(" ",INDEX($A:$A,ROW())&" ")-1)&"---","-","★",COLUMNS($B:B)))-FIND("★",SUBSTITUTE("-"&LEFT(INDEX($A:$A,ROW()),FIND(" ",INDEX($A:$A,ROW())&" ")-1)&"--","-","★",COLUMNS($B:B)))),"")
No.4
- 回答日時:
a~dの各文字列の文字数が1文字とか決まっているならラクですが、そうではないってことですよね?
先に、全角と半角のスペースを、どちらか一方のみに統一しましょう。置換の機能を使えば一瞬です。例えば半角スペースにするとします。A列全体を選択した状態で、Ctrl+H(置換のダイアログを起動)、「検索する文字列」ボックスに「 」(全角スペース)を、「置換後の文字列」ボックスに「 」(半角スペース)を入力し、「すべて置換」ボタンを押すだけ。
「-」も全角と半角が混じっているなら、同様に統一しておいてください。
置換が終わったら、次式を入力。全ての列を入力しないと、どこかの列でエラーが出ます。
B1 =substitute(substitute(f1,g1,),"-",)
C1 =substitute(substitute(g1,h1,),"-",)
D1 =h1
E1 =substitute(substitute(a1,f1,)," ",)
F1 =if(countif(a1,"* *"),left(a1,find(" ",a1)-1),"")
G1 =if(countif(f1,"*-*"),right(f1,len(f1)-find("-",f1)),"")
H1 =if(countif(g1,"*-*"),right(g1,len(g1)-find("-",g1)),"")
※注意1
a~dの4種類の文字列どうしで全く同一のものが含まれている場合は、置換によってグチャグチャになります。例えばbとcが同一とか、そんな場合です。そういうデータは別途、処理する必要があります。
※注意2
「" "」と「""」は異なるので、区別してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) googleスプレッドシートでカッコ内の文字数をカウントしたい 1 2023/01/17 15:52
- Excel(エクセル) LEFT関数で文字数を指定しないで取りだす方法 7 2023/06/30 09:49
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) VBA B列にある前から10文字のみ表示 3 2023/08/07 11:24
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Excel(エクセル) エクセルで文字列と数字が混在する列に書式設定したい。 3 2022/12/19 09:11
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの入力規則で2列表示したい
-
列の数字に100をかけたい
-
複数の文字列のいずれかが含ま...
-
SUMに含まれる範囲から特定のセ...
-
【EXCEL】IPアドレス範囲に該当...
-
エクセル:横長の表を改行して...
-
数式が入ったセルを含めて、数...
-
Excel上でのデータ数字が連番で...
-
【EXCEL】指定したセルの値を他...
-
C列にF列の担当者(A〜)を順番...
-
別のセルに値が入力されたら、...
-
エクセルVBAについて
-
入退社日より各月末の在籍者数...
-
エクセルで表示されている数字...
-
エクセルで曜日に応じた文字を...
-
EXCELでA列とB列の文字が合わせ...
-
EXCELのハイホン区切りの数字並...
-
エクセルで特定の文字を含むセ...
-
Excelで五十音順に並べ替えたい
-
エクセルで正解率を出す関数は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数の文字列のいずれかが含ま...
-
Excelの入力規則で2列表示したい
-
SUMに含まれる範囲から特定のセ...
-
数式が入ったセルを含めて、数...
-
Excel上でのデータ数字が連番で...
-
列の数字に100をかけたい
-
スペースとスペースの間の文字...
-
別のセルに値が入力されたら、...
-
エクセルで表示されている数字...
-
エクセルでセルの値分の個数の...
-
エクセル:横長の表を改行して...
-
[関数について]わかる方教えて...
-
エクセル関数に詳しい方教えて...
-
エクセルで、毎日の走行距離(...
-
エクセルのsumifでかけ算してか...
-
HYPERLINKとADDRESSとMATCHの組...
-
エクセルで曜日に応じた文字を...
-
入退社日より各月末の在籍者数...
-
エクセルで1列全部10倍したい
-
エクセルで小数を含む数値の抽出
おすすめ情報