• ベストアンサー

文字列操作(ExcelのVBAですが)

特定のExcelセル内にある文字列について、 例えば、 138.40.8.7 と入っている場合、 138.40.08.7 に、 35.9.1.6 と入っている場合、 35.09.01.6 にするVBA関数を作りたいのです。(セル関数でもかまわないですが) つまり、小数点で区切られている2番目と3番目の数字が 一桁の場合、頭に0を付けて、必ず二桁になるようにしたいわけです。 どなたか、ご教授くださいませ。 よろしくお願い致します。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#01です。補足に対する回答です 212°21’23.79” 「’」「”」は全角文字ですね。以下の式中ではCHAR(8519)、CHAR(8521)で表しています。 =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,CHAR(8521),""),CHAR(8519),""),".",""),"°",".")

THUBAN
質問者

お礼

ありがとうございます。完璧です。 うまくいきました! 最初、うまく機能しなかったので、調べてみたところ、 「’」と「”」は、それぞれ、「′」(分)と「″」(秒)でした。 ですので、CHAR(8557)とCHAR(8556)であることがわかりました。 どうもありがとうございました!

その他の回答 (3)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

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

THUBAN
質問者

お礼

今回は瞬時に表示してくれる方が良かったので、セル関数の方を採用させていただきましたが、VBAでいただけて感激です。 今後のときに、ぜひ活用させていただきたいと思います。 ありがとうございました!

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#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)

THUBAN
質問者

補足

ありがとうございます!完璧でした!! ついでのお願いで、誠に恐縮なのですが、 以下の場合の式も、ご教授いただけないでしょうか? 212°21’23.79” とある場合、 212.212379 32°14’23.12” とある場合、 32.142312 に変換したいのです。 お願いできると幸いです。 申しわけありません。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

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」が得られます。(二つの式を一つにまとめることは可能ですが長くなるので分割しました)。後はコピー→値として貼り付けしてください

関連するQ&A