• ベストアンサー

Excelのセルから特定値の抜き取りについて

添付画像のようにB列にラップタイムを貼り付けてあります。 このタイムを区間ごとにC~L列にそれぞれ取り出したいのですが知恵をお貸しくださいm(_ _)m タイムが「12.0」など全て同じ桁なら法則に従い「LEFT関数」などで簡単でしたが、「9.1」と1桁のパターンもあるので苦戦しています・・・ 取り出す数字のパターンは「●●.●」(例:11.5)と「●.●」(例:6.5)の2種類です。 間の「-」ハイフンは半角です。 C~L列にどうにか取り出せる関数はありますでしょうか。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

数式で対応するなら以下の数式をC2セルに入力し、右方向および下方向にオートフィルコピーしてください。 =TRIM(MID(SUBSTITUTE($B2,"-",REPT(" ",100)),(COLUMN(A:A)-1)*100+1,100))

mzakom
質問者

お礼

素晴らしい。見事にやりたい事が出来ました。 仕組みの理解はいまいちなので、勉強に励みたいと思いますm(_ _)m ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.7

#5、6、cjです。たびたびすみません。追加レスです。 戻り値が文字列値では扱い難そうですよね。 数値または空白を意味する空文字を返すように書き直してみました。 関数名変えましたから、数式は、 =SplitVal($B2) に替えて、他同じ手順です。 ※#5の手順中、プロシージャと数式だけ変更です。 因みに =SUM(SplitVal(B2)) =AVERAGE(SplitVal(B2)) =MIN(SplitVal(B2)) 等のように、配列を引数として扱える関数については、 そのまま普通に、引数として渡せば、正しく計算されます。 一度設定してしまえば容易に 応用が利くのがUDFの特長、ではあります。 ' ' ==============標準モジュール============== Function SplitVal(ByVal Source As String, Optional ByVal Delimiter As String = "-")   Const XSize = 29   Dim arrS, arrV, i&   arrS = Split(Source, Delimiter)   ReDim arrV(XSize)   For i = 0 To UBound(arrS)     arrV(i) = Val(arrS(i))   Next i   For i = UBound(arrS) + 1 To XSize     arrV(i) = ""   Next i   SplitVal = arrV End Function ' ' ===================================)

mzakom
質問者

お礼

