• ベストアンサー

(Excel)時間と文字列を抽出

セルに時間と文字列が一緒に入ってる場合、  これを別々のセルに抽出する方法を教えて下さい。 例えば、  A1 -> 28:51 Good Job なら  B1 -> 0:28:51 C1 -> Good Job のようにです。

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

  • ベストアンサー
  • msMike
  • ベストアンサー率20% (364/1804)
回答No.6

B1: =TEXT(LOOKUP(10^17,LEFT(A1,COLUMN($1:$1))*1),"[h]:mm") C1: =TRIM(SUBSTITUTE(A1,B1,""))

NuboChan
質問者

お礼

興味を持っていただきありがとうございます。 提示いただいた式を以下のように   一部改ざんして上手く処理できました。  B1: =TEXT(LOOKUP(10^17,LEFT(A1,COLUMN($1:$1))*1),"[h]:mm:ss")  C1: =TRIM(SUBSTITUTE(A1,B1,""))

その他の回答 (4)

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

多分質問者は、Excel関数での回答を望んでいるのだろう。 であれば、シコシコややざるを得ないが、プログラムを組める人は こういう課題の型の処理は、「正規表現」というツールで処理すると思う。 小生は、下記のPatternの書き方が苦手で、下記も十分でないかもしれないが、VBAでやってみた。 ーー 例データ A列1-3行 15:23 山田が到着 12:23:12 3号機停止 遅延 15:23:34  --- データについて約束事(前提すること)。質問には説明が不十分だ。 時刻・時間部分は半角数字と、半角:で入力されているとする。 時刻・時間部分が、先頭に限る場合はパターンが少し変わる。 下記では、文字列の途中出現でも可。 ーー 標準モジュールにの画面を出して、下記を貼り付け。 (エクセルのシート画面で、ALTキーを押しつつ、F11キーを押せば出る白紙画面に貼り付け) 挿入ー標準モジュールで画面が出る。 ーーー Sub 正規表現02() lr = Range("A10000").End(xlUp).Row 'MsgBox lr For i = 1 To lr x = Cells(i, "A") MsgBox x 'RegExpオブジェクトの作成 Dim reg As Object Set reg = CreateObject("VBScript.RegExp") '正規表現の指定 With reg .Pattern = "([0-5][0-9]:[0-5][0-9]) |(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])" 'パターンを指定 .IgnoreCase = False '大文字と小文字を区別するか(False)、しないか(True) .Global = True '文字列全体を検索するか(True)、しないか(False) Dim Matches Set Matches = reg.Execute(x) '正規表現でのマッチングを実行 Dim msg As String For Each Match In Matches 'MsgBox Match.Value ' msg = msg & Match.Value & " が" & Match.FirstIndex & "文字目に見つかりました" & vbCrLf Cells(i, "B") = Trim(Match.Value) Cells(i, "C") = Trim(reg.Replace(x, "")) Next Match End With Next i End Sub ’--- 上記プログラム実行後 B,C列(1-3行は) 15:23 山田が到着 12:23:12 3号機停止 15:23:34 遅延 少数でしか例でしかテストしてないので、結果で不都合が出るかもしれませんがご免。 こういう課題の型の処理の1方法の、臭いだけ嗅いでください。

NuboChan
質問者

お礼

VBAでの回答ありがとうございます。 (こちらでVBAの質問をする場合、コードを教えて下さい的な  丸投げ質問は歓迎されないのでなるべくVBAで無い方向で考えるようにしています。) せっかく、VBAの回答が出てきたので完成形が見てみたいです。 ------------------------------------------------ A列の並びは、   「時間 名前」で「名前 時間」のように逆になることは無いように    作成しています。 データについて約束事は、   時刻・時間部分は「半角数字」と、「半角:」で入力で     時間は1時間以上の場合もありえる    h:mm:ss     1時間以下の場合は、mm:ss mm:ss      但し、mmが10分以下の場合は、m:ss   時間と名前の間には、半角に空欄がある     (区切りは、半角空欄)   データの並びは常に「時間 名前」    (「名前 時間」のように逆になることは無い)   B列の抜き出し部は常にh:mm:ssで表記される事 例えば、      0:08 ----> 0:00:08      5:53-----> 0:05:53 実際のDATAでマクロをトレースすると B列において 1)0:08 Cluster One の場合   5:53 Learning to Flyの場合 B列に何も表示されない 2)11:22 High Hopes の場合    0:11:22と表示されるべきが11:22と表示される 3)27:05 A New Machine Part 1 の場合    0:27:05と表示されるべきが27:05:00と表示される 4)1:01:16 One of These Days の場合    1:01:16と表示されるべきが1:16と表示される 以上が修正できれば嬉しいです。

  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.4

私は超能力者ではありません。そのような例があるなら、最初から書いて下さい。 例は1つにしなければならないというルールはありません。 B1: =IFERROR(("0:"&LEFT(A1,FIND(" ",A1)-1))+0,LEFT(A1,FIND(" ",A1)-1)+0)

NuboChan
質問者

お礼

追加の回答ありがとうございます。 サンプル数が少なく  時間(Hr)まで対象にすることを記載せずにお手数をお掛けしました。 頂いたコードで処理が出来るようになり改めてお礼申し上げます。

  • yumi0215
  • ベストアンサー率30% (1335/4411)
回答No.3

B1 =left(a1,5) 表示形式の設定で対応してください C1 =mid(a1,7,10) 最大文字数で対応してください

  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.2

例が1つしかないのでどのようなパターンがあるか判らないのですが、必ず 分:秒 スペース 文字列 になってるという前提で、 B1: =("0:"&LEFT(A1,FIND(" ",A1)-1))+0 セルの書式設定、時刻 C1: =MID(A1,FIND(" ",A1)+1,99)

NuboChan
質問者

お礼

回答ありがとうございます。 時間が「分:秒」の場合は、OKですが  「時間:分:秒」のように60分を超える1時間以上の場合も   選択肢に入れたいのですが可能でしょうか ?

関連するQ&A