こんばんは
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件)
- 最新から表示
- 回答順に表示
No.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
No.2
- 回答日時:
>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 が作られます。
No.1
- 回答日時:
ふだんは、めったにこのようなふうには書きませんが、変数を使うなら、こうなりますね。
y=32
Worksheets(3).Range("A2").AutoFill Destination:=Worksheets(3).Range("A2:A" & y), Type:=xlFillSeries
うまくいきました。 ありがとうございました。
----------
範囲指定するさいダブルクォーテーションの中に収めなければいけないとおもってましたが、変数は含めなくていいんですね。
教えていただいた記述でうまくいくのかわかりません。
たとえば、rangeで
うまくいく場合
RANGE("a5")=20 aと5を一緒にかくとダブルクォーテーションが必要
range("a"&5)=12 どして、この場合5はかこまなくていいんですか?
便乗ですみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのクエリで、replace関数...
-
UNICODE文字が含まれているかの...
-
strcmp( )関数について教えて...
-
VS C++6.0のCString にて先頭1...
-
vb.net IVSの漢字を1文字切り...
-
文字列検索機能
-
Excelで9秒50や11秒25などの数...
-
文字列にアルファベットが何文...
-
i=cells(Rows.Count, 1)とi=cel...
-
ListView 項目の選択/選択解除...
-
ExcelVBAを使って、値...
-
表にフィルターをかけ、絞った...
-
特定のセルが空白だったら、そ...
-
Spreadの選択行の取得について
-
Excel VBA 複数選択したリスト...
-
[エクセル]連続する指定範囲か...
-
変数に代入してある数値を表示...
-
リストボックスの複数選択時の...
-
【Excel VBA】指定行以降をクリ...
-
VB.NETで DataRow()を利用して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのクエリで、replace関数...
-
文字列の後ろから必要分だけ削...
-
ダブルクォーテーションを文字...
-
UNICODE文字が含まれているかの...
-
文字列にアルファベットが何文...
-
エクセル関数で記号から記号の...
-
C言語でギリシャ文字は使えます...
-
VBScriptでXcopyしたいのですが
-
vb.net IVSの漢字を1文字切り...
-
C言語について。
-
strcmp( )関数について教えて...
-
awk で右端の文字を1文字削除...
-
GetDlgItemTextについて
-
VS C++6.0のCString にて先頭1...
-
URLで使える文字・使えない...
-
CSVの禁則文字
-
文字数と単語数を数えるプログラム
-
右から何文字目にあるか文字位...
-
VB2008 文字列に等間隔にスペ...
-
◆COUNTIF関数またはダブルクォ...
おすすめ情報