時間の書式設定について

このQ&Aのポイント
  • Excelで別のところからコピーしてきたデータを計算にそのまま用いるためには、時間の書式設定が必要です。
  • 数値データを時間と分の形式に表示する方法は複数ありますが、新たな列を作らずに直接数値を認識させる方法は限定的です。
  • 数値をテキストにすることは容易ですが、逆にテキストを数値として認識させることは難しいです。
回答を見る
  • ベストアンサー

~時間~分 を数値として認識させる方法

別のところからコピーしてきたデータは、 セルB2 18時間15分、   B3 3時間、   B4 30分 などの表示形式になっているテキストデータです。 これを、B2+B3 のような、計算にそのまま用いることのできるような、セルの書式設定の方法はあるでしょうか? 逆に数値データを ~時間~分 の形式で表示させる方法は何通りか知っています。 また、別の列を用いれば、find("時間",B2) などを使って、数値だけを抜き出す方法はわかります。 私が知りたいのはあくまでも、新たな列を作らなくても 18時間15分 を 18:15 だと認識させ、3時間 を 3:00 だと認識させ、30分 を 0:30 だと認識させる方法があるかないかです。 数値をテキストにすることは容易でも、 テキストを数値として認識させることはできませんか? よろしくお願いします。

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

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

こんばんは! >私が知りたいのはあくまでも、新たな列を作らなくても  他の列に関数で表示させるのは簡単ですが、 どうしてもB列そのものを時間としてのシリアル値として認識させたい!というコトですね! VBAでの一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row With Cells(i, "B") If InStr(.Value, "時間") > 0 Then .Value = Replace(Replace(.Value, "時間", ":"), "分", "") ElseIf InStr(.Value, "分") > 0 Then .Value = "0:" & Replace(.Value, "分", "") End If .NumberFormatLocal = "[h]:mm" End With Next i End Sub 'この行まで ※ 関数でやるべきコトを単純にコードにしただけです。 他に良い方法があればごめんなさいね。m(_ _)m

ohmy-pasta
質問者

お礼

こんにちは。 昨日アクセスできなくてすみません。 マクロを示してくださった、ということは、やはり、普通のエクセルの機能では   3時間+2時間 という仕様が用意されていないのですね。 わざわざコードまで完成してくださいまして、ありがとうございました!

その他の回答 (2)

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

>相手先から、何時間何分、何円、というデータをいつも(ネットで)もらうのです。 エクセルにコピペするときに、いちいち FIND SUBSTITUTE MID VALUE などを使わなくても計算に用いることはできないか、といちるの望みをかけておりました。 すでに回答したように、特定の文字列以外ではシリアル値に変換できません。 たとえば、エクセルでもともと用意されている「3:20」のような表現は「時刻」であって、「時間」ではありません。 したがって、文字列でも時刻(時間)と認識できるのは、日本語表記なら、「3時間15分」ではなく「3時15分」のような表記にしなければなりません。 すなわち、Ctrl+Hで置換ダイアログを出して、検索する文字列に「間」と入力して「すべて置換」するような操作が実戦的には最も簡便なシリアル値に変更する方法です。 この場合でも必ず「時」と「分」が含まれていないとシリアル値に変換できませんので、このようなデータ範囲を集計するには、少しレベルの高い配列数式などを駆使する必要が出てくるわです。 同様に3000円のような文字列も数字と認識できませんので「円」を一括削除するしか方法はありません。 ちなみに円を数字として認識させる文字列は「¥123」のような形式しかありません(一般的にユーザー定義で設定するような特殊な表示形式はシリアル値と認識されません)。

ohmy-pasta
質問者

お礼

お礼に反応してくださってありがとうございます。 読むのが遅くなって申し訳ございません。 やはり、エクセルはまだそこまで気がきくわけではない、ということですね。 3時間15分、でもらったデータを、間を消すような置換をする、という方法は見落としておりました。参考になります。 すこし話がそれていきますが、欲を言えば、ユーザーがリストも定義できるのだから、リスト順位で認識してくれたらいいのに。 例えば、一、二、三、や、A、B、C など・・・。 ありがとうございました。

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

>これを、B2+B3 のような、計算にそのまま用いることのできるような、セルの書式設定の方法はあるでしょうか? 基本的に、エクセルが時刻と認識できる書式以外の文字列の時間を関数で集計することはできません。 たとえばA1セルに入力された今回のような文字列の時間を計算可能なシリアル値に変換したいなら、以下のような数式で変換することができます。 =SUBSTITUTE(SUBSTITUTE(A1,"時間",":"),"分","")*IF(ISNUMBER((FIND("時間",A1))),1,1/24/60) したがって、特定の範囲、たとえばA1:A3セルの文字列時間を集計したいなら、上記のA1の部分をセル範囲にした以下のようなSUM関数で計算することができます。 =SUM(SUBSTITUTE(SUBSTITUTE(A1:A3,"時間",":"),"分","")*IF(ISNUMBER((FIND("時間",A1:A3))),1,1/24/60)) 配列数式ですので入力後Ctrl+Shift+Enterで確定してください。

