[[20151204123001]] 『VBAセル範囲に名前を付ける』(やっぱり初歩) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAセル範囲に名前を付ける』(やっぱり初歩)

 セル範囲に名前つけたいのですがR1C1型式ではなくA1形式で表す方法が分かりません。
 馴染みのあるA1形式で処理する方法をご指導ください。
  Evaluateでもダブルクウォーテンション(")を使いますが、その区切り方が
 良く分かりません

 マクロの記録 (正常動作)
    ActiveWorkbook.Names.Add Name:="テスト", RefersToR1C1:="=Myシート!R1C1"

 A1型式 (エラー無いが不明)
    ActiveWorkbook.Names.Add Name:="テスト", RefersTo:="Myシート!" & Range("A1")

 この様な質問で恐縮ですが宜しくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows8 >


 > マクロの記録 (正常動作)
 >    ActiveWorkbook.Names.Add Name:="テスト", RefersToR1C1:="=Myシート!R1C1"

       ActiveWorkbook.Names.Add Name:="テスト", RefersTo:="=Myシート!$A$1"

(半平太) 2015/12/04(金) 12:51


 早速のご返答ありがとうございます。
 この様な事でいつも躓いています。見ればそのままの事なんですね。
(やっぱり初歩) 2015/12/04(金) 13:01

 追記
 Evaluateを使った場合どの様にするのでしょうか?

 >Evaluateを使った場合どの様にするのでしょうか?

 済みませーん。意味がよく分からないのですが、
 何をEvaluateするんでしょうか?

 こんなことですか?
  ↓
 msgbox  Evaluate("テスト")

(半平太) 2015/12/04(金) 13:17


 すみません。質問の仕方そのものから良く分からず・・・

    = Evaluate("DateIf(A2,Today(), ""Y"")")  …を例にします

 (" ")を多用しながら記述する時の規則が分からないのです。
 時には(' ')で括ったりするその書き方の事なのです。

 理解できていない私は何時も諦めてきました。
 本当の初歩から勉強したいと思います。宜しくお願いします。

(やっぱり初歩) 2015/12/04(金) 17:31


 以下のようなことかと思います。

 数式内での ' (シングルクォーテーション)

 1)'C:\hoge\[ABC.xls]sheet1'!A10

   他ブックを参照する場合は、必須。

 2)'1月'!A10

   頭が数字で始まるシート等は、同じブック内のシートでも必要

 文字列内の " (ダブルクォーテーション)

 これは数式文字列に限ったことではなく、文字列内の " (ダブルクォーテーション)の記述ルール。

 1)まず 文字列の前後に " をつける。これは、文字列がここからここまでという区切り文字。

   "hogehogehogehoge"

 2)文字列内(↑でいえば hogehogehogehoge)に 文字としての " が存在する場合は、"" と2つ重ねて記述。これはお約束。

 ●ということですが、書いているうちにわからなくなる場合もありますね。
  1つの方法としては、 hogehogehogehoge が DateIf(A2,Today(), "Y") こんな文字列だったケース。
  文字列中の " を 文字列で使っていない別の文字、たとえば @ を使って記述。DateIf(A2,Today(), @Y@)
  この文字列を " で囲んで "DateIf(A2,Today(), @Y@)" 。で、この文字列の中の @ を "" に編集で置換。
  結果は "DateIf(A2,Today(), ""Y"")"

(β) 2015/12/04(金) 17:48


 本当に基礎からのご指導有難うございます。

 私の理解は次の様です。間違っていたらご指摘下さい。
  (1) 区切り文字  @ (アットマーク)     : @Y@ = ""Y"" 
  (2) 区切り文字  ' (シングルクォーテーション): セル内での数式扱いでVBA記述(Evaluate等で処理する場合)
  (3) 区切り文字  " (ダブルクォーテーション)  : 
     リテラル値をVBAで扱う場合
     文字としての " が存在する場合は ""ooo""

 又、時々 """OOO""" の様に3個並んだものも見かけます。この時とはどんな時なのでしょうか?

(やっぱり初歩) 2015/12/04(金) 19:07


 >>"""OOO"""

 まず先頭と末尾の " は文字列を囲んだ " ですね。
 なので、中身は ""000"" 。文字列中の "" は " の意味ですから
 文字列としては "000" という 5桁ですね。

 わかりにくい場合は、

 MsgBox """OOO""" 

 こうしてみれば、 "000" と表示されますので、わかりやすいかと思います。

 ちなみに MsgBox "000" は 000 の3桁ですね。

(β) 2015/12/04(金) 19:15


こんにちは。

ちなみに、どうして「"」を「""」と書くのかというおはなし。

エクセル君になったつもりで、考えてみてください。
VBAのコードが、 MsgBox "あいう"えお となっていたとして

MsgBox

ここまで見て、エクセル君は MsgBoxを出すんだな と考えます。

MsgBox "

まずは文字列だな、 

MsgBox "あいう

文字列で「あ」「い」「う」、それから?

MsgBox "あいう"

あいう までで文字列終了だ。あとに変数とか続くかな?

MsgBox "あいう"えお

おいおい、えおってなんだよ。そんなの知らないよ、エラーだよ。

こうなってしまいます。
もし本当に「あいう"えお」と表示したかった場合なら
「"」に、「これは文字列終了の合図ではありませんよ、「"」という文字として読んでくださいね」
という意味の記号をくっつけます。この記号が「"」です。
「"」の文字1つごとに、記号をそれぞれ1つ付けます。
(なお、こういった記号を付けることをエスケープするといいます。Like演算子にも、
専用のエスケープ記号があります。興味あれば調べてみてください。)

ということでVBAを書く側は、文字としての「"」を表現したいときは「""」と書きます。
「"」を2つ続けて書きたいときは「""」を2つ続けて書きます。
エクセル君は、文字列中で「""」を見つけたら「"」と置き換えて解釈します。

( 佳 ) 2015/12/05(土) 09:52


こんにちは。

>   (1) 区切り文字 @ (アットマーク)     : @Y@ = ""Y""
え?
意味と手順を混同していませんか?

その文字列中に出てこない文字・文字列なら何でも構わないのです。
●でも◆でも。なんなら「いろはにほへと」でも。
その文字に意味などないのですから。

勝手に想像するにβさんが @を使われた理由は
IMEがoffのまま ワンストロークで打てて 文字列中に出てくる可能性が低そう
だからではないでしょうか。

( 佳 ) 2015/12/05(土) 10:10


お邪魔します。
1件目の終わった質問で、しかも質問内容そのものとは関係ありませんが。
 こんな方法でも名前をつけれます。
 こちらのほうが私にはわかりやすいです。
http://www.moug.net/tech/exvba/0050107.html

 Sheets("Myシート").Range("A1").Name = "テスト"

割り込み失礼しました。

(マナ) 2015/12/06(日) 10:48


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.