• ベストアンサー

エクセル:漢字混じりの日時文字列を時間データに変換

日・時・分が漢字で入力されたエクセルの文字列データを、時間データに変換したいです。 マクロでも関数でも、どちらでもよいです。 どのようにすればよいでしょうか? よろしくお願いします。 例) -- 2日8時間 → 56:00 2時間30分 → 2:30 5分 → 0:05 4時間 → 4:00

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

ユーザ関数で…… 標準モジュールに下記のコードを入れ、適当なセルに =fTimestamp(A1) の様に式を入れて下さい。 式を入れたセルの書式はユーザ書式で [h]:mm としてください。 Function fTimestamp(sData As String) As Date   For i = 1 To Len(sData)     sOne = Mid(sData, i, 1)     If IsNumeric(sOne) Then       sNum = sNum & sOne          ElseIf sOne = "日" Then       fTimestamp = fTimestamp + Int(sNum)       sNum = ""          ElseIf sOne = "時" Then       fTimestamp = fTimestamp + Int(sNum) / 24       sNum = ""          ElseIf sOne = "分" Then       fTimestamp = fTimestamp + Int(sNum) / (24 * 60)       sNum = ""     End If   Next i End Function

yoshi1401
質問者

お礼

図入りでわかりやすい回答を、ありがとうございます。 試してみたところ、最初はユーザ関数が認識されなかったのですが(文字列として表示されてました)、何度か試したらうまく計算してくれるようになりました。 (何がいけなかったのかは、不明です。) とにかく、バッチリ手軽に計算してもらえるようになって、非常に快適です! ベストアンサーに選ばせていただきます。 ありがとうございました。

その他の回答 (4)

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

回答No.4の別解の一部に誤りがありました。 I2=IFERROR(LEFT(SUBSTITUTE(SUBSTITUTE($A2,$G2&$G$1&$H2&$H$1,""),I$1,REPT(" ",100)),100)*1,"") を次のように訂正します。 I2=IFERROR(LEFT(SUBSTITUTE(SUBSTITUTE($A2,$G2&IF(G2="","",G$1)&$H2&$H$1,""),I$1,REPT(" ",100)),100)*1,"") 画像も訂正後のものを貼付します。

yoshi1401
質問者

お礼

試してみたところ、C列に計算する方は、うまくいきました。 別解の方は、なぜかどの列も空欄になってしまい、計算できませんでした。 でも、1列で計算できた方がよいので、C列に計算する方法の方がよいです。 望みの結果を得ることができました。 ありがとうございました。

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

>日・時・分が漢字で入力されたエクセルの文字列データを、時間データに変換したいです。 関数では文字列から数字を切り出して日時のシリアル値に変換します。 A列に元データの文字列があり、C列に日時の値にして表示形式で時間数の値にします。 C2=SUM(IFERROR(LEFT(A2,FIND("日",A2)-1),0),IFERROR(MID(A2,IFERROR(FIND("日",A2),0)+1,FIND("時間",A2)-IFERROR(FIND("日",A2),0)-1),0)/24,IFERROR(MID(A2,IFERROR(FIND("時間",A2)+2,1),FIND("分",A2)-IFERROR(FIND("時間",A2)+2,1)),0)/1440) 此処で、SUM関数の必要はありませんが日、時、分の値をSUM関数の中で確認しながら数式を組み立てたためそのまま残しました。 別解として日、時、分の数値をG、H、I列に切り出してからE列へ解を得る方法を示します。 G2=IFERROR(LEFT(SUBSTITUTE($A2,G$1,REPT(" ",100)),100)*1,"") H2=IFERROR(LEFT(SUBSTITUTE(SUBSTITUTE($A2,G2&G$1,""),H$1,REPT(" ",100)),100)*1,"") I2=IFERROR(LEFT(SUBSTITUTE(SUBSTITUTE($A2,$G2&$G$1&$H2&$H$1,""),I$1,REPT(" ",100)),100)*1,"") E2=SUM(IFERROR(G2*1,0),IFERROR(H2*1,0)/24,IFERROR(I2*1,0)/1440) これらの数式ではIFERROR関数を使っていますのでExcel 2007以降のバージョンが対象です。 尚、数値の表示形式は [h]:mm です。

yoshi1401
質問者

お礼

回答No.5へのお礼をご参照ください。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1で修正です。 (4)でD1に張り付けてオートフィルする数式を以下のようにしてください。 =INT(C1/3600) & ":" & TEXT(MOD(C1,3600)/60,"00")

yoshi1401
質問者

お礼

ありがとうございます。 試してみましたところ、望みどおりの結果を得ることができました。 ただ、コピー&値貼り付けや置換が必要なのが、ちょっと面倒ですね。 一度式を入れたら、自動的に計算してくれるものが欲しいので、引き続き回答を募集します。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

