it-swarm-ja.com

9:00 am — 12:30 pmなどのテキストの文字列に基づいて期間を計算するExcelの数式

次の形式の時間範囲の文字列の実際の期間を計算するExcel式を開発しようとしています。1:00am – 3:00am

この記事 によると、2回引くのと同じくらい簡単なはずです。たとえば、2回(4:55:00)の間の時間、分、秒を取得するには、次のように記述します。

=TEXT(B2-A2,"h:mm:ss")

これが私がどこまで到達したかについてです:

=TEXT(RIGHT(B2,SEARCH(" – ",B2))-LEFT(B2,SEARCH(" – ",B2)),"h:mm:ss")

問題は、テキストの文字列に時間に加えて「日付」コンポーネントがないことである可能性があるのではないかと思います。減算操作を実行して日付を文字列に「ファッジ」できるようにする唯一の解決策はありますか?または、単に時間と分のコンポーネントを個別に分解し、その方法で期間を計算する以外に、別の代替アプローチがありますか?また、可能であれば、午後9時から午前12時など、午後から午前までの潜在的な時間帯を補正したいと思います。

7
purefusion

これが複雑な解決策の1つです。座ってこれを解析しようとするよりも、これを貼り付けて最高のものを期待するのがおそらく最善です。

=INT(MOD(MID(B2,FIND(":",B2,FIND("-",B2))-2,2) - LEFT(B2,FIND(":",B2)-1)+(MID(B2,FIND(":",B2,FIND("-",B2))+1,2) - MID(B2,FIND(":",B2)+1,2))/60+IF(MID(B2,FIND("m",B2)-1,1)=MID(B2,FIND("m",B2,FIND("-",B2))-1,1),IF(MID(B2,FIND(":",B2,FIND("-",B2))-2,2) - LEFT(B2,FIND(":",B2)-1)+(MID(B2,FIND(":",B2,FIND("-",B2))+1,2) - MID(B2,FIND(":",B2)+1,2))/60<0,24-IF(LEFT(B2,2)="12",12,0),0),12-IF(AND(MID(B2,FIND(":",B2,FIND("-",B2))-2,2) - LEFT(B2,FIND(":",B2)-1)<>0,MID(B2,FIND(":",B2,FIND("-",B2))-2,2)="12"),12,0)),24)) & ":" & TEXT((MOD(MID(B2,FIND(":",B2,FIND("-",B2))-2,2) - LEFT(B2,FIND(":",B2)-1)+(MID(B2,FIND(":",B2,FIND("-",B2))+1,2) - MID(B2,FIND(":",B2)+1,2))/60+IF(MID(B2,FIND("m",B2)-1,1)=MID(B2,FIND("m",B2,FIND("-",B2))-1,1),IF(MID(B2,FIND(":",B2,FIND("-",B2))-2,2) - LEFT(B2,FIND(":",B2)-1)+(MID(B2,FIND(":",B2,FIND("-",B2))+1,2) - MID(B2,FIND(":",B2)+1,2))/60<0,24-IF(LEFT(B2,2)="12",12,0),0),12-IF(AND(MID(B2,FIND(":",B2,FIND("-",B2))-2,2) - LEFT(B2,FIND(":",B2)-1)<>0,MID(B2,FIND(":",B2,FIND("-",B2))-2,2)="12"),12,0)),24)-INT(MOD(MID(B2,FIND(":",B2,FIND("-",B2))-2,2) - LEFT(B2,FIND(":",B2)-1)+(MID(B2,FIND(":",B2,FIND("-",B2))+1,2) - MID(B2,FIND(":",B2)+1,2))/60+IF(MID(B2,FIND("m",B2)-1,1)=MID(B2,FIND("m",B2,FIND("-",B2))-1,1),IF(MID(B2,FIND(":",B2,FIND("-",B2))-2,2) - LEFT(B2,FIND(":",B2)-1)+(MID(B2,FIND(":",B2,FIND("-",B2))+1,2) - MID(B2,FIND(":",B2)+1,2))/60<0,24-IF(LEFT(B2,2)="12",12,0),0),12-IF(AND(MID(B2,FIND(":",B2,FIND("-",B2))-2,2) - LEFT(B2,FIND(":",B2)-1)<>0,MID(B2,FIND(":",B2,FIND("-",B2))-2,2)="12"),12,0)),24)))*60,"00")

