• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:COLUMN(1:1)の意味を教えてください)

Excelの電話番号からハイフンを取り除く方法

このQ&Aのポイント
  • 電話番号からハイフンを取り除くExcelの関数について質問です。末尾のハイフンだけは取りたくない場合はどうすればいいか教えてください。
  • 質問者は、「=SUBSTITUTE(A1,"-","")&RIGHT(A1,MATCH("*"&RIGHT(SUBSTITUTE(A1,"-",''),1)&"*",INDEX(RIGHT(A15,COLUMN(1:1)),),0)-1)」という関数を見つけたが、COLUMN(1:1)やRIGHT(A1,COLUMN(1:1))の意味が理解できずに困っているそうです。
  • 質問者は、関数の部分は他の人の修正したものを利用しており、具体的な意味はわからないと述べています。COLUMN(1:1)は配列を返しているが意味がわからないし、RIGHT(A1,COLUMN(1:1))でなぜ「8」が返されるのかもわかりません。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

>実は、前半のSUBSTITUTE(A1,"-","")部分以外は全く自分ではわからず、似た様な関数が掲載されていたネット部分を修正して作りました。 >COLUMN(1:1)はどういう意味なのでしょうか? エクセル2003までなら、COLUMN(1:1)は1行目の列番号の配列、すなわち1から256までの連続した数字(配列)を返します。 ちなみに最大文字数がもっと短いならCOLUMN(A1:P1)などに変更することも可能です(この方が計算負荷が少ない)。 数式の後半部分を説明すると、 INDEX(RIGHT(A15,COLUMN(1:1)),)の部分は RIGHT関数でA15セル(A1セルの間違い?)の文字列の右から1文字、2文字、・・・、256文字(文字数が満たない場合は最大文字数)を切り取った文字列の配列を取得し、その配列をINDEX関数で範囲に変換しています(Ctrl+Shift+Enterで確定するならINDEX関数は不要)。 例えば、「0312345678---」なら、「-」「--」「---」「8----」「78---」・・・と続く配列になります。 "*"&RIGHT(SUBSTITUTE(A1,"-",""),1)&"*"の部分は A1セルから「‐」を削除した文字列の一番右の文字の前後にワイルドカード文字を挿入して、一番右の文字の前後に何か文字列が続いている(何もない場合もOK)文字列を示しています。 例えば、「0312345678---」なら、「*8*」になりますが、実際の数式では前方の文字列はMATCH関数で考慮する必要はないので前半の「"*"&」の部分は必要なく、「RIGHT(SUBSTITUTE(A1,"-",""),1)&"*"」の部分だけでOKです。 MATCH("*"&RIGHT(SUBSTITUTE(A1,"-",""),1)&"*",INDEX(RIGHT(A15,COLUMN(1:1)),),0)の部分は MATCH関数は、上記のワイルドカード文字を含む検索値(すなわち最後のハイフンの前の文字列の前後に任意の文字列が続く)をRIGHT関数で元の文字列の右から1文字、2文字、・・・、256文字を切り取った文字列の配列の中から検索し、最初に見つかったデータの位置を求めることができます。 この位置は、最後のハイフンの前の数字ですので(8---が最初にヒット)、これから1を引いた数が最後のハイフンの数になるわけです。

hy0423
質問者

お礼

MackyNo1さん、ありがとうございました。 お礼が遅れてすみません。 "*"&RIGHT(SUBSTITUTE(A1,"-",""),1)&"*"の部分は、最初の"*"&は不要なのですね。 >ちなみに最大文字数がもっと短いならCOLUMN(A1:P1)などに変更することも可能です(この方が計算負荷が少ない)。 こちらも全くわかりませんでした。 最大文字数は実はわかりませんが、電話番号なので一番長そうな国際電話を考えてもそれほど長くはならないんかもしれません、 できそうならやってみます。 ありがとうございました。

hy0423
質問者

補足

>RIGHT関数でA15セル(A1セルの間違い?) すみません。 そうですね。 A1の間違いでした。 ご指摘ありがとうございました。

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