追加画像確認しました。ありがとうございます(>_<) 今回もユーザー定義関数など、勉強になりました。 ぜひ後学のために参考にさせて頂きますm(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.6

#5、cjです。 すみません、別件に関する連絡を書き忘れてしまいました。 ///  先回ご質問のNo.8297159について、  締切後に画像を追加しましたので、お暇な時にでも目を通してみてください。 /// 失礼しました。

全文を見る
すると、全ての回答が全文表示されます。
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.5

こんにちは。お邪魔します。 UDF(ユーザー定義関数)でこなしましょう。 ■VBA ' ' ==============標準モジュール============== Function SplitTxt(ByVal Source As String, Optional ByVal Delimiter As String = "-")   Dim arrV   arrV = Split(Source, Delimiter)   ReDim Preserve arrV(29)   SplitTxt = arrV End Function ' ' =================================== 以上のプロシージャを、当該ブックの標準モジュールに貼り付けます。 ■Excel C2からL2までをドラッグして【C2:L2 選択】(C2 がアクティブな状態で) F2 キーを押して、【C2 を編集モードに】 以下の【数式を数式バーに貼付け】 =SplitTxt($B2) Ctrl + Shift + Enter で、【配列数式として確定】 ※数式バーに {=SplitTxt($B2)} と表示されれば、正しく設定されています。 【C2:L2 選択したまま、下にフィル】 ■手順は以上です。 例示は、C2:L2、10列にしていますが、関数は30列まで対応しています。   ReDim Preserve arrV(29) の 29 という(最大30列迄対応する場合は-1して29の意)数値を必要に合わせて変更可能です。 上の例のように、C2:L2 の範囲で配列数式を設定した場合は、 C2:L2 の一部のセルを、書き換えたり消去することはできません。 C2:L2 を単位として編集するようにしてください。 配列数式にする理由は、UDF(ユーザー定義関数)での計算回数に無駄を出さない為です。 配列数式として設定したセル範囲ごとに、1回だけ計算するので、動作が軽くなります。 UDF(ユーザー定義関数)が自動計算されるタイミングは、 Sourceで指定した参照先が更新された時、です。 一般的なマクロと違って、UDF(ユーザー定義関数)の計算時は、 UnDo(やり直し)を無効にするようなことはありません。 言わずもがなですが、マクロ有効ブックである必要があります。 UDFを複数のブックで使用したい場合は、アドインブックで保存して対応可能です。 (その場合は、マクロ有効ブックでなくとも数式を使用出来るようになります) 以上、運用面など相談、疑問等あれば補足ください。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.1です。 >B列のデータを変更したときに自動でC~L列に取り出し出来るようにしたいので とありますので、VBAでの一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, endCol As Long, myArray For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row '←2行目~B列最終行まで endCol = Cells(i, Columns.Count).End(xlToLeft).Column If endCol > 2 Then Range(Cells(i, "C"), Cells(i, endCol)).ClearContents End If myArray = Split(Cells(i, "B"), "-") For k = 0 To UBound(myArray) With Cells(i, k + 3) .Value = myArray(k) .NumberFormatLocal = "0.0" End With Next k Next i End Sub 'この行まで ※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。 尚、「B列のデータを変更したときに」を重視すれば ChangeイベントでB列データ変更時にマクロを走らせる方法もあります。 (1行ずつの変更時) 今回はこの程度で・・・m(_ _)m

mzakom
質問者

お礼

お世話になりますm(_ _)m なるほど。チェンジイベントを使うという手がありましたか。 tom04さんの方法は毎回勉強になります。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

ハイフンの位置をFind関数でだして、取り出すことは可能です。 あと、区切り文字であれば列に変換してくれますので、データタブの区切り位置、区切り文字をその他でハイフンにすればいいです。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! 一番簡単は方法は B列すべてを範囲指定 → データ → 区切り位置 → 「カンマやタブ・・・」が選択されているのを確認し「次へ」 → 「その他」を選択 → 右側の窓に「-」(ハイフン)を入力し完了! こんなんではどうでしょうか?m(_ _)m

mzakom
質問者

お礼

返信ありがとうございます。 B列のデータを変更したときに自動でC~L列に取り出し出来るようにしたいので、今回はその方法は使用しない方向です。説明不足で申し訳ありませんm(_ _)m

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelの置換機能で文字列の部分削除

    Excelの置換機能を使って、あるパターンの文字列の特定の部分のみ削除すると言うことは可能でしょうか? <文字列例> AB01234-56789 のハイフン以下(-56789)のみを削除したい 対象の文字列パターンは、最初の2桁がアルファベットで固定、そのあと数字が5桁(ユニーク)続き、ハイフン、その後ユニークな文字列(数字5桁) さらに言うと、ファイル内にはこのパターン以外の文字列も存在している(ハイフン含む)ので、上記のパターンの文字列のみをマッチングさせ、ハイフン以下を削除したいのです。 やはり、VBAとかで正規表現使わないと無理ですかね?? 数万件の大量のデータの中から上記処理をせねばならず困っております・・ ご教授いただけると幸いです。

  • Excelでハイフンが入った文字列の抽出について

    A列に『12-1』、『1-5-10』、『14-15-6-3』など1桁また2桁の数字がハイフンで区切られた文字列があるとします。 そこからB列には左から2番目の数字、C列には右から2番目の数字、D列には1番右端の数字を関数で抽出したいのですが、出来ないでしょうか。 全部半角で、必ず数字は二つ以上あり、桁数は2桁までです。下記の画像のようにしたいです。 http://uproda.2ch-library.com/801593yFu/lib801593.jpg

  • エクセルで、半角文字列を抽出するには

    使用機種はXPでEXCEL2003です。 住所のデータ整理をしています。 地名の後の番地のみ半角数字(ハイフンも半角)で入力されており、その部分だけを別の列に移動させる作業です。 関数で、半角文字列だけを抽出することはできますか? left関数を使おうとも思いましたが、文字数がバラバラなので、難しいと思いました。 私は、一つひとつコピー→ペーストをするしか思いつかないほどの初心者です。 どうぞよろしくお願いいたします。

  • ・エクセルで特定の条件に合う文字列を抜き出す方法を教えて

    ・エクセルで特定の条件に合う文字列を抜き出す方法を教えて 例のようにA列の文字の中からカッコ内(4桁数字“ハイフン”7桁数字)を B列に表示するにはどうしたらよいでしょうか。 ちょっと面倒なのはカッコは複数ある場合があり(xxxx-xxxxxxx)の条件に 合ったものだけを隣のセルに表示したいのです。 カッコとカッコ内は半角でxは不特定な数字です。 (例) A1=あいうえお(abcde)かきくけこ(xxxx-xxxxxxx)さしすせそ B1=xxxx-xxxxxxx よろしくお願いいたします。

  • セル内の特定の文字の右隣りの半角数字を取り出したい

    いつもお世話になっております。 エクセル関数で、セル内の文字列の中の特定の文字の右隣り2文字か3文字を取り出したいのですが、いろいろ試行錯誤しているのですが中々突破口すら開けず質問させていただきました。 例)      A     B    C    D 1          赤    青    黄 2 赤15個青99個   15    99     3 薄青16個赤71個  71   16 4 赤133個黄25個  133        25 上のように、B2:D4セルに数式で抽出したいです。 ないものは空白でもゼロでも構いません。 検索値は漢字1文字で、取り出したい値は半角数字2桁or3桁です。 半角数字の後に必ず「個」が付きます。 「薄青」でも「青」を検索値とするのですが、取り出したい数字が2桁か3桁の二通りあることもネックになるかと思います。 関数に精通している方いらっしゃったら是非教えてください。 よろしくお願いいたします。

  • 電話番号の分割

    上司に電話番号を入力したエクセルシートを渡され 1234567890 09012345678 0501234567 ... これらを市外局番と次の番号と最後の番号に分けて表示するように言われました。 上で言うと              b列  c列 d列 1234-56-7890なので1234  56 7890 090-1234-5678なので090 1234 5678 050-123-4567なので050  123 4567というふうに a列にはハイフンの入ってない電話番号が入力されてます。 自分で考えたことは電話番号のa列のデータにハイフンを入力していって b列はLEFT関数とFIND関数で求めてc列ができなくて d列はたぶんすべて4桁なのでRIGHT関数でしようかと 思いましたがc列の求め方がわからず、できないままで... もっと簡単に??できる方法はないかと思いました。よろしくお願いしますm(__)m

  • Excel セル内の文字だけを取り出すには

    Excelの1つのセルに 01234 ABCDEFG のように、「数字5つ(固定)+半角スペース+(任意の数の)文字」 が入力されています。数値は必ず5桁と決まっていますが、 文字列の数はさまざまです。 関数で文字の部分だけ、別のセルに取り出したいのですが、 どの関数を使うとできますか?教えて下さい。 よろしくお願いします。

  • 【エクセル】VLOOKUPが上手くいきません。。。

    VLOOKUP関数がうまくいかないので教えてください。 下のような表になっています。    A     B    C    D    E    F 1  番号  名前               コード 2 11-2345  ABC  11  #N/A  11  あああ 3 22-3456  DEF  22  #N/A  22  いいい  4 33-4567  GHI  33   #N/A  33  ううう 5 44-5678  JKL  44        44  えええ 6 ・・・・ ・・・               55  おおお 7 ・・・・ ・・・               66  かかか A、B列はがもとから打ち込んであるデータです セルC2は =LEFT(A2,2) でA列のハイフンの前を表示しています。 セルD2に =VLOOKUP(C2,$E$2:$F$7,2,FALSE) を入れると#N/Aが表示 されます。ちなみに、セルC2にLEFT関数ではなくて、数字をそのまま、 11と入力すると、セルD2に「あああ」と表示されます。どこがいけない のでしょうか? $E$2:$F$7はC列の二桁の数字に対応するコードの表になっています。 エクセル2003を使っています。

  • エクセルでセルのややこしい書式設定と計算をしたいです

    エクセルで次のようなスプレッドシートを作りたいのですがヘルプ等を見てもうまくいきません。どうしたらよいでしょうか? A列を表示用、B列、C列を入力用、D列を計算用にしたいです。 A列はセルの書式設定でユーザー定義を変えればよさそうな気がしますが・・・ またD列の計算はC列のセルの内容を分けないとできないでしょうか? ◎-はマイナスではなくハイフンです ◎C列は数値では3桁のうち左2桁の単位は32分の1、右1桁の単位がは8分の1/32です。 A列    B列   C列    D列で計算させたいもの 96-316  96   316    =96+31/32+6/8/32 (答え96.9921875)  100-01  100   01     =100+1/32+0/32(答え100.03125) どうかご教授ください。 よろしくお願い申し上げます。

  • Excelで値と値をくっつけたり、+1する方法を教えてください

    添付した画像のような表を作成しています(添付用に加工しています) A列とB列は、手入力します。  A列:2桁の半角英数  B列:3桁の半角英数 C列に入るものは、  11(固定された数字)+A列の値+B列の値+001から始まる連番 ですので、3行目でいうとC3に「11 A1 B22 001」(分かりやすく半角スペースを空けています)      4行目ですとC4に「11C3D44002」 という値をA列、B列に入力をしたら、C列に上記のような10桁の値を 自動で入力されるしたいのですが、関数などで行うことでできないものかと思い質問しました。 現状は、C列も手入力で行っておりまして、  ・最初の2桁は、固定数値  ・A列とB列の値を使用している  ・最後の3桁は001からの連番を使用している    ※終わり3桁は無条件で001~の連番にしている もし関数などで対応可能でありましたら、どのような数式にすればよいのか ご教示頂けるとありがたく思います。 よろしくお願い致します。

専門家に質問してみよう