ohmy-pasta
質問者

お礼

こんにちは。 昨日アクセスできなくてすみません。 関数を駆使する方法は私自身も慣れているのですが、 わざわざ書いてくださいましてありがとうございました。 相手先から、何時間何分、何円、というデータをいつも(ネットで)もらうのです。 エクセルにコピペするときに、いちいち FIND SUBSTITUTE MID VALUE などを使わなくても計算に用いることはできないか、といちるの望みをかけておりました。 > 基本的に、エクセルが時刻と認識できる書式以外の文字列の時間を関数で集計することはできません。 エクセルは商品として十何年経ってもいまだにそういう仕様なのですね…。 「私が知らないだけ」という期待はもろくも砕けました。 例えば、 変な話ですけど A1  2月1日 A2  3月3日 のときに、 A3  =A1+A2 という計算をすることができますよね。 これは、   入力した時は 2月1日 でも、内部的にシリアル値に自動的に変換される わけです。 まあ、これがうっとおしい時もありますが。 また、 A4  '3月5日 という 全角数字の日付 のテキストデータでも、 A5  =A4*2 と数式で参照すると、途端に数値データとして認識してくれます。 CSVファイルから貼り付けたときに、そのままだと数値として認識してくれないけれども、 F2などを使ってセルの中をのぞいて、もう一度エンターで確定すると、数値に生まれ変わる、 というケースもありますよね。 私は、何時間何分、でもこれと同じことを期待していたのです。 0.666666 のようなシリアル値にさえ変われば、後は書式設定によって 16:00:00 に変えることができる、と。 質問には書きませんでしたけど、何円 についても同様のことを期待していました。 マイクロソフトもなかなか気が回らないな、という印象です。 2000円+4000円 も仕様で用意してくれたらいいのに。 (書式設定で、2000 を 2000円 と表示させながら、数値属性は残す方法は知っていますよ。TEXT関数より、こちらの方が好きです。) 後は、あまり使いたくないですけど、ユーザー定義関数を作って、別の行に、何時間何分 を参照させるか、ですね。 列の並びが変わるのでうれしくないですが・・・。 うーむ、ないものねだりをしている私が悪いのでしょうね。 かなり長いこと、募集を続けようと思います。 改めて、ありがとうございました!

