• ベストアンサー

【vba】「CStr」と「Str」は同じ意味ですか?

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」→識別子 です。 これが違うと言うことは何かが違うのでしょうか?  よろしくお願いします。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

文字列操作について詳しく知ろう!1 http://home.att.ne.jp/zeta/gen/excel/c04p39.htm 上記のページに説明があります

fsjkls
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

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

fsjkls
質問者

お礼

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >「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(VS.80).aspx

fsjkls
質問者

お礼

ありがとうございます。

関連するQ&A