映画のエンドロール観る派?観ない派?

こんばんは
VBAで質問があります。
a1からa32まで指定するときに以下のようにすると範囲指定ができずエラーとなります。
a2からa32までをAUTOFILLしたいときに、yに値を代入して変数として指定することが
できません。
じかに値をかけばうまくいくのですが、yなどの変数を指定するとエラーとなります。
変数をしていするやり方をおしえてください、 

sub mo()
y=32
うまくいく
Worksheets(3).Range("a2").AutoFill Destination:=Worksheets(3).Range("a2: a32"), Type:=xlFillSeries  
エラーとなる。
Worksheets(3).Range("a2").AutoFill Destination:=Worksheets(3).Range("a2: y"), Type:=xlFillSeries

A 回答 (3件)

#1の回答者です。


>range("a"&5)=12  どして、この場合5はかこまなくていいんですか?

私は、そういう方法を、10年以上経ってもこだわってしまっているので、
「ふだんは、めったにこのようなふうには書きませんが、」
なんていう前置きを書きました。

理屈ではあまり考えないようにしているのですが、

 "文字" & 数字 => "文字数字"
このように考えればよいと思います。数字は、文字に取り込まれてしまいました。

じゃあ、
 数字1 & 数字2 => "数字1数字2"
(& [演算子]アンパサンドの間に半角スペースが存在します。ないと、「構文エラー」になります。)

 「&」 は、文字と文字とをつなぎます、という意味で、数字を文字に変化させます。

Sub 文字列Test()
b = 1 & 2 
If VarType(b) = vbString Then
  MsgBox b & "は、文字列です"
Else
  MsgBox b & "は、文字列ではありません。", vbQuestion
End If
End Sub

Range("a"&5)=12 これは Range("a" & 5)=12 (& の周りにスペースがないとエラーになります)
 "文字" は、これを文字として扱います、という意味です。

y を変数とすれば、このように書かれ、
y=10
Range("a" & y ).Value =12

"a" と 数字は、"a" に y の中に入っている [10 ]は取り込まれて、"A10" になるわけです。
この変化のことを、
*  VB/VBAの自動キャスト(型の内部変換)機能
と呼ばれているものです。ただ、こういう書き方は、上級者になるにしたがって使わなくなってきます。
「vba 自動キャスト」でググってみると、いろんな話が出てきます。

気をつけなくてはならない時があるからです。以下はその一例です。

Sub Test比較1()
Dim x
Dim y
x = "1"
y = 10
 If x > y Then
  MsgBox x & "は" & y & "より大きい"
 Else
  MsgBox x & "は" & y & "と等しいか小さい"
 End If
End Sub

文字列が必ず数値よりも大きいからだと思っています。
Long型  4 byte
String型  10byte +文字列の長さ * 2 byte
    • good
    • 0

>RANGE("a5")=20  aと5を一緒にかくとダブルクォーテーションが必要


>range("a"&5)=12  どして、この場合5はかこまなくていいんですか?

ダブルクォーテーションで囲むか、囲まないかではなく、
どうやって「a5」の文字を作るかを考えてください。
要は、「a5」の文字をつくって、それをragneに渡せばよいのです。
手っ取り早いのが、"a5"とダブルクォーテーションで囲む方法です。
"a" & 5 とすると a と5を結合するので、a5が作成されます。

y=32で
"a2: y"
とすると
「a2:y」の文字が作られるだけです。
作りたいのは、
a2:a32 なので
"a2:a" & y
とすると a2:a32 が作られます。
    • good
    • 0

ふだんは、めったにこのようなふうには書きませんが、変数を使うなら、こうなりますね。



y=32
Worksheets(3).Range("A2").AutoFill Destination:=Worksheets(3).Range("A2:A" & y), Type:=xlFillSeries
    • good
    • 1
この回答へのお礼

うまくいきました。 ありがとうございました。

----------
範囲指定するさいダブルクォーテーションの中に収めなければいけないとおもってましたが、変数は含めなくていいんですね。
教えていただいた記述でうまくいくのかわかりません。
たとえば、rangeで
うまくいく場合
RANGE("a5")=20  aと5を一緒にかくとダブルクォーテーションが必要
range("a"&5)=12  どして、この場合5はかこまなくていいんですか?

便乗ですみません。

お礼日時:2017/02/04 03:26

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