• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データが「数値と文字列」の組み合わせのセルにおいて、数値部分だけを取得)

データが「数値と文字列」の組み合わせのセルにおいて、数値部分だけを取得する方法

このQ&Aのポイント
  • データが「数値と文字列」の組み合わせのセルにおいて、数値部分だけを取得する方法を教えてください。
  • 文字列として格納されている数値の部分を数値として取り出す方法について教えてください。
  • Excelの関数を使用して、文字列から数値部分だけを取得する方法を教えてください。

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

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

元のデータが数字+(文字)が信頼できるなら、少々手抜きですが Valが使えますね。 文字を数値に変換する関数です。 先頭から数字変換可能な文字を探して、変換できない文字以降は無視しますので、(文字)部分以降は無視されます。 信頼できるならってのは、先頭から変換できない文字の場合は0を返すこと。 全角数字も変換してしまう事、"&HFF"などの文字を16進数と解釈して変換してしまうこと。 上記に問題がある場合は使用できないって事です。 ※例として書かれたデータであれば使用に問題はありませんが。

aw-dlay
質問者

お礼

Val関数、これ、なかなか素晴らしいですね。 (当初、このような関数を探していましたのでドンピシャリで、とても嬉しいです。) ただ、下の回答の「お礼欄」にも書きましたが、 平均値を求める際、各セルに対し、Val関数を適用するような方法になるのでしょうか? 具体的に、本件の例で平均値を求める方法は、どのような形になりそうでしょうか。 もし、またよろしければ教えて下さい。

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

その他の回答 (3)

回答No.4

別セルに、数値部分と文字列部分を関数にて分割してから VBAで、処理してはどうでしょうか? たとえば、B1セルに以下の関数を入力しておきます。  =VALUE(MID(A1,1,FIND("(",A1,1)-1)) C1セルに以下の関数を入力しておきます。  =MID(A1,FIND("(",A1,1),LEN(A1)) 上記関数を埋め込み後、VBAでB1を参照した場合、B1には105を処理することに なると思います。 文字を入力する場合には、”(りんご)”を処理することになると思います。

aw-dlay
質問者

お礼

回答ありがとうございます。 >別セルに、数値部分と文字列部分を関数にて分割してから いったん、値を別セルに置き、それを足場に、、、という作戦ですね。 確かにそういう考え方もありますね。 ただ、私が作ろうとしているプログラムは、 その足場となるセルを用意できない(ビジュアル的に、そうしたセルを作りにくい)仕様なので、 今回に関しては、この方法はとれないんですよね、、、。 ということで、Valで1つずつ処理し、それをFor~Nextで回しながら処理することにしました。 でも、参考になりました。 また色々と教えて下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

文字列から数値化するために列Bを使用した方が良いかも。 VBAで行く決断なさったのなら、Rangeを渡してForEachで有効なセルのみ 判定しながら抽出しながら計算させたほうがスッキリする気がします。

aw-dlay
質問者

お礼

補足をありがとうございます。 Val関数で手軽に解決できそうなので、このVal関数を使うことにしたのですが、 その先で、つまずいています。 例えば、A1~A100までの平均を出す場合、 Val(Range("A1").Value) + Val(Range("A2").Value) + Val(Range("A3").Value) + Val(Range("A4").Value) ・・・ Val(Range("A100").Value) この和をとってから、それを、100で割って、平均値を出す、 という方法で現在、検討中ですが、 この方法で、いかに完結に書くか、について、悩んでおります。 どう書くのがスマートでしょうね。 もし、何かアイデアなどありましたら、教えて下さい。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