その他の回答 (4)

回答No.5

#1です。回答が表示されないようなのでもう一度 かなりややこしい式ですね。 問題の部分 =RIGHT(A1,MATCH("*"&RIGHT(SUBSTITUTE(A1,"-",""),1)&"*", INDEX(RIGHT(A1,COLUMN(1:1)),),0)-1) 1. RIGHT(SUBSTITUTE(A1,"-",""),1) は いちばん右の数字 サンプルの場合8 2. "*"&RIGHT(SUBSTITUTE(A1,"-",""),1)&"*" アスタリスクを前後に入れる(ワイルドカード) "*8*" 3. RIGHT(A1,COLUMN(1:1)) 右の1文字分を配列の1列目("-")、右2文字分を配列の2列目("--")・・・256列目("03-1234-5878---") サンプルの配列は(配列定数で途中まで提示) {"-","--","---","8---","78---","878---","5878---","-5878---","4-5878---","34-5878---","234-5878---","1234-5878---","-1234-5878---","3-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---"} 4. INDEX関数は 配列を認識させるためのもの ([Ctrl]+[Shft] +[Enter] で確定すればINDEX関数不要) 5. MATCH関数で、8を含んだものを探す。   4列めに最初に見つかるので 4 ここまで分かればよいでしょうか? 考え方は似ていますが =SUBSTITUTE(A1,"-","")&RIGHT(A1,LEN(A1)+1-FIND("--",A1&"--")) "--"を検索させ、右の"-"をくっつける。

hy0423
質問者

お礼

CoalTarさん、再びありがとうございます。 震災でシステムがストップしてしまいまして、システムがようやく今週より稼動し始めました。 それまでにたまった仕事を今週ずっとやっていました。 今回質問させていただいた数式は、震災以前に「どうにかして」と言われていた課題の1つでした。 それで残業が続いたりした為、お礼が遅れて申し訳ございませんでした。 皆さんのおかげで理解出来たような気がいたします。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

>なぜCOLUMN(1:1)だとうまくいくのに、1だとダメなのでしょうか。 >そもそも、COLUMN(1:1)というのはどういうことなのでしょうか。  ⇒INDEX関数の範囲として、RIGHT関数の文字数を1・2・3・・・で配列化とする工夫の為に使用しているから1では駄目です。   例えば、配列は、(1)"-",(2)"--",(3)"---",(4)"0---"・・・になり、検索値の"*0*"から   4が戻され、-1とする事で入力セルの末尾ハイフンの文字数の3が求まることになる。   電話番号のハイフンの構成バリエーションが色々あり且つ、末尾のハイフンの個数がランダムで   ある為、かなり練られた数式と思います。

hy0423
質問者

お礼

mu2011さん、コメントありがとうございます。 お礼が遅れてすみませんでした。 >⇒INDEX関数の範囲として、RIGHT関数の文字数を1・2・3・・・で配列化とする工夫の為に使用しているから1では駄目です。 そうなんですね。 COLUMN(1:1)が1を返しているからと、1にしてはだめなんですね。 配列の理解が乏しいのと、複数のセル範囲のみならず、1つのセルの中で文字を分割して配列化できるという発想がなかったので混乱していました。 皆さんが教えてくださったおかげで少しずつわかってきました。 ありがとうございました。

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

「末尾のハイフン」より左のハイフンが二つと決まっているなら、次式で如何かと。 =SUBSTITUTE(SUBSTITUTE(A1,"-","",1),"-","",1)

hy0423
質問者

お礼

mike_gさん、コメントありがとうございました。 お礼が遅れましてすみませんでした。 実は末尾のハイフンより左のハイフンも2つとは限らないのです。 私も一瞬mike_gさんがおっしゃるような式でいいかなと思ったのですが、2つ以上のケースもたまにあることを思い出してしまいました。 ありがとうございました。

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

