• ベストアンサー

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

こんにちは。 これから年賀状の季節ということで、エクセルでリストを作成し、印刷にまでこぎつけたいと思うのですが、「(株)や(有)を除いた会社名順に並び替えたい」と考えております。 そこで、こちらの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) このようにわけられるものでしょうか。 アドバイス、よろしくお願いします!

  • paochi
  • お礼率32% (130/406)

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

  • ベストアンサー
回答No.2

まず、式の中に出てくる PHONETIC(A2)は、A2セルの振り仮名を取得する関数です。 文字が長いのでA$に置き換えます。 =CONCATENATE(LEFT(A$,FIND("(",A$,1)-1),MID(A$,FIND(")",A$,1)+1,LEN(A$))) 次に FIND("(",A$,1)はA$の1文字目から検索して、( を探し、文字の場所を数値で返します。 例 A$="(かぶ)○○商事"なら 1   A$="△△商事(かぶ)"なら 5 長いのでB#に置き換えます 同様に FIND(")",A$,1)をC#に置き換えます =CONCATENATE(LEFT(A$,B#-1),MID(A$,C#+1,LEN(A$))) ここまで置き換えると分かると思いますが、 LEFT(A$,B#-1)  と  MID(A$,C#+1,LEN(A$))  を  CONCATENATE  で結合しています。 LEFT(A$,B#-1)はA$の文字列の左からB#-1文字目までを取り出し、 LEN(A$)はA$の文字の数を返す関数ですので、 MID(A$,C#+1,LEN(A$))はA$のC#+1から文字の最後までを取り出す。 (正確には MID(A$,C#+1,LEN(A$)-C#+1)だと思いますがLEN(A$)を指定すれば、残り全てを取り出すという事でしょう) よってA1セルのふりがなの1文字目から(の1文字前までと、)の1文字後ろから最後までを取り出し結合するという事になります。 長い文になってよけい分かりにくかったらすみません。

paochi
質問者

お礼

こんにちは。 アドバイスありがとうございました。 また、お礼のお返事が遅くなってすみません。 置き換えての説明がとてもわかりやすかったです。 そういえば、昔数学の先生に教わっていたような なつかしい感覚を覚えました^^ やっと理解できました。 ありがとうございましたm(_ _)m

その他の回答 (1)

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

関数といっても、タダ単なる組み合わせにしかすぎません。 ()を除く処理をしてますね。 まず、LEFT(PHONETIC(A2),FIND("(",PHONETIC(A2),1)-1) 最初にある ( までの内容を取り出す。 次にMID(PHONETIC(A2),FIND(")",PHONETIC(A2),1)+1,LEN(PHONETIC(A2))) )から以降の内容を取りだす。

paochi
質問者

お礼

こんにちは。 アドバイスいただきましてありがとうございました。 やっと理解できました^^

関連するQ&A

  • エクセル文字列抽出関数についての補足説明のお願い

    エクセルの使用歴は長いのですが、簡単な関数以外使ったことがない初心者です。 文字列の中から、英字と数字を抜き出す関数を検索し、たどり着きました。 やりたいことは解決したのですが、入力した式の意味がわかりません。 以下の式で、関数の書式や目的は調べることが出来ますが、なぜそう言う処理を行うと、 英字と数字に分離できるかを初心者にわかりやすく教えて下さい。 宜しくお願い致します。 -------------------------------- A1に「aaaa1111」があるとき B1に  =LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"))-1) C1に  =MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),LEN(A1)) で「aaaa」と「1111」が分離できます 以上

  • Excel 関数

    和暦を西暦にしたいです。 28/12/7→2016/12/7 10/12/26→1998/12/26 27/9→2015/9 5/6→1993/6 =(LEFT(G12,2)+1988)&MID(G12,3,LEN(G12-3)) この式だと5/6が1993/6とならず#VALUE!と出ます。 なぜですか。どうしたら1993/6になりますか。

  • エクセルの関数について

    いつもお世話になっております。 エクセルの関数についてお尋ねします。 (例) A1に 12/09/2013 16:00:06 という文字列があり、これをB1でシリアル値に変更しようと考えています。 MID(A1,7,4)&"/"&LEFT(A1,5)&MID(A1,11,9) ⇒ 2013/12/09 16:00:06(文字列) (MID(A1,7,4)&"/"&LEFT(A1,5)&MID(A1,11,9))*1 ⇒41612.7086111111 と*1する事によってシリアル値に変換されてるわけですが、この『×1』はどのような意味なのでしょうか? 知らないで使っているのが気持ち悪いのでどなたかよろしくお願いいたします。

  • エクセルで文字列を抽出する関数

    エクセルでデータ処理をしています。 例えばA列に Iwate kenichi Akita hachiro gata (1992) Yamagata shi,1905 というデータがあり、同じ関数を使ってそれぞれB列に Iwate kenichi Akita hachiro gata Yamagata shi と抽出したいので、 =IF(FIND("(",A1),LEFT(A1,FIND("(",A1)-1),IF(FIND(",",A1),LEFT(A1,FIND(",",A1)-1),A1))という式を作ってみましたが、うまく処理できません。 どのような式を作れば上手くいきますか?マクロは使えませんので、関数でお願い致します。

  • エクセルについて教えてください<(_ _)>

    エクセルの式に数時間悩んでます・・。 外はすでに明るくなっていて、時間がなくなってきたのでみなさまに力を貸して頂きたく質問させてもらいます<(_ _)> 6時間掛かっても出来ませんでした(T_T) エクセルの、セル内の一部を取り出したいのです。 A1のセルに「あいうえお[マル]1-2[××会社]」と言うデータが入っていて、[××会社]の部分だけ取り出ししたいのです。 ただ、会社名は、5社だけです。 なお、データーによって、文字数はバラバラです。 会社名も、文字数バラバラです。 私が考えていたのは、MID(A1,FIND("[××",A1),LEN(A1))です。 この式ですと、××会社は出力出来ました。 同じ方法で、◯◯◯会社も出来ました。 MID(A2,FIND("[××",A2),LEN(A2)) なので、他も同じように式を作り、ORなどで1つの式にするのは難しいでしょうか? 会社別では、なくランダムにデーターが並んでいて、量が多い為1つの式でそれぞれ出力できたらとっても助かります・・。 自分の力では出来ませんでした・・(>_<) 式を入力するたび、”#VALUE”が並んでいて泣きそうです・・。 (ORとかIFとか使ってみたのですが・・・) よろしくお願いします。<(_ _)>

  • Excel 関数について

    AND ASC AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS COLUMN COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS DATE DAY FIND HLOOKUP HOUR IF IFERROR INDEX INDIRECT JIS LARGE LEFT LEN LOWER MATCH MAX MEDIAN MID MIN MINUTE MOD MODE MONTH NOT OR PHONETIC PROPER RANK RIGHT ROUNDDOWN ROUNDUP ROW SECOND SMALL SUM SUMIF SUMIFS TEXT UPPER VLOOKUP WEEKDAY WORKDAY WORKDAY.INTL YEAR これくらい自由に使えますが、一般企業で使用するならこれくらい使えればいいですか。 また、これはよく使うという関数を教えてください(表記以外で)

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

    質問番号: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 という順番になってしまいます。

  • CONCATENATE関数を使うメリットは?

    式 =A2&A3&A4&A5 と式 =CONCATENATE(A2,A3,A4,A5) とは同じ結果になりますよね? 前者より後者の関数を使った方が良いのはどんな場合かを知りたいのです。長年に亘って Excel を使い続けているけど、文字列結合をするときに私は CONCATENATE を使ったことがありません。 添付図をご覧ください。 セル B2 に簡単な式 =B1&A2 を入力して、このセルのフィルハンドルをマウスで「エイヤッ!」とダブクリするだけで、セル B5 には式 =CONCATENATE(A2,A3,A4,A5) と同じ効果が表示されます。このように、“CONCATENATE結合”より“&結合”の方が絶対便利と思っているので、私の知らない CONCATENATEの特長を知りたくてお尋ねしています。

  • 関数で文字列と数字の組合せから数字のみを取り出す

    お世話になります。 文字列+数字から数字のみを取り出す関数はエクセル技道場などで紹介されている =MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&1234567890)),LEN(A1)*10-SUM(LEN(SUBSTITUTE(A1,{0,1,2,3,4,5,6,7,8,9},))))で可能ですが、たとえばSSPAS2.5などのように小数点を含む数字の場合結果は2.となります。正しい結果を得るためにはどのような関数を使えばいいのでしょうか。数字には整数、少数点を含むものが混在しているとします。 どなたかよろしくお願いします。

  • エクセル CONCATENATE関数

    エクセル2003のCONCATENATE関数で作ったテキストを関数化(数式化)できないでしょうか。 たとえば、C3のセルに下のCONCATENATE関数を入れ =CONCATENATE(D3,E3,F3) 文字列"=sum(A1:A10)" を表示させ、 その後CONCATENATE関数をのぞき、=sum(A1:A10)を計算させたいのです。 CONCATENATE関数で合成されたセルをコピーし、形式を選択して貼り付けから値だけを貼り付けても、なぜかうまくいきません。 =sum(A1:A10)とC3に表示され、計算は実行されません。

専門家に質問してみよう