EXCELについて質問です。ある連続するセルにA12345 B67890 C12345D 12345678E 123.456F 1234ABCD と文字列が入力してあるとします。 これらのセル内文字列から関数を使用して数値だけを抜き出す方法を教えてください。 カンマや、アルファベット以外の1や2等の数値だけです。数値は別セルで文字列としてではなく、数値として使用する必要があります。できませんなどの回答は不要です。データの量は数百ありますので、数値を手入力するのは避けたいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答7件)

id:garyo No.1

回答回数1782ベストアンサー獲得回数96

ポイント15pt

http://d.hatena.ne.jp/garyo/20041006#1096994915

2004-10-06 - ジャンク☆ニュース 臥龍

マクロで関数を作って見ました。

URL先を参照願います。

id:els

ありがとうございます。

やはりマクロを使うしかないのでしょうか・・・

2004/10/06 08:18:39
id:h_kiku No.2

回答回数21ベストアンサー獲得回数0

ポイント15pt

http://www.hatena.ne.jp/1096992387#

EXCELについて質問です。ある連続するセルにA12345 B67890 C12345D 12345678E 123.456F 1234ABCD と文字列が入力してあるとします。 これらのセル内文字列から関数を.. - 人力検索はてな

EXCELだけでやるのであれば、横に4つセルを付け加えればできると思います。A1にその値が入っていると仮定して、

《1つめ:B1》

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(UPPER(A1),”A”,),”B”,),”C”,),”D”,),”E”,),”F”,),”G”,)

《2つめ:C1》

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B1,”H”,),”I”,),”J”,),”K”,),”L”,),”M”,),”N”,),”O”,)

《3つめ:D1》

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C1,”P”,),”Q”,),”R”,),”S”,),”T”,),”U”,),”V”,),”W”,)

《4つめ:E1》

=VALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(D1,”X”,),”Y”,),”Z”,),”,”,),”.”,),” ”,),”-”,))

id:els

ありがとうございます。

もしかしてこれってひとつのセルに文字列が入力されている場合でしょうか??

2004/10/06 08:23:04
id:teatime_miki No.3

回答回数88ベストアンサー獲得回数0

ポイント30pt

http://www.infoseek.co.jp/

楽天が運営するポータルサイト : 【インフォシーク】Infoseek

部分的に不明な点があるので、以下のように推測させていただきました。

・A12345→12345、123.456F→123456のように、数字以外を取り除く(ドットを小数点と見るかどうかわからなかったので、数値限定という形で文意をとらせてもらいました。)

この点については違う場合、この回答に関するポイントは不要ですが、コメントで詳細を教えてください。(再度回答を考えてみたいと思います。)

まず、A列にデータが入ってる場合、B列に下の関数を入れてください。

------------

=VALUE(IF(ISNUMBER(VALUE(MID(A1,1,1))),MID(A1,1,1),””)&IF(ISNUMBER(VALUE(MID(A1,2,1))),MID(A1,2,1),””)&IF(ISNUMBER(VALUE(MID(A1,3,1))),MID(A1,3,1),””)&IF(ISNUMBER(VALUE(MID(A1,4,1))),MID(A1,4,1),””)&IF(ISNUMBER(VALUE(MID(A1,5,1))),MID(A1,5,1),””)&IF(ISNUMBER(VALUE(MID(A1,6,1))),MID(A1,6,1),””)&IF(ISNUMBER(VALUE(MID(A1,7,1))),MID(A1,7,1),””)&IF(ISNUMBER(VALUE(MID(A1,8,1))),MID(A1,8,1),””)&IF(ISNUMBER(VALUE(MID(A1,9,1))),MID(A1,9,1),””)&IF(ISNUMBER(VALUE(MID(A1,10,1))),MID(A1,10,1),””))

-------------

この関数はセルに入力された文字列を1文字ずつ数字かどうかチェックして、数字なら表示するという関数になります。

また、セル内の文字列は10文字以内と仮定して作っていますので、10文字以上の場合、修正する必要があります。

連続するセルに入っているということですから、コピーして張り付けたあとは、オートフィルで、関数をコピーしてください。

id:els

ありがとうございます!

この方法で数値のみを抜き出すことができました!

”.”を小数点とする場合の方法もありましたらお願いします!

2004/10/06 08:56:11
id:hideawayjp No.4

回答回数1ベストアンサー獲得回数0

ポイント15pt

http://www.hi-ho.ne.jp/babaq/

Baba Centerfolds

Perl5互換の正規表現エンジン。

自分はPerlをある程度知ってたからですが

上記DLLを使って似たようなことをVBAからやらせています。

より、ファイルをDLしてInstall。

VBAにて

Dim fs , Text , Out

Set fs = CreateObject(”basp21”)

’Loop

Text = activecell.value