かなりややこしい式ですね。 問題の部分 =RIGHT(A1,MATCH("*"&RIGHT(SUBSTITUTE(A1,"-",""),1)&"*",INDEX(RIGHT(A1,COLUMN(1:1)),),0)-1) 1. RIGHT(SUBSTITUTE(A1,"-",""),1) は いちばん右の数字 サンプルの場合8 2. "*"&RIGHT(SUBSTITUTE(A1,"-",""),1)&"*" アスタリスクを前後に入れる(ワイルドカード) "*8*" 3. RIGHT(A1,COLUMN(1:1)) 右の1文字分を配列の1列目("-")、右2文字分を配列の2列目("--")・・・256列目 サンプルの配列は(配列定数で途中まで) {"-","--","---","8---","78---","878---","5878---","-5878---","4-5878---","34-5878---","234-5878---","1234-5878---","-1234-5878---","3-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---","03-1234-5878---"} 4. INDEX関数は 配列を認識させるためのもの ([Ctrl]+[Shft] +[Enter] で確定すればINDEX関数不要) 5. MATCH関数で、8を含んだものを探す。   4列めに最初に見つかるので 4 考え方は似ていますが =SUBSTITUTE(A1,"-","")&RIGHT(A1,LEN(A1)+1-FIND("--",A1&"--")) "--"を検索させる

hy0423
質問者

お礼

CoalTarさん、回答ありがとうございました。 お礼が遅れてすみませんでした。 ご丁寧に回答していただき、とても感謝しています。 質問事項のみならず(こちらも知りたかったのですが)、[Ctrl]+[Shft] +[Enter] で確定した時についても教えていただき、ありがとうございます。 だいぶ関数の意味がわかるようになりました。 まだ配列の部分は何となくでしかありませんが、だいぶわかるようになった気がします。 ありがとうございました。

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

