- 締切済み
VBA ダブルコーテーション
VBAについて、ダブルコーテーションの個数が理解できないものがありません。 セル範囲B3:B35に" 様"を追加するコード Sub 一括文字列追加() Range("B3:B35").Value = Evaluate("B3:B35&"" 様""") End Sub この Evaluate("B3:B35&"" 様""")の部分ですが、 Evaluate("B3:B35&" 様"")であれば納得できますが、どのような対応付けなのでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- BarcodeMaster
- ベストアンサー率73% (17/23)
文字列を文字列として認識できるように渡さないといけないからEvaluateみたいなのは難しいですね。 これはもう経験なので、いろいろコードを書いていくしかないと思います。 ざっと言ってしまうと 「B3:B35」というのはEvaluateがRangeとして認識できるのでそのままですね。 一方「 様」というのは文字列として渡すのですから、" 様"のようにダブルクォーテーションで囲みます。 よって、「B3:B35 & " 様"」という値を渡すことになります。 ここで、Evaluateは文字列を引数として取りますので、「"B3:B35 & " 様""」と、こうなるわけです。 ここまではいいでしょうか? ところが、文字列の中にダブルクォーテーションを表現する場合、ダブルクォーテーションの前にダブルクォーテーションを付けるという約束事があります。 様の前後のダブルクォーテーションはダブルクォーテーションとしてEvaluateに渡さねばなりませんから、その結果「"B3:B35 & "" 様"""」となるのです。 これは普通の文字列変数を使う際にも言えます。 例えば、「私は"こんばんは"といいました。」とMsgBoxで表示したい場合、 Call MsgBox(私は"こんばんは"といいました。) ではダメですね。MsgBoxは文字列を引数にとるのですから、 Call MsgBox("私は""こんばんは""といいました。") となります。 ちなみに私なんかは、わかりにくいEvaluateなんか使いません。^^; Sub 様追加() For Each objCell In Range("B3:B35") objCell.Value = objCell.Value & " 様" Next End Sub
- chie65536(@chie65535)
- ベストアンサー率44% (8761/19876)
Evaluateの引数には「式として評価可能なモノを、文字列で指定する」と言う「お約束」があります。 「式として評価可能なモノ」とは、例えば B3:B35 とか A4 & "あいう" とか B3:B35 & "様" などです。 で、上記のような「式として評価可能なモノ」を、引数に渡す際に「文字列」にしないといけないので、渡す値は、ダブルクォーテーションマークで括って "B3:B35" とか "A4 & ""あいう""" とか "B3:B35 & ""様""" などにしないとなりません。
- imogasi
- ベストアンサー率27% (4737/17069)
VBAでは、利用する場合が珍しい関数Evaluateの質問かと思ったが、実はVBAの関数の「引数の(中の定数の)指定の表現」に関することではないですか。 Evaluateの引数である、カッコ()の中は、文字列で指定することを要求される。これはこの関数の種類からして疑問がないでしょう。そこで文字列を示す両端の””について (素人的には、引数が文字列に決まっているなら最初と最後の””は省略させてもよいのではと思うが、小生が浅はかなのかな) "B3:B35&"" 様"""の両端の””を1つづつ省いて B3:B35&"" 様""となると考えてみます。 そこで、リテラル(文字通りの値指定のこと)指定の"" 様""の両側が””が2つづつ連なっているが、文字列定数の中での「リテラル」値の指定なので””を2つ連ねる約束になっていると考えるとどうでしょう。 「Evaluate関数 VBA」でWEB照会して http://www.ne.jp/asahi/hishidama/home/tech/excel/workfunc.html http://www.moug.net/tech/exvba/0100045.html などの中の例示のコードに、 Debug.Print Evaluate("LenB(""ABCあいう"")") Result = Evaluate("GETPIVOTDATA(""金額"",B4,""名前"",""山田"")") のような例も載ってます。 ーー 引数に要求される文字列の中に出てくるリテラル値(定数)は””〇””で表すと覚えるほかない。 小生はAccessのクエリ(のデザイングリッド)の条件やAccessのSQL文の中ではどうだったか、記憶があやふやなもので、いつも迷うのですが、WEB実例などを調べて慎重にやってます。 ちなみに正規表現などで特殊な役割を持たせられている文字は、その文字そのものを指定するときは、2つ連ねるルールがあるが、それとは(理由)パターンが違うようです。文字列の中に出てくる定数の出現を察知DETECTするためのシステムプログラムを組む(組んだ)人のためのお約束かと思います。その場合に、文字列の両側が"が1つだと混乱するのかどうか小生にはわかりません。引数を解析の過程で、外側から”を1つづつ外していけば、混乱ないようにも素人的におもいますが。 言語、SQL処理系、VBAか操作ソフト(VBAでなくアクセスを普通に使うときなど)かで、いつもこの点に注意し経験で学ぶしか方法はないのかと思いますが、この点の根本則があるのかどうか。
VBA では文字列の中で " という文字を使いたいときは、"" と書く、というルールは知っておいででしょうか。例えば、変数 a に文字列 文字"文字 を入れたい場合は a = "文字""文字" と書くのです。 質問の場合は "B3:B35&"" 様""" ですので、実際に使おうとしている文字列は B3:B35&" 様" ですね。 なお、"B3:B35&" 様"" はエラーになります。これでは「B3:B35&」 という文字列と、「様」という意味不明な命令と、「」 という文字列との3つに分かれていることになってしまいますので。
お礼
ご回答ありがとうございます。 正確には、”様”ではなく様を追加したいのですが、 http://kokodane.com/mini_macro46.htm