重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

あるサイトから試合結果のデータ(例えば 4:1)をエクセルにコピペすると、そのセル内には 4:01、数式窓には 4:01:00 と時間書式で表示されてしまいます。
今回の目的は、元のデータの記号のコロンより左側の文字列(4)と、右側の文字列(1)を取り出す事にあります。
この時間書式のデータに対して、Right,Left,Len等の関数を使って文字列を抽出しようとしてもうまく行きません。
解決方法のご教示、宜しくお願いします。

A 回答 (7件)

No.3です。



>→ Split関数も既に試しているのですが、上記が原因(多分)でデータの抽出はできませんでした。

多分ですがセルのRangeのプロパティを省略したか、或いは『 .Value 』を用いたのでしょう。
そうすると日付型になり文字列として認識しないのでSplitは失敗します。

どのようにデータを取得したいのかはわかりませんが、No.3のコードではプロパティは『 .Text 』を用いており『セルに表示されている文字列』と
言う扱いでSplitしてますので、こちらの検証では問題になってはいません。
    • good
    • 0
この回答へのお礼

めぐみん_さん、ご丁寧な対応、感謝します。

前回、試した時には『 .Text 』を入れていませんでした。
これを追加する事で問題が解決しました。
有り難うございました。

お礼日時:2018/10/30 11:11

No.1です。

関数使用後のセルの表示形式が
日付等になっているのが問題です。
セルの表示形式を標準に戻せば大丈夫。
    • good
    • 0

No.2です。



> 4:01 に対してこれを実行すると

そうではなくて
表示形式を「文字列」に変更した後に、ペ―ストするのです。
    • good
    • 0
この回答へのお礼

siffon9さん、返信を有り難うございました。

表示形式を「文字列」に変更した後に、ペ―ストしてみたのですが、結果は以前と同じでした。
サイトにあるデータは、6列、数百行に渉っていて、それ以外の書式もあるのでそれが原因かも知れません。

お礼日時:2018/10/30 11:01

こんばんは。



>表示形式が「標準」だと、その文字列は時刻と判断されてしまう
のを避けるのでしたら、

=MINUTE(TIMEVALUE("0:"&TEXT($A1,"h:m")))

=SECOND(TIMEVALUE("0:"&TEXT($A1,"h:m")))

//
VBAでしたら、

Sub Test1()
Dim varTime As Variant
Dim myTime As Variant
Dim min As Long
Dim sec As Long

varTime = ActiveCell.Text
If Len(varTime) - Len(Replace(varTime, ":", "", , , 1)) = 1 Then
myTime = TimeValue("0:" & varTime)
min = Minute(myTime)
sec = Second(myTime)
ActiveCell.Offset(, 1).Resize(, 2).Value = Array(min, sec)
End If
End Sub

ご参考まで
    • good
    • 0
この回答へのお礼

WindFallerさん、具体例を挙げて頂き感謝申し上げます。

めぐみん_さん(No.7)のアドバイスで一旦解決したのですが、後学の為、頂いたサンプルも試してみたいと思います。
有り難うございました。

お礼日時:2018/10/30 11:19

得点結果が欲しいのではなくて?


Split関数で":"を区切り文字としたら?

セルA1の表示が 4:01 とした場合

Sub megu()

Dim v As Variant

v = Split(Range("A1").Text, ":")

MsgBox (Val(v(0)) & "-------" & Val(v(1)))

End Sub
    • good
    • 0
この回答へのお礼

めぐみん_さん、回答、有り難うございました。

|得点結果が欲しいのではなくて?
→ その通りなのですが、元データに “:” が含まれている為に、これが自動的に時刻表示に変換されてしまうようでその扱いに困っています。

|Split関数で":"を区切り文字としたら?
→ Split関数も既に試しているのですが、上記が原因(多分)でデータの抽出はできませんでした。

お礼日時:2018/10/29 21:28

表示形式が「標準」だと、その文字列は時刻と判断されてしまうのが原因です。


コピペするセルの表示形式を「文字列」にしてください。

 セルを右クリック→セルの書式設定→表示形式

対象のセルをA1とすると左右文字列の取得は以下となります。
左 =LEFT(A1,FIND(":",A1)-1)
右 =RIGHT(A1,LEN(A1)-FIND(":",A1))
    • good
    • 0
この回答へのお礼

siffon9さん、回答を有り難うございました。

|表示形式が「標準」だと、その文字列は時刻と判断されてしまうのが原因です。
|コピペするセルの表示形式を「文字列」にしてください。
→ 実はこれも既に試しているのですが、 4:01 に対してこれを実行すると、セル内、数式窓内ともに 0.167361111111111 という値になってしまい、目的の値を抽出できなかったので質問した次第です。

お礼日時:2018/10/29 21:10

そもそも時間として入力すると23:59までしか入力できませんが、


そこは問題ないですかね?

問題ないとして、左側の時にあたる部分は「hour」、右側の分にあたる部分は「minute」
関数で抜き出すことができます。
ちなみにVBAでもできますが、普通にExcelのワークシート上でも使えます。
    • good
    • 0
この回答へのお礼

早速の回答、有り難うございました。

|そもそも時間として入力すると23:59までしか入力できませんが、
|そこは問題ないですかね?
→ 抽出対象のデータは 23 以下ですので問題ありません。

|問題ないとして、左側の時にあたる部分は「hour」、右側の分にあたる部分は「minute」関数で抜き出すことができます。
|ちなみにVBAでもできますが、普通にExcelのワークシート上でも使えます。
→ ご指摘の関数はいずれも知りませんでした。
そこで、Hour("4:01:00") のようにしてみたのですが、当該セルには 0:00、数式窓には 1900/1/4 0:00:00 と表示されてしまいました。
関数の使い方に問題があると思いますので、宜しければこの点をご指導下さい。

お礼日時:2018/10/29 18:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!