• ベストアンサー

エクセル2000 文字列を数字に変換

初心者です。 エクセルのA列に文字列として入っている「○分○秒」を数字として変換し 平均などを計算したいのですが どうすればよいでしょうか? ただし、「○分」や「○秒」とだけ入っているセルもあります。 例えばA列に 1分25秒 5秒 1分 というように入っています。 宜しくお願い致します。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

A列に文字列(数字も全角)時間が入っているとします。 (1)まずA列をX列にコピーします。(慎重のため) (2)B列の各セルに「分」があるかどうか判別する。   B1に関数式=FIND("分",A1)をいれる。   最終行まで複写する。   「分」が含まれて無ければ、#VALUE!となる。 (3)C1セルに関数式=IF(ISERROR(B1),"0分" & A1,A1)   を入れる。最終行まで複写する。秒だけのセルは0秒   ○○秒になる。これで形式が揃いました。 (4)C列の値だけをD列にコピーする。 (5)D列を選択する。 メニューの編集-置換をクリック。 検索する文字列-「分」を入力。 置換後の文字列-「:」(全角で可)を入力。 すべて置換をクリック。 (5)D列を選択する。 検索する文字列-「秒」を入力。 置換後の文字列-DELRTEキーを押す。 すべて置換をクリック。 (6)以上で、数字(半角)の10:20のように時刻時間になる。 24秒 1秒 15分30秒 10秒 8分34秒 は 0:24 0:01 15:30 0:10 8:34 となります。 (7)E1に演算式=HOUR(D1)を入れる。最終行まで複写する。 (8)F1に演算式=MINUTE(D1)を入れる。最終行まで複写する。(7)と(8)は分なのに「HOUR」、秒なのに「MINUTE」 なのは、それで偶然それで良い。 (9)最終行の次に、上例ではE6に=SUM(E1:E5)、F6に =SUM(F1:F5)を入れる(Σを使う等)。あと、秒の繰り上がりは省略。 (7)、(8)、(9)に付いてはもっとよい方法があるかもしれないが、取り急ぎ回答します。

katakko
質問者

お礼

丁寧に書いていただいありがとうございます。 初心者なので、ひとつずつ確認しながらやりました。 とても助かりました。 ありがとうございました。

その他の回答 (4)

  • Enfant
  • ベストアンサー率17% (3/17)
回答No.5

こんばんは 私も1案 A2にタイムが入っているとして B2に =SUBSTITUTE(SUBSTITUTE(A2,"分",":"),"秒","") (B列は作業列です。ここでは"分"を":"に、"秒"を""(ヌル)に置換してます。) C2に =IF(ISERR(TIMEVALUE($B2)),TIMEVALUE("0:"&$B2),TIMEVALUE($B2)) C列には時刻のシリアル値が入ります。

katakko
質問者

お礼

SUBSTITUTE・・・。 なるほど~!勉強になりました!! ありがとうございました。

回答No.4

「分」の方は要するに「"分"がなければ0、あったら1文字目から"分"の前まで」なので =IF(ISERROR(FIND("分",A1)),0,VALUE(ASC(LEFT(A1,FIND("分",A1)-1)))) でいいですね。 「秒」はもうちょっと複雑で、「"秒"がなければ0、あった場合に"分"がなければ1文字目 から"秒"の前までで"分"があるなら"分"の後ろから"秒"の前まで」ですから =IF(ISERROR(FIND("秒",A1)),0,VALUE(ASC(IF(ISERROR(FIND("分",A1)),LEFT(A1,FIND("秒",A1)-1),MID(A1,FIND("分",A1)+1,FIND("秒",A1)-FIND("分",A1)-1))))) となります。 一度にスパっと時刻形式にするなら上の2つをあわせて =TIME(0,IF(ISERROR(FIND("分",A1)),0,VALUE(ASC(LEFT(A1,FIND("分",A1)-1)))),IF(ISERROR(FIND("秒",A1)),0,VALUE(ASC(IF(ISERROR(FIND("分",A1)),LEFT(A1,FIND("秒",A1)-1),MID(A1,FIND("分",A1)+1,FIND("秒",A1)-FIND("分",A1)-1)))))) でできますが、なにしろfind("分",a1)だのfind("秒",a1)が繰り返し出てきてウザいですね。 2002ponさんのように別のセルで処理しておいた方が保守性がいいかもしれません。

katakko
質問者

お礼

>「"秒"がなければ0、・・・・ なるほど! 関数の中に関数・・・。まだ私には荷が重かったです。 でも、わかると面白いですね。 ありがとうございました。

  • 2002pon
  • ベストアンサー率48% (42/87)
回答No.2

マクロ以外で方法をひとつ。 少しセルを使いますけどね・・ 時間の文字列がA1にあるとします。 「分」と「秒」が使われているとします。 B1に、 =IF(ISERR(FIND("分",A1,1)),0,FIND("分",A1,1)) とします。これで、文字列の中の「分」の位置を取得します。 なければゼロ、一桁なら1、二桁なら2です。 C1に、 =ASC(IF(B1<>0,MID(A1,1,B1-1),0)) とします。「分」の前の文字を抜き出し、全角なら半角にします。 分がなければ、ゼロ、です。 D1に、 =IF(ISERR(FIND("秒",A1,1)),0,FIND("秒",A1,1)) とします。これで、文字列の中の「秒」の位置を取得します。 なければゼロ、一桁なら1、二桁なら2です。 E1に、 =ASC(IF(D1<>0,MID(A1,B1+1,D1-B1-1),0)) とします。。「分」と「秒」の間の文字を抜き出し、全角なら半角にします。 秒がなければ、ゼロ、です。

katakko
質問者

お礼

ISERR・・・気が付きませんでした。 とても助かりました。 ありがとうございました。

  • nana20
  • ベストアンサー率0% (0/2)
回答No.1

はじめまして、nana20です。 質問についての私なりの回答ですが、VBAマクロを使ってみてはどうでしょうか? 'ツール'の'マクロ'のVisual Basic Editorのことです。 ここにプログラムを記述すれば簡単にできます。 ただしkatakkoさんがどれだけプログラムを熟知されているかは私には分かりません。 簡単に説明させてもらいます。 用は、"時間"、"分"、"秒"しかセルに入っていないんですから、各セルのすべての文字を読み込み、これらの文字があればその前の文字をを数字として取得すればいいのではないでしょうか? つまり1分25秒なら、"分"ぼ前の1を数字で保存し、"秒"の前から"分"の後までの25を数字として読み込むのです。 これでできるとは思います。 では頑張ってください。 さようなら。

参考URL:
http://www.sanynet.ne.jp/~awa/excelvba/kouza.html
katakko
質問者

お礼

早速の回答、ありがとうございます。 VBAマクロ・・・ダメです。使ったことがありません。。 ですが、はじめます!!入門します。 ありがとうございました。