Out = fs.Replace(”s/[a-zA-Z]//g”, Text) ’又はTrを使用

’計算したいときはここの行でOutを計算させる。

activecell.value = Out

’Loop

’上記Loop部分をDo Loopなりを使って、activeCell.offset(1,0).select等で移動。

id:els

うーん、すみません、VBAはつかったことがありませんので、今回は関数のみでやりたいと思います・・・。

2004/10/06 09:47:59
id:EddyYamanaka No.5

回答回数385ベストアンサー獲得回数1

ポイント15pt

整数用です。

Public Function ValEx(sVal As String) As Long

Dim sOne As String

ValEx = 0

While Len(sVal)

sOne = Left$(sVal, 1)

sVal = Mid$(sVal, 2)

If Val(sOne + ”1”) Then

If sOne <> ”.” Then

ValEx = ValEx * 10 + Val(sOne)

End If

End If

Wend

End Function

実数用です。

Public Function ValExP(sVal As String)

Dim fPeriod As Boolean

Dim vSub

Dim sOne As String

fPeriod = False

vSub = 1

ValExP = 0

While Len(sVal)

sOne = Left$(sVal, 1)

sVal = Mid$(sVal, 2)

If Val(sOne + ”1”) Then

If sOne = ”.” Then

fPeriod = True

Else

If fPeriod Then

vSub = vSub / 10

ValExP = ValExP + Val(sOne) * vSub

Else

ValExP = ValExP * 10 + Val(sOne)

End If

End If

End If

Wend

End Function

id:els

ありがとうございます。

何がなんだかわからなくなってきました^^;

2004/10/06 11:29:18
id:kumakuga No.6

回答回数2ベストアンサー獲得回数0

ポイント100pt

仮に対象の文字列をA列に入っているとします。

答えをB列に表示していきます。

A1をあけてから作業してください。

作業をD列以降で行うとして、

まずD1から横に、1、2、3、4数字をセルに入れます。

この数字は、文字列左からの文字数です。

最大桁数まで入れてください。

ここでは10桁まで入れます。

M1に 10 が入っている状態です。

その下の行から作業します。

D2に =IF(ISERROR(VALUE(MID($A2,D$1,1))),””,VALUE(MID($A2,D$1,1))) と入力。

横にドラッグして、1行目に表示した最大桁数までコピーしてください。

答えのB2に =VALUE(CONCATENATE(D2,E2,F2,G2,H2,I2,J2,K2,L2,M2))  と入れます。

( 参照のセルは、10桁に対応しています。必要ならば、さらにN2、O2と増やしてください )

B2〜M2を下に向かって必要なだけオートフィルでコピーしてください。

もし、カンマを小数点として扱うのであれば、

式を  D2 =IF(MID($A2,D$1,1)=”.”,”.”,IF(ISERROR(VALUE(MID($A2,D$1,1))),””,VALUE(MID($A2,D$1,1)))) と変えてコピーすれば対応可能かと。

id:els

ありがとうございます!

これは完璧ですね!

とても思いつかなかったです^^;

ありがとうございました!!

2004/10/06 12:30:38
id:teatime_miki No.7

回答回数88ベストアンサー獲得回数0

ポイント60pt

http://www.excite.co.jp/

Excite エキサイト

2回目の回答です。

前回の関数にドットを小数点として判定するIF関数を加えたものを作りました。

・10文字まで判定(前回と同様。10文字以上ならば修正が必要。)

・先頭が”.”ならば、”0.〜”と先頭に”0”を加える

・抜き出した後の結果が”.”のみならば”0”になる

・・・という関数になってます。

-------------

=VALUE(IF(ISNUMBER(VALUE(MID(A1,1,1))),MID(A1,1,1),IF(MID(A1,1,1)=”.”,”0.”,””))&IF(ISNUMBER(VALUE(MID(A1,2,1))),MID(A1,2,1),IF(MID(A1,2,1)=”.”,”.”,””))&IF(ISNUMBER(VALUE(MID(A1,3,1))),MID(A1,3,1),IF(MID(A1,3,1)=”.”,”.”,””))&IF(ISNUMBER(VALUE(MID(A1,4,1))),MID(A1,4,1),IF(MID(A1,4,1)=”.”,”.”,””))&IF(ISNUMBER(VALUE(MID(A1,5,1))),MID(A1,5,1),IF(MID(A1,5,1)=”.”,”.”,””))&IF(ISNUMBER(VALUE(MID(A1,6,1))),MID(A1,6,1),IF(MID(A1,6,1)=”.”,”.”,””))&IF(ISNUMBER(VALUE(MID(A1,7,1))),MID(A1,7,1),IF(MID(A1,7,1)=”.”,”.”,””))&IF(ISNUMBER(VALUE(MID(A1,8,1))),MID(A1,8,1),IF(MID(A1,8,1)=”.”,”.”,””))&IF(ISNUMBER(VALUE(MID(A1,9,1))),MID(A1,9,1),IF(MID(A1,9,1)=”.”,”.”,””))&IF(ISNUMBER(VALUE(MID(A1,10,1))),MID(A1,10,1),IF(MID(A1,10,1)=”.”,”.”,””)))

--------------

使用方法は前回と同じで、A列にデータが入ってる場合、B列などに関数を貼り付けて、オートフィルでコピーしてください。

id:els

ありがとうございます!

なるほど、こういった風に修正を加えれば

小数点として判定することができるのですね♪

とても参考になります。

2004/10/06 12:32:49

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません