アプリ版:「スタンプのみでお礼する」機能のリリースについて

セルに(1.5g)や(20g)や(1.0kg)と入力されていて、括弧やgを除いた数値の1.5と20と1.0を抽出する方法はあるのでしょうか?

よろしくお願い致します。

A 回答 (13件中1~10件)

文字の置き換えで、括弧やgをブランクに置き換えてはいかがでしょう。

この回答への補足

ご回答ありがとうございます。

言葉が足りなくて申し訳ありません。

括弧は半角だったり全角だったりするし、個や本など色々な単位があるので、どんな文字列でも数値だけを抽出したいのです。

補足日時:2011/07/24 14:12
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2011/07/27 19:55

A1セルから下方にデータがあるとしてB1セルには次の式を入力して下方にオートフィルドラッグします。



=IF(A1="","",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"(",""),"g",""),"k",""),")",""))

この回答への補足

ご回答ありがとうございます。

言葉が足りなくて申し訳ありません。
括弧は半角だったり全角だったりするし、gやkgだけでなく個や本など色々な単位があるので、どんな文字列でも数値だけを抽出出来ないでしょうか。
小数以外は出来たのですが、小数も整数もというのが出来ません。
抽出した数値を計算に使用するので、数値としての抽出がしたいのですが。

補足日時:2011/07/24 14:13
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2011/07/31 20:15

今データが入っている列(セル範囲)を選択して右クリックしてセルの書式設定のユーザー設定で


(G/標準"g")
などのように設定を追加して設定しておきます


今データが入っている列(セル範囲)を選択してCtrl+Hで置換のダイアログを出し
g)

何も入力しない
に全て置換します

