![Excel のセルから時間を取得する](https://rvso.com/image/1595541/Excel%20%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%8B%E3%82%89%E6%99%82%E9%96%93%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B.png)
Excel セルのテキストから時間を取得する必要があります。テキストには、チケット番号、チケット タイトル、時間ログ、パーセンテージが含まれます。これらはすべて 1 つのセルに含まれています。以下の例を参照してください。
12345678: The bottom part is incorrect 0:15h 0%
を取得する必要があります0:15
。LEFT 関数と RIGHT 関数の組み合わせを使用しようとしましたが、最後の文のパーセンテージが 1 桁の場合にのみ機能します。パーセンテージは 0% ~ 100% の範囲で変化します。チケット タイトルの長さも異なります。
答え1
私は無料正規表現置換アドイン* これにより、Excel に正規表現機能が追加され、次の数式を使用できるようになります。
=RegExFind(A2,"\d{1,2}:\d{1,2}")
*
私はそのアドインとは関係ありません
答え2
Máté Juhász の答えは確かに最も簡単です。ただし、アドオンを入手したくない、正規表現に慣れていない (そして学びたくない) 場合は、組み込み関数を使用して結果を取得するより複雑な方法があります。繰り返しを避けるためにヘルパー列を使用すると、少し単純化できます。それを使用して、その仕組みを説明します。
すべての「単語」はスペースで区切られます。チケットのタイトルにはさまざまな数の単語を含めることができます。最後の要素であるパーセンテージは最後のスペースの後にあり、時間は最後から 2 番目のスペースの後にあります。列 B では、次の数式を使用してスペースの数を計算します。
=LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
この数式は、すべてのスペースを削除し、文字列を短縮した文字数を計算することによって機能します。この例では、スペースは 7 個あります。
列 C は、時刻から始まる文字列の末尾を剥がします。数式は次のとおりです。
=MID(A1,FIND(CHAR(1),SUBSTITUTE(A1," ",CHAR(1),B1-1))+1,LEN(A1))
これは、置換する特定のインスタンスを指定できる SUBSTITUTE 機能を使用して、時刻の前のスペース (つまり、最後のスペースの 2 つ前) を、データに存在しない任意のターゲット文字 (この場合は CHAR(1)) に置き換えることによって機能します。次に、FIND はその文字の位置を特定し、MID は次の位置から文字列の残りの部分を抽出します。
列 D の結果は、次の数式を使用して時間を抽出します。
=LEFT(C1,FIND("h",C1)-1)
これは、「h」を見つけて、その前に来るものをすべて抽出することによって機能します。
ヘルパー列を使用せずに、単一の数式でこれを行うことができます。ヘルパー セル参照をヘルパー セル数式に置き換えると、その数式は次のようになります。
=LEFT(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1," ",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1," ",""))-1))+1,LEN(A1)),FIND("h",MID(A1,FIND(CHAR(1),SUBSTITUTE(A1," ",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1," ",""))-1))+1,LEN(A1)))-1)
これらはすべて、末尾にスペースのないクリーンなデータを前提としていることに注意してください。末尾にスペースがある可能性がある場合は、A1 へのすべての参照を TRIM() で囲むか、ヘルパー列で A1 をトリムしてそれを参照し、繰り返しを回避します。
答え3
次の式を試してください。
=TRIM(RIGHT(TRIM(LEFT(SUBSTITUTE(TRIM(E10);"h ";REPT(" ";99));99));5))