関連するQ&A

  • Excelで数値として認識させたい

    Notesのデータベースから書き出しで抽出したデータを、Vlookupを使って計算式を実施したのですが、どうやら数値として認識してくれずに「#N/A」となってしまうのです。 "表示"を数値にしてみてもエラーが返ってしまいます。 文字列、にしてみても結果は同じです。 例えば、文字列として認識されている値があって、それを数値として認識させる場合、頭に「'」(アポストロフィ)を付ける場合があると思うのですが、何百と言うデータにいっぺんに付ける方法ってありませんでしょうか?(関数か何かで・・・) 書式のユーザ定義で「"'"@」とする方法しかないのでしょうか? でも、それだと実際の表示も「'」が表示されてしまうので、何かほかの方法をご存知の方いらっしゃいましたら教えてください。

  • エクセルの文字型を数値型で認識させる方法

    エクセル2000で、例えば文字列のセルに1と入力し、その後書式設定で数値型にしたときは数値型として認識されません。これを認識させる時、私はF2でセル内選択→Enterで決定→すると数値型で認識、という面倒なことを行っています。 文字列の数字をコピーし、予め数値型にしておいたセルに値だけコピー&ペーストしても、貼り付けたときには数値として認識せず、上記のように一旦選択→決定しないと新しい型で認識されません。 何千件もこれを行うのが非常に面倒なため、どなたかいい型の変換方法を教えて頂ければうれしいです。よろしくお願いします。

  • エクセルのデータが数値として認識されません

    他から受け取ったデータが、表示形式を変更しても数値として認識されません。 1.初めてデータを受け取ったとき、計算ができないので確認してみると、たとえば 5 と表示されているセルに =”5”のように数式が設定されていたので、シート全体をコピー→形式を指定して貼り付け →値 の処理をしました。 2.セルの内容は 5 になったのですが、文字がセルの左詰めになっているので、セルの書式設定を数値にしたり、標準にしたり、ユーザー設定がされていないか確認したのですが、状況が変わりません。 3.ひとつのセルをダブルクリックすると、数値に変換され、計算の対象になります。 このような状況です。3.のようにダブルクリックすれば解決はするのですが、データの量がとても多いのですべてをダブルクリックするわけにはいきません。一度で変換する方法を教えてください。 何か最初の処理に問題があったのでしょうか?ものすごく困っています。どうかよろしくお願いします。

  • Excelでの変換(数値⇒10進法表記へ)

    Excelで勤怠管理をしています。 月単位で集計をしているのですが、 9.30【数値】(意味:9時間30分)⇒9.5(10進法)で表示させたいのですが、 ---------------------------------------------------------------- ▼操作手順:時間を10進法表示する (A1セルに「9:30」と入力されていてB2セルで「9.5」と表示する例) B2セルに「=A1*24」と入力し[Enter]キーを押す  ↓ B2セルの表示形式を「標準」にする ---------------------------------------------------------------- 上記の方法ですと、セルの書式設定⇒表示形式が時刻になっている場合は 10進法で表示されますが。。 セルの書式が数値(又は標準)の際には適用されないようです。 ※セルの書式が数値(又は標準)の場合に10進法で表示させる  方法があれば教えてください。よろしくお願い致します!

  • Excel 数値を時間の表示に変えたい

    大量に印刷することがあるので、所要時間をExcelで計算しています。 A列に印刷箱の容量数値を入れると いろいろな条件計算をしてB列に出します。 単に計算をしているのでB列の結果は例えば8.88や111.42(表示形式:標準)となります。 これは8分88秒・111分42秒という意味なのですが、 これを9分28秒(1時間51分42秒)、または9:28(1:51:42)等と表示し直すことは可能でしょうか。 シリアル値ではないので[h]:mm:ssにするととんでもないことになります。 ※時:分:秒をrightやleftで別セルに抜き出して60で割り、60を超えた分をまた別セルで足してTimeで表示し直すやり方をしましたが、rignt・leftを使ってるせいか若干狂いがあります。 ※Excel2003 よろしくお願い致します。

  • Excelで時間風なテキストデータを10進表示時間数に変換したい

     いまA列に、WebやOCRで取り込んだ、時刻データでない一見時間風なテキスト文字列があります。  これをB列に表示のように10進数の時間数値に変換する1個の数式を考えていますが、私の知恵ではすごく長い式になります。  これを最短の数式で現すベスト(又はベター)な方法をお尋ねします。  私が考えたプロセスは、まずB列に設けた時間の9や10を取り出す式(LEFT,FIND等)を皮切りに、順次右の列に分の15や6を取り出す式(MID,FIND)、6に0を加えて「06」とする式、分に10/6を乗じ、四捨五入して小数の時間に変える式、整数と小数の各時間を加算する式などを設け、最終的にその右列に答えを出す。あるいは、これらの式を必要か所に代入して1個の式にまとめる、などやってみましたが、どうしても長蛇の列になってしまいます。  別の方法ではSUBSTITUTE関数を使って「9時間15分」を「9.15」に置き換えて数値化し、その上で10進数に置き換えることも試みましたが、SUBSTITUTEのネスト、分の部分の6を06に変える式、10/6を乗じて四捨五入する式などもあり、これも結構長たらしくなります。  また、データ→区切り位置で分割するのも、例示の場合のように縦に整列されていないと結構面倒です。  このほか小数点一桁と二桁の混在表示という表示形式の問題もあります。  Excelでテキスト、日時、数値各データを相互に変換するのに結構面倒な場合が多いので、サンプルを例題として、表示形式の設定と併せ、関数のみの最短の数式で現す方法について、Excelご精通の方のお知恵を拝借したいと存じます。よろしくお願いします。 A列(テキスト) B列(10進数値の時間) 5時間45分    9.75 ←(5.75時間) 10時間6分    10.1 7時間07分    7.12

  • Excelで数値が文字列になっています

    Excel2010で「このセルにある数値がテキスト形式か、またはアポストロフィで始まっています」という警告が表示されたりして、計算が出来ません。 打ち直ししたり、「エラーチェックルール」で「文字列形式の数値、、またはアポストロフィで 始まる数値」のチェックを外したりして計算は出来るようになります。 「表示形式を変えてもセルの中の値は変化しません。数値データは数値のまま、文字列データは文字列のままです。」とは本当ですか? 本当ならば、数字の保存形式が文字列データかどうかを確かめる方法はありますか? なお、ISNUMBERという関数ではTRUEと出ます。

  • 文字を数値として認識させる方法

    列で足し算をしたいのですが、その列に文字が含まれています。 その文字は無視して、足し算をしたいのですが、文字の入っているセルを書式設定で「数値」にしても、VALUE!となって計算できません。 入っている文字を「0」とみなして、残りのセルに入ってる数字の足し算をができれば一番いいのですが、どなたか方法をご教示いただけないでしょうか? よろしくお願いします。

  • エクセルで、()内の数値だけを取り出したい

    エクセルで今A1のセルに 文字列(半角数値) という内容のデータが入っています。 B1のセルに()内の数値のみを取り出して表示させたいの ですが、何かいい方法が無いでしょうか?

  • Excelの数値を変更する

    Excelの使い方を教えて下さい。 下記の状況で困っています。 Accessファイルで作ったデータを、ExcelにExportしたデータがあるとします。 Accessには、数値で「12.3」と入力したのですが、 Excelでは、「12.3013479432」という風に認識されてしまいました。(なぜかわかりません。が、これはどうでもいいとします。) 「セルの書式設定」の「表示形式」を「12.3」に変えることは容易にできるのですが、 実際に入力されている数値も 「12.3」に変更しなおすにはどうすればいいのでしょうか? どなたか教えて頂けると大変助かります。

専門家に質問してみよう