さらに
(

何も入力しない
に全て置換します

以上で数値を取りだした上で今のままの表示で,ふつーに合計等も計算できる方式にやり替えできました。

この回答への補足

ご回答ありがとうございます。

言葉が足りなくて申し訳ありませんが、出来れば関数、最悪マクロで処理したいと考えております。

補足日時:2011/07/24 14:13
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2011/07/27 19:54

回答No2です。


B1セルには次の式を入力して下方にオートフィルドラッグします。

=IF(ISNUMBER(MID(A1,2,5)*1),MID(A1,2,5)*1,IF(ISNUMBER(MID(A1,2,4)*1),MID(A1,2,4)*1,IF(ISNUMBER(MID(A1,2,3)*1),MID(A1,2,3)*1,IF(ISNUMBER(MID(A1,2,2)*1),MID(A1,2,2)*1,IF(ISNUMBER(MID(A1,2,1)*1),MID(A1,2,1)*1,"")))))

この式でしたら単位がどのように変わろうとも問題ありません。ただし数値の部分の文字数は小数点を含めて5つまでです。6つまでの場合にはさらに追加してください。

この回答への補足

ご回答ありがとうございます。

すばらしいです!!
ほぼ思い通りになりました。
ですが、また言葉が足りなくて申し訳ありませんが、
括弧がないこともあるし、必ず2番目から数字が入力されているわけではなく、
文字列の間に数字がある場合もあるのです。(各1個など)

やはり無理難題ですね。
何度もお答え頂きありがとうございました。
助かりました!!

補足日時:2011/07/24 18:04
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2011/07/27 19:55

特に何も使用上の制限がないマクロを使った方法です。



ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピーする


Function getnum(ByVal target As Variant)
 Dim i
 For i = 1 To Len(target)
 If IsNumeric(Mid(target, i, 1)) Then
 getnum = Val(StrConv(Mid(target, i, 15), vbNarrow))
 Exit Function
 End If
 Next i
End Function

ファイルメニューから終了してエクセルに戻る
A1セルに言葉が記入してあるとすると
=getnum(A1)
のように計算させる。




#マクロはやっぱりイヤなときは
=IF(A1="","",LEFT(MID(A1,2,15),MAX(IF(ISNUMBER(MID(A1,ROW($A$1:$A$15),1)*1),ROW($A$1:$A$15)-1)))*1)
といった数式を「コントロールキーとシフトキーを押しながらEnterで入力」(<必ず忘れずこう操作すること)します
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ございません。

思った通りにはいきませんでしたが、
ご回答ありがとうございました。

お礼日時:2011/07/27 19:56

こんばんは!


VBAでの一例です。

一文字ずつ舐めるように検索していき、半角数字・ピリオドだけ表示するようにしてみました。

画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub test() 'この行から
Dim i, j As Long
Dim str, buf As String
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To Len(Cells(i, 1))
str = Mid(Cells(i, 1), j, 1)
If str Like "[0-9]" Or str = "." Then
buf = buf & str
End If
Next j
Cells(i, 2) = buf
buf = ""
Next i
End Sub 'この行まで

尚、データはA1セルからあるとしていますので、仮にA2セルからデータがある場合は
>For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
の部分の「1」を「2」に変更してマクロを実行してみだください。

※ 仮に1.0のように小数点以下が0になった場合は整数部のみ表示されてしまいます。

他に良い方法があればごめんなさいね。m(_ _)m
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ございません。


このような感じが理想でした!!
ですが、全角の場合もあり、データが数万あるので少し重いかもです。
せっかく考えてくださったのに申し訳ございません。

ご回答ありがとうございました

お礼日時:2011/07/27 19:56

 括弧の種類や、単位の種類、数字の桁数には影響されない方法です。


 但し、6.022×10^23mol^-1や2.99792458E8m/sといった、指数で表示された数値には対応しておりません。
 又、元となる「単位付きの数値」が、必ず括弧等の「数字やマイナス記号ではない」文字から始まっている場合には対応していますが、最初の文字が数字となっている文字列に対しては、対応しておりません。
 今仮に、A1セルに元となる「括弧で括られた単位付きの数値」を表す文字列データーが存在するものとします。
 その場合には、数値のみを取り出す関数は、次の様なものになります。

=IF(ISNUMBER(MID(A1,2,1+(ASC(MID(A1,2,1))="+")+(ASC(MID(A1,2,1))="-"))+0),MID(A1,2,SUMPRODUCT(1*ISNUMBER(MID(A1,2,ROW(INDIRECT("Z1:Z"&LEN(A1)-2)))+0))+(ASC(MID(A1,2,1))="-")+(ASC(MID(A1,2,1))="+"))+0,"")
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2011/07/27 19:57

>括弧がないこともあるし、必ず2番目から数字が入力されているわけではなく、文字列の間に数字がある場合もあるのです。



数式は簡略化できる可能性がありますが、文字列にはさまれた数字を取得するなら以下のような数式で表示できます。

=MID(LEFT(A1,MAX(ISNUMBER(MID(A1,COLUMN(1:1),1)*1)*COLUMN(1:1))),MIN(IF(ISNUMBER(MID(LEFT(A1,MAX(ISNUMBER(MID(A1,COLUMN(1:1),1)*1)*COLUMN(1:1))),COLUMN(1:1),1)*1),COLUMN(1:1),"")),10)*1

配列数式ですので入力後Ctrl+Shift+Enterで確定してください。
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ございません。

すみません。
エラーになってしまうところがあってダメでした。
ご回答ありがとうございました。

お礼日時:2011/07/27 19:58

回答No2,4です。


作業列をB列に設け、B1セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A1="","",MIN(IF(ISNUMBER(FIND(0,ASC(A1))),FIND(0,ASC(A1)),100),IF(ISNUMBER(FIND(1,ASC(A1))),FIND(1,ASC(A1)),100),IF(ISNUMBER(FIND(2,ASC(A1))),FIND(2,ASC(A1)),100),IF(ISNUMBER(FIND(3,ASC(A1))),FIND(3,ASC(A1)),100),IF(ISNUMBER(FIND(4,ASC(A1))),FIND(4,ASC(A1)),100),IF(ISNUMBER(FIND(5,ASC(A1))),FIND(5,ASC(A1)),100),IF(ISNUMBER(FIND(6,ASC(A1))),FIND(6,ASC(A1)),100),IF(ISNUMBER(FIND(7,ASC(A1))),FIND(7,ASC(A1)),100),IF(ISNUMBER(FIND(8,ASC(A1))),FIND(8,ASC(A1)),100),IF(ISNUMBER(FIND(9,ASC(A1))),FIND(9,ASC(A1)),100)))

これで数値が文字列の何番目から始まっているかがわかります。
そこで答えですがNo4の式を利用します。C1セルには次の式を入力して下方にオートフィルドラッグします。

=IF(ISNUMBER(MID(A1,B1,5)*1),MID(A1,B1,5)*1,IF(ISNUMBER(MID(A1,B1,4)*1),MID(A1,B1,4)*1,IF(ISNUMBER(MID(A1,B1,3)*1),MID(A1,B1,3)*1,IF(ISNUMBER(MID(A1,B1,2)*1),MID(A1,B1,2)*1,IF(ISNUMBER(MID(A1,B1,1)*1),MID(A1,B1,1)*1,"")))))
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2011/07/27 19:58

回答No9です。


B1セルには次の式を入力して式を確定する段階でCtrl+Shift+Enterで確定します。その式を下方にオートフィルドラッグします。

=IF(A1="","",MIN(IF(ISNUMBER(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1))),FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)),100)))

C1セルへはNo9の式を入力し下方にオートフィルドラッグします。
    • good
    • 2
この回答へのお礼

お返事が遅くなり申し訳ございません。

こちらを参考にさせていただきたいと思います!!
何度も何度もありがとうございました。

正直、こんなに多くのご回答を頂けると思っていませしたので、
とても感激しています。

ご回答を頂きました皆様、本当に本当にありがとうございました。
頑張ります!!

お礼日時:2011/07/27 20:01

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

このQ&Aを見た人はこんなQ&Aも見ています