http://d.hatena.ne.jp/garyo/20041006#1096994915
2004-10-06 - ジャンク☆ニュース 臥龍
マクロで関数を作って見ました。
URL先を参照願います。
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”,),”,”,),”.”,),” ”,),”-”,))
ありがとうございます。
もしかしてこれってひとつのセルに文字列が入力されている場合でしょうか??
楽天が運営するポータルサイト : 【インフォシーク】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文字以上の場合、修正する必要があります。
連続するセルに入っているということですから、コピーして張り付けたあとは、オートフィルで、関数をコピーしてください。
ありがとうございます!
この方法で数値のみを抜き出すことができました!
”.”を小数点とする場合の方法もありましたらお願いします!
Baba Centerfolds
Perl5互換の正規表現エンジン。
自分はPerlをある程度知ってたからですが
上記DLLを使って似たようなことをVBAからやらせています。
http://www.hi-ho.ne.jp/babaq/basp21.html
BASP21 DLL
より、ファイルを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等で移動。
うーん、すみません、VBAはつかったことがありませんので、今回は関数のみでやりたいと思います・・・。
整数用です。
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
ありがとうございます。
何がなんだかわからなくなってきました^^;
仮に対象の文字列を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)))) と変えてコピーすれば対応可能かと。
ありがとうございます!
これは完璧ですね!
とても思いつかなかったです^^;
ありがとうございました!!
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列などに関数を貼り付けて、オートフィルでコピーしてください。
ありがとうございます!
なるほど、こういった風に修正を加えれば
小数点として判定することができるのですね♪
とても参考になります。
ありがとうございます。
やはりマクロを使うしかないのでしょうか・・・