電子書籍の厳選無料作品が豊富!

Sub 数値を文字型に変更()
Dim i As Long
Dim moji As String

i = 1
moji = CStr(i)
moji = Str(i)
End Sub

上記のコードで得られる結果は同じです。
"1"になります。

「CStr」でも「Str」でも数値を文字列に変換しています。
ということは「CStr」でも「Str」は同じなのですか?

しかしコードの表示色が
「CStr」→キーワード
「Str」→識別子
です。

これが違うと言うことは何かが違うのでしょうか? 
よろしくお願いします。

A 回答 (3件)

文字列操作について詳しく知ろう!1


http://home.att.ne.jp/zeta/gen/excel/c04p39.htm

上記のページに説明があります
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2009/10/11 18:45

どちらもVBAの関数です。


いま改めて下記をやって見ると
Sub test01()
i = 1
MsgBox "*" & Str(i)
MsgBox "*" & CStr(i)
End Sub
結果が違いませんか。わざわざテストのために、*をつけておかないと違いが一見して見えない。
Strは+の場合1スペースはいるのは有名ですが、CStrは入らないようだ。
    • good
    • 0
この回答へのお礼

ありがとうございます。ほんとうですね!なんなんでしょうかね。これは。

お礼日時:2009/10/12 17:30

こんばんは。



>「CStr」→キーワード
>「Str」→識別子

戻り値がStr 側が、負の符号の入れるためのスペースが入るぐらいは常識ですが、なぜ、キーワードと識別子の違いになっているのか分かりません。VBAを何年もやってますが、考えたこともありません。

moji1 = CStr(i) '←データ型の変換
moji2 = Str(i) '←数値を文字列に変換

という違いから、CStr は、データ型自体を変換しているので、一般関数Str とは違う扱いにしているのかもしれません。

Sub MacroTest1()
  Dim i As Variant
  Dim moji1 As String
  Dim moji2 As String
  
  i = "a"
  On Error Resume Next
  moji1 = CStr(i) 'moji1に入る
  moji2 = Str(i) 'moji2 には入らない(本来はエラーが発生)
End Sub

ただ、Str関数は、システムのロケールの小数点の記号のピリオド([.])のみをデシマル・セパレータとして判別できません。私たちの表記は米国系の文化圏なので問題ないのですが、ヨーロッパの文化圏では、小数点の記号は、カンマ([,])のこともありますから、この関数はグローバルに共有するということではないようです。

参考:(英語)
http://msdn.microsoft.com/en-us/library/4y6a1sx7 …
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2009/10/11 19:55

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