- ベストアンサー
文字列操作(ExcelのVBAですが)
特定のExcelセル内にある文字列について、 例えば、 138.40.8.7 と入っている場合、 138.40.08.7 に、 35.9.1.6 と入っている場合、 35.09.01.6 にするVBA関数を作りたいのです。(セル関数でもかまわないですが) つまり、小数点で区切られている2番目と3番目の数字が 一桁の場合、頭に0を付けて、必ず二桁になるようにしたいわけです。 どなたか、ご教授くださいませ。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#01です。補足に対する回答です 212°21’23.79” 「’」「”」は全角文字ですね。以下の式中ではCHAR(8519)、CHAR(8521)で表しています。 =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,CHAR(8521),""),CHAR(8519),""),".",""),"°",".")
その他の回答 (3)
- nicotinism
- ベストアンサー率70% (1019/1452)
VBAですとこんな感じ。標準モジュールに挿入 問い1 Function Func1(strNum As String) As String Dim a As Variant a = Split(strNum, ".") If UBound(a) <> 4 - 1 Then Func1 = "配列の要素数が不正" ElseIf InStr(strNum, ".0") > 0 Then Func1 = "要素の頭にゼロがあり" Else Func1 = Format(a(0), ".") _ & Format(a(1), "00.") _ & Format(a(2), "00.") _ & a(3) End If End Function 問い2 Function Func2(strNum As String) As String Dim i As Integer For i = 1 To Len(strNum) Func2 = Func2 _ & IIf(Mid(strNum, i, 1) Like "[0-9°]", Mid(strNum, i, 1), "") Next Func2 = Replace(Func2, "°", ".") End Function
お礼
今回は瞬時に表示してくれる方が良かったので、セル関数の方を採用させていただきましたが、VBAでいただけて感激です。 今後のときに、ぜひ活用させていただきたいと思います。 ありがとうございました!
- zap35
- ベストアンサー率44% (1383/3079)
#01です。式が冗長だったので見直しました B1 =IF(FIND("@",SUBSTITUTE(A1,".","@",3))-FIND("^",SUBSTITUTE(A1,".","^",2))<3,SUBSTITUTE(A1,".",".0",2),A1) C1 =IF(FIND("^",SUBSTITUTE(B1,".","^",2))-FIND(".",B1)<3,SUBSTITUTE(B1,".",".0",1),B1)
補足
ありがとうございます!完璧でした!! ついでのお願いで、誠に恐縮なのですが、 以下の場合の式も、ご教授いただけないでしょうか? 212°21’23.79” とある場合、 212.212379 32°14’23.12” とある場合、 32.142312 に変換したいのです。 お願いできると幸いです。 申しわけありません。
- zap35
- ベストアンサー率44% (1383/3079)
VBAが簡単だと思いつつ関数でやってみます。A1に「138.4.8.7」があるとき、B1、C1に式を入れます B1の式は =IF(FIND("@",SUBSTITUTE(SUBSTITUTE(A1,".","@",3),".","^",2))-FIND("^",SUBSTITUTE(SUBSTITUTE(A1,".","@",3),".","^",2))<3,SUBSTITUTE(A1,".",".0",2),A1) C1の式は =IF(FIND("^",SUBSTITUTE(SUBSTITUTE(B1,".","@",3),".","^",2))-FIND(".",SUBSTITUTE(SUBSTITUTE(B1,".","@",3),".","^",2))<3,SUBSTITUTE(B1,".",".0",1),B1) C1に結果として「138.04.08.7」が得られます。(二つの式を一つにまとめることは可能ですが長くなるので分割しました)。後はコピー→値として貼り付けしてください
お礼
ありがとうございます。完璧です。 うまくいきました! 最初、うまく機能しなかったので、調べてみたところ、 「’」と「”」は、それぞれ、「′」(分)と「″」(秒)でした。 ですので、CHAR(8557)とCHAR(8556)であることがわかりました。 どうもありがとうございました!