急がば回れ? A列に以下のように例題のようにあるとします(○|は行番号) 1|2日8時間 2|2時間30分 3|5分 4|4時間 (1)以下の数式を「B1」に貼付て、A列の行数分オートフィル ="イコール" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"日","*24*60*60+"),"時間","*60*60+"),"分","*60")&"E","+E",""),"E","")   B列の結果_________   1|イコール2*24*60*60+8*60*60   2|イコール2*60*60+30*60   3|イコール5*60   4|イコール4*60*60 (2)B列をコピーしてC列に値として貼付 (3)C列を選択してCtrl+Fで検索窓を表示し、置換タブへ切り替えて   「イコール」を「=」へ全て置換   C列の結果_________   1|201600   2|9000   3|300   4|14400 (4)以下の数式を「D1」に貼付て、A列の行数分オートフィル =INT(C1/3600) & ":" & MOD(C1,3600)/60   D列の結果_________   1|56:0   2|2:30   3|0:5   4|4:0

yoshi1401
質問者

お礼

回答No.2へのお礼をご参照ください。

関連するQ&A

  • エクセルの文字列操作について

    エクセル初心者です。 エクセルの文字列操作で、カタカナの文字を全て大文字にしたいのですが、そういった場合に使える関数は有るのでしょうか? ちなみに、全てカタカナで入力してあるデータです。 例:エチケット →エチケツト   チョコレート→チヨコレート 300程有るデータを変換したいので関数でできればと思っています。 よろしくお願いします。

  • EXCELの日付データを文字列に変換したい

    EXCELの和暦形式の日付データを文字列に変換する方法を教えてください。 たとえば、H17.9.2をそのまま文字列に変換したいのです。 最初から文字列データとして入力すれば問題ないのですが、日付データ(標準)として入力されたデータを書式→セル→文字列で変換するとシリアル値に変わってしまいます。(H17.9.2→38597) どうしたらよいのでしょうか。お願いします。

  • 文字列を日付データに変換 マクロ

    他の方の質問等を参考にしているのですが、どうもうまくいかないので教えてください。 エクセル2007を使ってるのですが、 マクロで文字認識している日付を日付データ認識させたいのです。 H10.1.4やH19.12.14等が2000件くらい文字列として入力されている データを日付認識させて、経過年数や経過日数などを求めようと思ってます。 マクロで一括変換する方法または、変換した日付データを隣の列に入力できる方法がございましたら教えて頂きたく思います。 お願いします。

  • EXCELで文字列の並べかえ

    こんにちは。EXCELの関数を教えてください。マクロは使用しない方法でお願いします。 行いたい内容は、セル内に入力した「1234567の文字列を7654321」や、「abcdをdcba」に並べかえることです。 つまり、EXCELのセル内に入力した文字列を逆から並べ替えたいのです。 お時間のある方、ぜひ教えてください。 よろしくお願いします。

  • エクセル 数値データを桁をそろえて文字列データに変換するには

    よろしくお願いします。 エクセル2002を使用しています。 数値データとして整数1桁、2桁、3桁のデータが混在してあります。 これを1桁、2桁のものは前にゼロを付けて全て3桁の文字列に変換する方法はありますか? できれば関数を使って 例  数値 文字列   8⇒008  12⇒012 235⇒235  11⇒011 できた文字列で品番コードとして使用します。 どなたかご存知の方、ご教授お願いします。

  • Excel 2007 文字列について

    Excel 2007 文字列について 郵便番号に「-」を入れたいです。 1つのセルに例えば「0001111」とある場合に 「000-1111」と変換したいです。 どのような関数またはマクロを作成すればよろしいでしょうか。

  • エクセルでの時間から日時への変換について

    エクセルで休暇の処理の時に休暇の総時間数を日時に変換するやり方を探しています。 一日の勤務時間は 7時間45分 で  A1セルに総時間数23時間15分(例)  A2セルに7:45を入力します。  A3セルに3日0時間0分と表示しようと下の関数を入れました。  =INT(A1/A2)&"日"&TEXT(MOD(A1,A2,"d")&"時"&"分")   本来なら3日0時間0分と表示されるはずなのですが、3日7時間45分と表示されてしまいます。修正方法をしりたいのですが、よろしくお願いします。

  • EXCELの関数について。(時間)

    EXCELの関数について。 例) 7時間30分という文字列を 7.5に変換する方法はありますか? 7時間30分 ↓ 7.5

  • エクセルの関数で文字列の変換をするには

    エクセルの関数で文字列の変換をするにはどうしたらよろしいでしょうか 問題の関数はこちらです 2008/10/10(金) を 平成20年10月10日金曜日 に変換する 御解答宜しくお願い致します

  • エクセルリンク元文字列

    エクセルのA列にURLリンクが貼られている文字列が3000行ほどあります。そのURL(例:http://www.***.**.cc/など)の文字列をB列に入力したいのですが、リンクゲット関数か何かあるのでしょうか?またはマクロ(VBA?)とかで処理する方法はあるのでしょうか。 よろしくお願いします。

専門家に質問してみよう