関連するQ&A

  • エクセルで電話番号を - で分割する方法

    エクセルで電話番号のデータが入っています。ハイフンごとで3つのセルに分けて取り出す関数があれば教えてください。 01-2345-6789 012-345-6789 0123-45-6789 01234-5-6789 050-1234-5678 とハイフンの位置も桁も種類があります。左右の部分はLEFTとRIGHTで取り出せるのですが真ん中がうまく取り出せません。 よろしくお願いします。

  • エクセルでこれはどういう意味なんでしょうか? =

    エクセルでこれはどういう意味なんでしょうか? =RIGHT(A1,LEN(A1)-1) あと、これも =SUBSTITUTE(A1,LEFT(A1,1),"")

  • 電話番号の分割

    上司に電話番号を入力したエクセルシートを渡され 1234567890 09012345678 0501234567 ... これらを市外局番と次の番号と最後の番号に分けて表示するように言われました。 上で言うと              b列  c列 d列 1234-56-7890なので1234  56 7890 090-1234-5678なので090 1234 5678 050-123-4567なので050  123 4567というふうに a列にはハイフンの入ってない電話番号が入力されてます。 自分で考えたことは電話番号のa列のデータにハイフンを入力していって b列はLEFT関数とFIND関数で求めてc列ができなくて d列はたぶんすべて4桁なのでRIGHT関数でしようかと 思いましたがc列の求め方がわからず、できないままで... もっと簡単に??できる方法はないかと思いました。よろしくお願いしますm(__)m

  • 【至急】COLUMNについて・・・

    万年カレンダーを作成する事になり以下の関数の解説を しなければならなくなりました。。。 万年カレンダー作成者の説明では理解できず、 解説をしようにも出来ません。 その関数とやらがこれです。 =IF(MONTH(DATE($B$4,$B$5,1)+COLUMN()-COLUMN($F$7))=$B$5,COLUMN()-COLUMN ($F$7)+1,"" 足りない頭で考えまくって出した答えが 「簡単に言うと、COLUMN関数は、【何列目であるか】を求める関数です。 【+COLUMN()-COLUMN($F$7)】これはDATE関数で求めた(年,月,日)がどの 場所からスタートするのかの基準を表します。 この場合、F列の7行目にDATEが始まる。ということになります。 その後に続く【=$B$5,COLUMN()-COLUMN($F$7)+1,""】は 左上の月の部分(今回であれば2月)に+1つきされると3月になるが、 その場合は表示しない。という意味になります。 因みに、【""】とは空欄(表示しない)という意味です。」 と解説したところ、全然違うとのこと・・・。 これ以上上手く説明出来る自信が有りません・・・・。 関数が得意な方、どうかお助け下さい!!!

  • Accessでの置換

    Access97を使用しています。 置換のマクロ化って出来ますか。 具体的に言うとボタン一つで 「電話番号」のハイフンを消したいのです。 今はテーブルを開いて編集-置換で検索する文字列に 「-」、置換後の文字列に何も入れずにすべて置換しています。 Excelですと「SUBSTITUTE」という関数が一番近いのですが、 Accessでそれに準ずるものってあるのでしょうか? イベントプロシージャでの記述で教えて いただけると一番助かります。

  • SUBSTITUTEについて※複雑です

    RIGHT(SUBSTITUTE(A1,B1,""),3)    A     B 1 1508080  080 上記の様な関数を使用して、 右から4~6桁目の数字を取り出しています。 今までちゃんと出来ていたのですが、 A1に「1508080」という数字が入ったときに、 「508」を取り出したいのですが、 結果が「080」となってしまいました。 SUBSTITUTEの計算で、右からではなく、 左から080を抽出しているんだと思いますが、 どうすれば結果が「508」になるのでしょうか? 説明が下手ですみません。

  • accessで複数カラムの組み合わせ文字列をselect

    エクセルVBAからaccessにクエリを送る際のselectクエリの書き方について教えてください。 VBAから指定する文字列strが、accessのカラムa,b,cのハイフン区切りの文字列と一致した場合のみselectしたいのですが、select文はどのように書けばよいでしょうか? (VBAでstrをハイフンなしにばらさない場合) ------------------- str='0-1-2' ↓ select * from aaa where カラムa=0 and カラムb=1 and カラムc=2 ↓ 「and」なしで書く場合は? -------------------

  • エクセルのデーターからハイフンを削除したい。

    エクセルのデーターの住所の欄に余分なハイフンが入っているのを一括に削除出来る方法があれば教えて頂きたい。 部屋番号用のハイフンが入っています。 この部屋番号用のハイフンだけ1と4の末尾のハイフンだけを削除する方法はありませんでしょうか? 今のデーター  1 1ー2ー3ー  2 1ー2ー3ー101  3 1ー2ー3ー102  4 1ー2ー4ー この様にしたい  1 1ー2ー3  2 1ー2ー3ー101  3 1ー2ー3ー102  4 1ー2ー4 初心者なので宜しくお願いします。

  • 異なるカラムに値がまとめて格納されているランキング

    異なるカラムに値がまとめて格納されている場合に、「対応する値を足した結果」の合計降順でランキング表示させる方法を教えてください ※DB … MySQL ※不正解0、正解1 レコードA ・「正解不正解カラム」0,1,1 ・「問題番号カラム」 2,1,3 レコードB ・「正解不正解カラム」0,1,1,1,1,1,0,1,1,0 ・「問題番号カラム」 9,1,3.4.5.8.6.7.2.10 こういうレコードがたくさんある時、 正解数が多い問題番号順に並べるにはどうしたらよいでしょうか? (結果イメージ) ・1位 … 問題番号10 … 正解数10人 ・2位 … 問題番号2 … 正解数8人 ・3位 … 問題番号5 … 正解数4人

    • ベストアンサー
    • PHP
  • エクセルの関数でhtmlの削除は可能ですか?

    HTMLが書き込んであるエクセルファイルがあるんですが、 そのタグだけを関数で取り除きたいです。 今後もhtmlを書き込んで別シートではhtmlを取り除いたものを、 というのが必要なので、関数でできればと思います。 いろいろ考えて、 =SUBSTITUTE(a1,<*>,"") とか思いついてみたんですが、<*>の部分で駄目みたいです。 よろしくお願いします。

専門家に質問してみよう