編集:最後に数式を修正しました。

コメントへの対処:

これらの出力を追加するには、これらの出力の範囲を追加するには、次の式を使用できます。

=TEXT(SUM(VALUE(B2:B3)),"h:mm:ss")

これを配列数式として入力する必要があります。これを行うには、数式を入力するときにCtrl + Shift + Enterを押します。

5
Excellll

「am」または「pm」の前にスペースを入れることができる場合、これは機能します。

=TEXT(RIGHT(B2,LEN(B2)-SEARCH(" - ",B2)-2) -
 LEFT(B2,SEARCH(" - ",B2)-1),"h:mm:ss")

これは、午前/午後の前にスペースを処理しない基本的なものですが、エッジケースの多くを処理しないため、堅牢でも完全でもありません。いくつかの異なる方法を示すために公開したかっただけです。真に完全なソリューションを考え出すには、解析する可能性のあるすべてのタイプの文字列を知る必要があります。

=TEXT((MID(B2,SEARCH(" - ",B2)+3, LEN(B2)-SEARCH(" - ",B2)-4) &  
       IF(ISERROR(SEARCH("am",RIGHT(B2,8))), " pm", " am")) - 
      (LEFT(B2,SEARCH(" - ", B2)-3) & 
       IF(ISERROR(SEARCH("am",LEFT(B2,8)))," pm"," am")),
      "h:mm:ss")
2
Lance Roberts

この式を試してください:

=A2+(A1>A2)-A1

どこ

A1「開始」時刻が含まれています
A2「To」時間が含まれています

次に、TEXT関数を使用して文字列にフォーマットします。
または数値形式を使用する[h]:mm:ss

深夜を過ぎた時間帯(つまり、午後9時34分から午前3時45分まで)でも機能するはずです。


まず、ランスが述べたように、時間と時間文字列のAM/PM表記の間にスペースを追加する必要があります。

これを行う最も簡単な方法は、Excelの検索と置換機能を使用することです。押す CtrlH検索対象に「am」と入力し、置換に「am」(前にスペースを1つ入れて)と入力します。 「午後」も同じようにします。

編集:[ネストされたSUBSTITUTESを削除]ネストSUBSTITUTESは結局のところ悪い考えです。少なくともTRIMを追加せずに。


これが私の他のやり過ぎのアプローチです。

以下の式を使用して名前( "tt")を作成します($ A1:$ A10は、時間文字列を含む範囲です。

=TRIM(SUBSTITUTE(SUBSTITUTE($A1:$A10,"a"," a"),"p"," p"))

次に、この式を使用して、期間を取得します(上記の最初の式に基づく)。

=RIGHT(tt,LEN(tt)-FIND("-",tt,1)-1)+
  (LEFT(tt,FIND("-",tt,1)-2)>RIGHT(tt,LEN(tt)-FIND("-",tt,1)-1))-
  LEFT(tt,FIND("-",tt,1)-2)
1
Ellesa

ランス・ロバーツが言ったように、「午前」または「午後」の前にスペースが必要です。

次の式を使用できます。

=SUBSTITUTE(SUBSTITUTE(B2; "am"; " am"); "pm"; " pm")

次に、これを試してください:

=TEXT(TIMEVALUE(RIGHT(B2;SEARCH(" - ";B2;1)))-TIMEVALUE(LEFT(B2;SEARCH(" - ";B2;1)));"h:mm:ss")
1
diogum

大きな問題は、時間が分と午前/午後の間にスペースが必要なことです。1:00 am - 3:00 amまたは9:00 pm - 12:00 am

これにより、次の式を使用できます。

=TIMEVALUE(RIGHT(A1,SEARCH(" - ",A1)))-TIMEVALUE(LEFT(A1,SEARCH(" - ",A1)))+
IF(TIMEVALUE(RIGHT(A1,SEARCH(" - ",A1)))-TIMEVALUE(LEFT(A1,SEARCH(" - ",A1)))<0,1,0)

そして、セルをカスタムフォーマットとしてフォーマットしますh:mm:ss

0
Hand-E-Food