ワークシート上なら、区切り位置の「その他」で ( を指定するとか。 VBAであれば文字列を配列に分解するSplit関数を使用。 (デフォルトはカンマだが、デリミタを指定できるので)

aw-dlay
質問者

お礼

教えて頂いたsplit関数という関数で、したいことが出来そうです。 ただ、平均値を求める際に、 average = WorksheetFunction.average(Range(A1:A4)) というようなやり方で今、考えているのですが、 この方法と、split関数を使って、問題を解決するには、 どうしたら良いでしょうか? A1~A4まで、1つずつ、まずsplit関数で、数値にしてから、「A1:A4」の範囲で平均値を出すような感じになるのでしょうか。 VBA初心者であるため、変なことを言っているかもしれません。 なにとぞ、宜しくお願い致します。

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

関連するQ&A

  • セルには何も入ってないのに、数値型になる理由は?

    セルに何も入ってない状態で Sub Macro() If IsNumeric(Range("a1").Value) = True Then MsgBox "A1には数値が入ってます" End If End Sub を実行すると、 "A1には数値が入ってます" が表示されます。 なぜでしょうか? Sub Macro2() MsgBox TypeName(Range("a1").Value) End Sub を実行すると、stringが返ってきます。

  • 【VBA】「同じ文字を含むセルがあるならば」とやりたい

    こんばんは。 エクセル2003を使用しています。 例えば A1→「りんご」 A2→「りんご食べたい」 の場合、 「りんご」は2個以上あります としたいのですがうまくいきません。 Sub 重複() For 行 = 1 To Cells(65536, 1).End(xlUp).Row If Cells.Find(what:=Range("a" & 行), LookAt:=xlPart) Is Nothing Then Else 'あるならば MsgBox Range("a" & 行) & "は2個以上あります" End If Next End Sub これだと取得セルもカウントされてしまうため、必ずMsgBoxが表示されてしまいます。 どうすれば取得セル意外にも取得セルを含むセルがあるかを調べられるのでしょうか? そしてこれは A1→「りんご」 A2→「りんご食べたい」 A3→「みかん」 A4→「みかんはオレンジ」 A5→「バナナ」 ・ ・ ・ と続いており 最終的には →「りんご食べたい」 →「みかんはオレンジ」 →「バナナ」 にしたいのです。 よろしくお願いします。

  • あるセルの文字列(または数値)を、他のセルのデータの一部として流用した

    あるセルの文字列(または数値)を、他のセルのデータの一部として流用したい場合について。 例えば、 セルA1に 0001 セルA2に K-0001 セルA3に T-0001 セルA4に W-0001 また、 セルB1に 0035 セルB2に K-0035 セルB3に T-0035 セルB4に W-0035 …C、D、E、、、と100項目ほど続く、という場合。 このようにデータを入力していきたい場合、 例えば、A列で、 A1の0001という数字を、A2~A4の中で、「データの一部として代入」したい時、 どういう風に自動化できますでしょうか? (例)K-0001 の中において、0001という数字は、データの一部として使われている。 ちょっとまとめてみますと、 1行目:●●●● 2行目:K-●●●● 3行目:T-●●●● 4行目:W-●●●● ●●●● は、同列の1行目の数値を、そのまま割り当てる というような記述ができたらなと思っているわけです。 つまり、1行目に●●●●を打ち込むだけで、その列の2行目以降について、適宜、自動的に必要な数値なり文字列が入力されるようにしたいわけです。 このようなことは、できませんでしょうか? マクロでも何でも結構です。 どなたか、お詳しい方、教えて下さい。 必ずお返事致します。

  • セル内の文字列操作について

    Excelでセル内の文字列を操作したいのですが、Excelの標準の関数では出来そうにないので、どなたかお力をお貸しください。 1つのセル内に、文字列や数値が複数入っています。 (例) Excel 12 りんご Word 11 このセルを調べて、数値のデータが複数入っている場合、最大値のみを表示させ、残りの数値データは削除したいのです。 (結果) Excel 12 りんご Word この処理の対象はセル内の数値データであって文字列には作用させず、結果的には文字列はそのまま表示させたいのです。 Excelの文字列に関する関数を調べてみたのですが、該当するものがなく、VBAを使用しなくてはならないのかもしれません。処理するデータが大量なため、VBAマクロなどで処理できれば大変ありがたいのですが、どなたかご存知の方がいらっしゃいましたら、ご教授くださいませ。どうぞよろしくお願いいたします。

  • VBA セルの値13が数値だったり文字列だったり

    セルに入った「13」が数値の場合でも文字列の場合でも処理出来る方法はありませんか? 例えば If Range("A1").Value=13 Then 処理 Endif セルの値が文字列"13"の場合、同じと認識してくれません。 いい方法はないでしょうか?

  • セル内の文字列に[?]が含む場合につきまして

    お世話になります。 セル内の文字列に[?]が含む場合につきまして、ご質問致します。 OS:Windows10 Excel:2019 概要: Webページから金融明細の、お取引日【2-11- 2】をコピーしてセルA1に貼り付けします。 A1(セル)⇒【2-11- 2】 ※【2-11- 2】のスペースを詰めて【2-11-2】にしたいと思っています。 '--------------------------------------------------- ' Dim Data As String Data = Range("A1").Replace(" ", "") 'スペースを詰めることができませんでした。 'Dataは【2-11-?2】スペースでは無く【?】になっていました。 'そこで以下を検索しましたがヒットしませんでした。 If InStr(Data, Chr(63)) > 0 Then Stop '? If InStr(Data, Chr(32)) > 0 Then Stop 'スペース '--------------------------------------------------- ' 質問: スペースを詰めて【2-11- 2】⇒【2-11-2】にしたいのですが 【2-11-?2】で【?】につきまして、ご教示願えますと幸いであります。

  • セル内の文字列に複雑な処理をしたい

    セルの中の複数の異なる文字列を以下のように処理したいのですが、Excelの標準の文字列操作の関数で試行錯誤してみたのですが、どうもうまくできませんでしたので、ご存知の方がいらっしゃいましたらご教授ください。VBAで処理しないとできないかもしれませんがよろしくお願いします。 あるリストのC列に備考欄が設けてあり、次のようなデータが入っています。 4/30 みかんを買った(強制改行して) 5/1 りんごを売った 5/2 ぶどうを食べた 5/5 すいかを買った このセルを調べて、 (1) セル内に"みかん"と"りんご"という文字列があったら、これを取り出して、右隣のセルに表示           (結果)⇒ みかん りんご (2) セル内に"みかん"と"りんご"という文字列があったら、これを"A","B"に置き換えて、右隣のセルに表示          (結果)⇒ A B (3) セル内の数値データと"を食べた"、"を買った"、"を売った"を取り除いて、右隣のセルに表示          (結果) ⇒ みかん りんご ぶどう すいか   (4) セル内に"か"を含む文字列があったら個数に関係なく"A"に置換して右隣のセルに表示             (結果) ⇒ A   すべて取り出したい文字列(上の例ではみかん、りんご)や置換したい文字列(A、B)以外の文字列は全てクリアして表示しないようにします。少し複雑ですが、やり方をご存知の方がいらっしゃいましたら、お教えください。

  • VBA 文字列と数値の混在

    Excel VBA 独学中の初心者です。独学中の初心者です。 データ型に関する以下の疑問についてお答えいただける方、よろしくお願い致します。 疑問1.「文字列 & 数値」でエラーにならず、結果は文字列になるようですが、これはVBAの規則上当たり前のことでしょうか。 疑問2.InputBox関数の戻り値は、Typeを省略した場合文字列と思いますが、これを数値型の変数に代入してもエラーは発生しませんでした。これも当たり前のことでしょうか。 具体例は以下です。 ------------------ Option Explicit Sub 文字列と数値の疑問() '初期設定 Cells.Clear Range("A1").Select '本題はここから Dim i As Long Dim j As Long Dim strRange As String Dim strInput As String '------------------ '疑問1の例 i = 2 strRange = "A" & i '疑問1:文字列と数値変数(長整数型)を文字列連結演算子で連結してもエラーにならない。・・・なぜ? '結果は1つの文字列→strRange ="A2" '例 Range(strRange).Select '動作OK Range(strRange) = i '動作OK '------------------ '疑問2の例 strInput = InputBox("選択行を入力してください", , "4") 'strInputは文字列型変数 j = strInput '疑問2:数値変数(長整数型変数)に文字型変数を代入してもエラーにならない・・・なぜ? '結果は長整数型変数(数値) j=4 (Input BOX をデフォルトでOKしたとき) '例:以下の両方とも動作OK '1) strRange = "A" & strInput '文字列 & 文字列 →文字列 strRange ="A4";疑問なし Range(strRange).Select '動作OK Range(strRange) = strInput '2) Cells.Clear '確認用にクリアスクリーン Range("A1").Select '確認用にセル位置移動 strRange = "A" & j '文字列 & 数値 →文字列 strRange ="A4";疑問1と同じ Range(strRange).Select '動作OK Range(strRange) = j '動作OK End Sub

  • Excelで、数値データとして参照したいのに、文字列データとしてしか参照してくれません

    Excelで、ある数式セルに表示されたデータを、数値データとして参照したいのですが、どうやっても文字列データとしてしか認識してくれません。 具体的に書くと、 例えばセルA1に、FIND関数で他のセルから抜き出した半角数字のみのデータを表示しているとします。 そのA1の数値を、今度はセルA2で、 if(A1=1000,A1*2,A1/2) などと数式で参照したい時に、私のExcel(2002です)では、どうやってもA1=1000という条件式をきちんと判別してくれません。どうやら、FIND関数で抜き出したために文字列データとして扱われてしまっているようです。 その証拠に、A1が実際に「1000」の時に if(A1="1000",A1*2,A1/2) という風に1000をダブルクォーテーションで囲んで式を書くと、きちんとA1*2を実行してくれます(つまり、A1が実際に1000の時でも条件式の1000をダブルクォーテーションで囲まないと、きちんと判別してくれないという事です)。 この状態から抜け出せずに、どうにも困っています。 どうにかA1の「1000」というデータを文字列でなく数値データとして条件式で利用できるように出来ないものでしょうか。 乱文ですみませんが、よろしくお願いいたします。

  • 文字型配列に数値を文字として代入したいです

    掲題の通りですが、listという配列に数値や文字を入れたいです。 数値は必ず整数1桁、文字はAかBの1文字です。 配列は char list[] = new char[8]; として定義しています。 numにAかBを入れると、代入も表示もうまくいきます。 しかし、数値を入れると以下のような動作となります。 list[i] = num とすると 「不適合な型: 精度が失われる可能性があるintからcharへの変換」 というエラーが表示されます。 list[i] = (char)num; に変更するとエラーは出ませんが、表示がうまくされません。 list[i] = String.valueOf(num); に変更すると 「エラー: 不適合な型: Stringをcharに変換できません:   list[i] = String.valueOf(num);」 というエラーが表示されます。 何か良い方法はないでしょうか。