• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:指定した記号の前半と後半を取り出したい)

指定した記号の前半と後半を取り出す方法

このQ&Aのポイント
  • 対象文字列に特定の記号が複数ある場合、最後の記号を基準に文字列を分ける方法が知りたいです。
  • 現在使っている関数では、特定の記号を基準に文字列を分けることができますが、複数の記号がある場合は最初の記号を基準に分かれてしまいます。
  • 例えば、「田中■けんじ■30歳■アメリカ」という文字列がある場合、最後の記号の前半と後半をそれぞれ抽出したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

回答No1です。最後の文字列を取ったものも表示したいとのことでしたね。 仮にA2セルの文字列で最後の文字列は回答1の式で求められます。この回答1の答えをB2セルに表示させるとして最後の文字列を取った文字列をB3セルに表示させるとしたらB3セルには次の式を入力します。 =SUBSTITUTE(A1,"■"&B2,"") 回答1で後半の部分を回答2で前半の部分を取り出すことができますね。 ■が10個以上ついても問題なく処理できます。

excel110
質問者

お礼

無事分割加工ができました。 大変助かりました。もっと勉強しないと。。。 皆様ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

こんにちは! すでに回答は出ていますが、VBAでの一例です。 データはA2セル以降にあり、最後の「■」より前部分をB列に、 最後の「■」より後の部分をC列に表示するようにしてみました。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, str As String For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If InStr(Cells(i, 1), "■") > 0 Then For k = Len(Cells(i, 1)) To 1 Step -1 str = Mid(Cells(i, 1), k, 1) If str = "■" Then With Cells(i, 2) .Value = Mid(Cells(i, 1), 1, k - 1) .Offset(, 1) = Mid(Cells(i, 1), k + 1, Len(Cells(i, 1))) End With Exit For End If Next k Else Cells(i, 2) = Cells(i, 1) End If Next i End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

excel110
質問者

お礼

無事分割加工ができました。 今回は関数で作業しましたが、提案いただいたマクロも次回試してみます。 皆様ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

No2の回答者ですが、参考までに。 もしTRIM関数を使って■の右側の文字を表示したいなら、以下のような数式にする方が簡単です。 =TRIM(RIGHT(SUBSTITUTE(A2,"■",REPT(" ",100)),100)) また、これまでのMIDを使った右側を取得する数式も、文字数をわざわざ関数で求めるのではなく、以下のように十分大きい数に設定する方が簡単です。 すなわち「FIND("■",A2)」の部分を提示したMAX関数に変更します。 =MID(A2,FIND("■",A2)+1,100)

excel110
質問者

お礼

一言関数と言っても、いろいろ方法がありますよね。 勉強になります。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#192382
noname#192382
回答No.4

次のマクロを使えば望みのデータが抽出できます。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2013/3/6 ユーザー名 : ' Dim kazu As Integer, ii As Integer kazu = Len(Cells(2, 1)) 'A2のセルのデータの次数 For ii = 2 To kazu '1字ごとに"■"であるかどうかを後ろから2番目の字から前へ次々に調べる 'MsgBox Mid$(Cells(2, 1), (kazu - ii + 1), 1) If Mid$(Cells(2, 1), (kazu - ii + 1), 1) = "■" Then 'MsgBox ii Exit For '"■"が見つかったらループから抜け出る Else End If Next 'ループの終わり MsgBox Left$(Cells(2, 1), (kazu - ii)) '抽出の結果 ' End Sub

excel110
質問者

お礼

無事分割加工ができました。 今回は関数で作業しましたが、提案いただいたマクロも次回試してみます。 皆様ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

左側の切り出し文字が50文字以内なら、例えば以下のような数式で■の左の文字を取得できます。 =LEFT(A2,MAX(INDEX((MID(A2,ROW($1:$50),1)="■")*ROW($1:$50),))-1)

excel110
質問者

お礼

無事分割加工ができました。 大変助かりました。もっと勉強しないと。。。 皆様ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

A2セルに文字が有るとしたら次のような式にします。 =TRIM(MID(SUBSTITUTE(A1,"■",REPT(" ",100)),(LEN(A1)-LEN(SUBSTITUTE(A1,"■","")))*100,100)) REPT関数の引数である" "は""の間に半角のスペースを入れます。 SUBSTITUTEの引数では半角を入れません。

excel110
質問者

お礼

