• ベストアンサー

エクセルについて

A1のセルの中に00,09,00,01,00,09,03という数字がありこの中の同じ数字を一つにまとめたいのですが、どのような関数をつかいますか?

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 回答No.2です。  前回の回答で申し上げました様に、Excelに標準的に備えられている関数の中には、その様な目的に使う事が出来る関数は御座いません。  ですが、VBAのマクロを使用しますと、「ユーザー定義関数」と言って、用途に合わせて新しい関数を自作する事が出来ますので、御質問の目的に合った関数を作ってみるというのも1つの方法です。  但し、ユーザー定義関数を使う事が出来るのは、そのユーザー定義関数用のマクロを設定したファイル内だけであり、別のファイルで同じユーザー定義関数を使うためには、その別のファイルにも、同様のマクロを設定しなければなりませんので、注意して下さい。  まず、Visual Basic Editorのウィンドウを開いて、標準モジュールの画面に次の様なVBAのマクロを記述して下さい。 Function DEDUPLICATE(protostring, delimiter) Dim i As Long Dim monostring Dim newstring As String monostring = Split(protostring, delimiter) newstring = monostring(0) If UBound(monostring) = 0 Then GoTo Label For i = 1 To UBound(monostring) If InStr(newstring, monostring(i)) = 0 Then newstring = newstring & delimiter & monostring(i) Next i Label: DEDUPLICATE = newstring End Function  その上で、「00,09,00,01,00,09,03」の中の同じ数字を一つにまとめた結果を表示させるセルに、次の様な関数(ユーザー定義関数)を入力して下さい。 =DEDUPLICATE("00,09,00,01,00,09,03",",")  尚、例えばA1セルに「00,09,00,01,00,09,03」と入力されている場合には、 =DEDUPLICATE(A1,",") となります。  又、例えば「00/09/00/01/00/09/03」の様に、「,」ではなく「/」で区切られている場合には、 =DEDUPLICATE("00/09/00/01/00/09/03","/") となります。  尚、もしもVisual Basic Editorの標準モジュールの開き方を御存じではない場合には、下記のURLのページを参考にして下さい。 【参考URL】  PCサポート aim > ユーザー定義関数   http://www.konomiti.com/vbaTop.html   http://www.konomiti.com/Ex_kan_05.html  右脳算数・数学 > VB入門 > 専門用語なしの vba マクロ 入門 2013 2010 2007 対応講義 第1部 > 第1話 開発タブを表示させよう   http://www5b.biglobe.ne.jp/~suugaku/vbakougi/new1/dai1koudai1wa.html

その他の回答 (2)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 その様な目的を関数だけで達する事は出来ませんので、次の様な方法は如何でしょうか?  今仮に、Sheet1のA1セルに「00,09,00,01,00,09,03」という文字列が入力されていて、B1セルにまとめた結果を表示させるものとします。  又、Sheet2の1行目の行を作業行として使用するものとします。  まず、Sheet2のA1セルに次の様な関数を入力して下さい。 =IF(Sheet1!$A1="","",","&Sheet1!$A1)  次に、Sheet2のB1セルに次の様な関数を入力して下さい。 =IF(COLUMNS($B:B)<LEN(A1)-LEN(SUBSTITUTE(A1,",",)),LEFT(A1,FIND("■",SUBSTITUTE(A1&",",",","■",COLUMNS($B:B)+1))-1)&SUBSTITUTE(REPLACE(A1,1,FIND("■",SUBSTITUTE(A1,",","■",COLUMNS($B:B)+1))-1,),","&REPLACE(LEFT(A1,FIND("■",SUBSTITUTE(A1&",",",","■",COLUMNS($B:B)+1))-1),1,FIND("■",SUBSTITUTE(A1,",","■",COLUMNS($B:B))),),),"")  次に、Sheet2のB1セルをコピーして、Sheet2の1行目においてB1セルよりも右側にあるセルに貼り付けて行って下さい。  次に、Sheet1のB1セルに次の様な関数を入力して下さい。 =IF(COUNTIF(Sheet2!1:1,",*?"),REPLACE(INDEX(Sheet2!1:1,MATCH(",",Sheet2!1:1,-1)),1,1,),"")  以上です。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.1

>どのような関数をつかいますか? 提示の値は文字列ですから「数字を1つにまとめる」と言うのはどのようにしたいのか分かりません。 2桁の7組の数字をカンマで区切っていますのでカンマを除いて14文字の数字としたいのか、先頭の0を除いた11桁の数値にしたいのかの2通りと考えられます。 前者の場合は次の関数式で14文字の数字に置き換えられます。 =SUBSTITUTE(A1,",","") 後者の場合は前者の結果を数値化すれば良いことになり、次の式で良いでしょう。 =VALUE(SUBSTITUTE(A1,",",""))     簡易型 ↓ =SUBSTITUTE(A1,",","")*1 =SUBSTITUTE(A1,",","")+0

関連するQ&A