無事分割加工ができました。 大変助かりました。もっと勉強しないと。。。 皆様ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 特定の記号に囲まれた字を取り出すには

    エクセルのある質問の追加質問です。バージョンは2003でお願いします。 【質問】特定のセルの文字列から特定の記号に囲まれた値だけを返したい    具体的には、ちょっとした文章が入力されているセルから{}の中の文字を取り出したい。 これに対し 【回答】=MID(A1,FIND("{",A1),FIND("}",A1)-FIND("{",A1)+1) とありました。 これで、たとえば 「よくがんばった。{感}動した」 → {感} を取り出すことができます。 これで、{}も残さずに、本当に中の字だけ 「よくがんばった。{感}動した」 → 感 としたいとき、もちろん上記の式を作ったあと{}を検索削除してもよいのですが 一回でできるラクな方法はありますか。

  • このエクセルの複雑な関数を訳してください!

    こんにちは。 これから年賀状の季節ということで、エクセルでリストを作成し、印刷にまでこぎつけたいと思うのですが、「(株)や(有)を除いた会社名順に並び替えたい」と考えております。 そこで、こちらのOkwebで検索したところ、下記のような式がアドバイスされていました。とてもありがたいです。 ただ、こちらをそのまま使わせていただいてもかまわないのですが、式に興味を持ち、自分で辞書をひいて調べたところ、構造が理解できませんでした。 そこで、どなたかこちらのエクセルの式を訳していただけないでしょうか。 =CONCATENATE(LEFT(PHONETIC(A2),FIND("(",PHONETIC(A2),1)-1),MID(PHONETIC(A2),FIND(")",PHONETIC(A2),1)+1,LEN(PHONETIC(A2)))) CONCATENATE関数で、LEFT関数・MID関数・LEN関数で出したものを結合する? ・LEFT(PHONETIC(A2),FIND("(",PHONETIC(A2),1)-1) ・MID(PHONETIC(A2),FIND(")",PHONETIC(A2),1)+1 ・LEN(PHONETIC(A2) このようにわけられるものでしょうか。 アドバイス、よろしくお願いします!

  • excelVBAで、Midの引数をLenで指定できる?

    ワークシートSheets1上のセルA1に、次のような文字列があり、 Length 50.0mm この中の、数字の部分だけをユーザーフォームのtextbox1に抜き出したいと思っています。 Length と、単位mmは全ての場合で共通ですが、数字は50.0の場合も5.0の場合もあり、文字数がまちまちです。 textbox1.value=Mid(Sheets("Sheets1").Range("A1").value, 8,Len(Sheets("Sheets1").Range("A1").value-2) のようにMid関数の引数にLen関数を使ったり、 x=Len(Sheets("Sheets1").Range("A1").value textbox1.value=Mid(Sheets("Sheets1").Range("A1").value, 8,x-2) のように変数xを介してみたりしたのですが、mmが表示されてしまいます。 (ちなみにLenを使わずx=13と書くと、mmなしの数値だけがうまく表示されます) VBAはトライ&エラーで使っている状態で、セルの取り扱い(.valueとか.textとか)や変数の宣言はかなり適当です。 この辺りが間違っているんでしょうか?? できればMidとLenを使った解決法、それが無理なら他の方法でも結構ですので、ご教授頂けると助かります。 よろしくお願いします。

  • エクセル:特定文字の前後抽出で、特定文字がない場合

    D列にあるテキストの中から、「>」前後の文字を抜き出すために 下記の数式を使っていたのですが、 ■>より前 =LEFT(D2,FIND("/",D2,)-1) ■>と>の間 =MID(D2,,FIND("/",D2,)+1,FIND("/",D2,,FIND("/",D2,)+1)-FIND("/",D2,)-1) ■>の後ろ =RIGHT(D2,,LEN(D2,)-FIND("/",D2,,FIND("/",D2,)+1)) D5やD6のような例外があることが分かりました。 ABC列のように、>が無い場合はカテゴリ1にするようにしたいのですが どのようにしたらよいでしょうか。

  • 文字抽出

    エクセル初級者です。マクロは分かりません。 セルに ”漢字 半角スペース (ピンイン表記)” されています。 例)麻婆豆腐 (mápó dòufu) これから漢字とピンインを分けて抽出したい。 対象のセルの列には漢字は1~7文字で文字数に応じてピンインも変化します。 FIND,MID,LEFTなどの関数を調べてみましたが、所望には至りませんでした。 何かアドバイスいただければ有難く。

  • 文字列の分解

    1つのセルに入力された文字列を分解したいのです。 例えばφ20 +0.010/+0.001と有る場合別のセルにφ20、+0.020、+0.001と分解したいのです。 =MID(C1,1,FIND(" ",C1)-1) =MID(C1,FIND(" ",C1)+1,6) =MID(C1,FIND("/",C1)+1,FIND("/",C1)) としているのですが、文字列に” ”や”/”がない場合は#VALUE!となり表示出来ませんし、+0.010の部分の桁が増減すると上手く表示が出来なく成ります。 何かいい方法は無いでしょうか?

  • マクロ記録実行で実行時エラー'1004'発生

    excel2010 B2セルに文字列が入っています。 文字と数値の混載です。 数値の位置は不定です。 L2のセルで、下記判定をします。 B2セルの文字列(約20文字程度)の左から4番目がドだったら、数値を抽出、ド以外だったら空白。 WEBで計算式があったので、それをそのままマクロの記録としました。 Range("L2").Select ActiveCell.FormulaR1C1 = _ "=IF(RIGHT(LEFT(RC[-10],4),1)=""ド"",MID(RC[-10],1/MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))/ROW(INDIRECT(""1:""&LEN(RC[-10]))),)),MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))*ROW(INDIRECT(""1:""&LEN(RC[-10]))),))-1/MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))/ROW(INDIRECT(""1:""&LEN(R" & _ "),))+1)*1,"""")" Range("L3").Select で記録されます。 上記を、マクロの実行すると実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。 と表示されます。 何がおかしいのでしょうか? シートで、マクロでなく、L2セルでF2リターンとする分には、数値が表示されます。 下記は、L2の中身です =IF(RIGHT(LEFT(B2,4),1)="ド",MID(B2,1/MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))/ROW(INDIRECT("1:"&LEN(B2))),)),MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))*ROW(INDIRECT("1:"&LEN(B2))),))-1/MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))/ROW(INDIRECT("1:"&LEN(B2))),))+1)*1,"")

  • エクセルのセル内の操作について

    いつもお世話になっております。 A1セル【01/29/2013 08:09:46】(文字列)→A2セル【2013/01/29 08:09:46】(日付)としたいのですが操作方法が分かりません。 A2セルに=DATE(MID(A1,7,4),LEFT(A1,2),MID(A1,4,2))と入力して日付までは表示できたのですが、時間はどうすればよろしいのでしょうか? よろしくお願いします。

  • エクセルの並び替えの仕方を教えてください

    質問番号:5465291で関数で文字分離ができずに困っていますと質問し、分離はうまくいきましたが、結果に対して並び替えが思うようにできません。どなたか教えてください。 回答は、 A1に値が入っているとして、 B1に =IF(ISERROR(FIND("-",A1)),A1,MID(A1,1,IF(FIND("-",A1)>0,FIND("-",A1)-1,LEN(A1)))) C1に =IF(ISERROR(FIND("-",A1)),"",MID(A1,IF(FIND("-",A1)>0,FIND("-",A1)+1,LEN(A1)),9999)) でした。 1 12 2 2111 3 という順番になってしまいます。

  • 文字列の中から複数の数値を取り出す

    A1に画像のような2パターンの複数の数値入りの文字列が入っています この数値を1つずつ分けたい 当方 Excel 2013です 1. 現状 FIND の多用で実現できているのですが、数値が増えるとややこしくなるので、分かりやすくできないものかと質問しました。 2. また今後の拡張のため、数値の区切りを"/"でなく数値以外(2文字以上でもOK)で作れないかと模索しています。 気温28度、湿度54.7%、AB123C-456DEF7890GH-123.45JKL・・・ ←こんなのを 28 54.7 123 -456 7890 -123.45  ・  ・  ・ 合わせてご教授いただきたくお願いいたします。 一応、今使っているものを書いておきます、 A3  =VALUE(LEFT(A1,FIND("/",A1)-1)) A4  =VALUE(MID(A1,FIND("/",A1)+1,FIND("/",A1,FIND("/",A1)+1)-FIND("/",A1)-1)) A5  =VALUE(MID(A1,FIND("/",A1,FIND("/",A1)+1)+1,FIND("/",A1,FIND("/",A1,FIND("/",A1)+1)+1)-FIND("/",A1,FIND("/",A1)+1)-1)) A6  =IFERROR(VALUE(MID(A1,FIND("/",A1,FIND("/",A1,FIND("/",A1)+1)+1)+1,FIND("/",A1,FIND("/",A1,FIND("/",A1,FIND("/",A1)+1)+1)+1)-FIND("/",A1,FIND("/",A1,FIND("/",A1)+1)+1)-1)),LOOKUP(10^17,RIGHT(A1,COLUMN($1:$1))*1)) A7  =IFERROR(VALUE(RIGHT(A1,LEN(A1)-FIND("/",A1,FIND("/",A1,FIND("/",A1,FIND("/",A1)+1)+1)+1))),"-") 余談ですが A3 を =LOOKUP(10^17,LEFT(A1,COLUMN($1:$1))*1) とすると誤表示になった

このQ&Aのポイント
  • 楽々はがきから筆まめに住所録を移動させたのですが、印刷画面の宛名に名前が反映されなかったため、カードの「連名・情報」の左端の印刷にチェックが入っていないことに気づきました。
  • 全てのカードに印刷にチェックを入れる方法がわかりません。住所録からの操作でもできませんでした。
  • 解決策をご存知の方がいらっしゃいましたら、教えていただけると助かります。
回答を見る

専門家に質問してみよう