No.3ベストアンサー
- 回答日時:
こんばんは。
回答は、すでに出ていますが、当分は、Rows(i &":" & j).Select のような書き方でよいと思います。(VB系以外の人からみると、かなり乱暴な書き方に見えるようですが、これが、VB系の利点でもあります。自動キャスティングで、i も j も、& ":" &で、文字になってしまうのですから。)
他の書き方で、Rangeオブジェクトを使う方法は、その上位オブジェクトが見えていないと、実行時エラーを起こします。Rangeオブジェクトのプロパティは、その中に、Rangeオブジェクトを入れられますが、外と中のオブジェクトとは、一切のつながりがありませんから、ミスをしやくすなります。だから、私は、With ステートメントを使います。
With ActiveSheet
.Range(.Cells(i, 1), .Cells(j, 1)).EntireRow.Select
End With
また、今回のような場合は、
Rows(i).Resize(k).Select
i で行を決めたら、k は、それから何行という書き方で、Resize プロパティを使うことが多いです。
ありがとうございます。
&”の使い方がいまいちよくわかりません。
>自動キャスティングで、i も j も、& ":" &で、文字になってしまうのですから。
とは?簡単に教えてください。
今回とは違う使い方もあるようで?です。→" & 変数 & "
No.6
- 回答日時:
一旦文字列にセットしてみると、VBAのありがたさがわかる
Sub test01()
Dim s As String
i = 5
j = 10
s = i & ":" & j
Rows(s).Select
Selection.Delete
End Sub
ーー
Sub test02()
i = 10
Range("A" & i).Select
End Sub
が可能なのと一緒。
しかしどっこい
Sub test03()
Dim s As String
i = "A"
J = 10
s = i & J
Worksheets("Sheet1").Range(s).Select
End Sub
ーーー
Sub test04()
Dim i As String
i = "A10"
Worksheets("Sheet1").Range(i).Select
End Sub
はエラーになる。
ありがとうございます。
test04は間違えてやってしまいそうです。
大変参考になりました。
また機会がありましたらよろしくお願いします。
No.5
- 回答日時:
>自動キャスティングで、i も j も、& ":" &で、文字になってしまうのですから。
とは?簡単に教えてください。Rows()は、数値(変数を含む)で使用するときは、対象は1行です。範囲を対象とするときは、括弧の中は文字列で表現しなければなりません。例えば「Rows("1:10")」のようにです。
このなかの数字を変数で扱いたいときに、Rows("i:j")や、Rows("i" & ":" & "j")としてもi、jが変数として機能しなくてうまくいきません。しかし、本来の使い方とは違うけれども、もしRows(数値変数1 & ":" & 数値変数2)という形で使えるならば便利ではないかと考えるようになります。
これを実現させたのが、EXCELの自動キャスティングです。
EXCELは、事前に変数を定義していても、状況によって、数値として取り扱うのか、文字として取り扱うのかを判断し、そのときだけ一時的に内部で変数の「値」を文字列とか、数値とかに変換処理して実行しています。
ちなみに、
Dim a As Integer, b As Integer
a = 1: b = 2
Cells(1, 1).Value = a + b
Cells(2, 1).Value = a & b
または
Range("A1") = a + b
Range("A2") = a & b
を実行してみてください。セル"A1"に"3"、セル"A2"に"12"が入りました。
即ち、数値として定義した変数[a][b]を、セル"A1"では数値として、セル"A2"では文字列としてEXCELが自動的に変換して処理したわけです。
この機能は、便利な面と、定義通りに動いてくれないためにエラーを誘う可能性があるという迷惑な面とがあります。
このあたりのことを、Wendy02さんがANo.2でおっしゃっています。
No.4
- 回答日時:
こんにちは
#3の回答者です。
>今回とは違う使い方もあるようで?です。→" & 変数 & "
と考えるとややこしくなります。
「" & 変数 & "」 は、「"文字列" & 変数 & "文字列"」 という組み合わせです。
「&」は、文字列と文字列をつなぐ演算子。「"文字"」は、「""」のセットで、本当の文字扱いになるわけです。
そうはいっても、複雑なものに対して、誰もが、それを一回で書けるとは思えません。
たとえば、
ret = WorksheetFunction.Substitute(TextLine, """", "")
こんなスタイルがあります。---「""」を取り除け --- という意味です。つまり、「""」を『""』で囲んでいます。
これ以上複雑な内容などは、イミディエイト・ウインドウ(Debug.Pring)の使い方を覚えたりして、チェックしていくしかないと思います。
(註:余計な突っ込みされると嫌なので、それは、あくまでも、基本の規則だけの話です。他の言語を応用した場合などは、除きます。)
ありがとうございます。
「"文字列" & 変数 & "文字列"」と書かれればなるほどそうかとわかりましたが、""の中に(が入っていたせいでわかりづらく、変な使い方があると勘違いしてしまいました。大変参考になりました。ありがとうございました。
No.2
- 回答日時:
Range(Rows(変数a), Rows(変数b)).Select
Rows(変数a & ":" & 変数b).Select
上の式のほうが、使い易いようです。
Rangeオブジェクトの括弧内を、Rowsプロパティ、Columnsプロパティ、Cellsプロパティに変えるだけで、同じフォーマットで使えるので覚え易く、利用範囲も広がります。
ありがとうございます。
Range(Rows(変数a), Rows(変数b)).Select
確かに使いやすいです。
&”の使い方がいまいちよくわかっていないのでこっちのほうがいいです。
また機会がありましたらよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) ワードのマクロについて教えてください。 1 2023/01/22 11:43
- Excel(エクセル) 特定の位置にあるマクロボタンについて 2 2022/04/19 18:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/07 08:37
- Excel(エクセル) エクセルのマクロの有効について 4 2023/08/03 11:40
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) VBAマクロ 決まっていない行を選択して別シートへ貼付け 4 2023/02/16 16:08
- Excel(エクセル) エクセルでファイル保存時に複数シートのオートフィルタを全て解除したい 1 2023/05/10 13:23
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- Excel(エクセル) 【VBA】エクセルで選択した範囲の値のみをクリップボードにコピーするコードについて 3 2023/03/08 17:41
- Excel(エクセル) エクセルで保存時に全部のシートの最終行をコピーして数値で貼り付けたい 3 2023/08/14 15:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
VBAからPDFファイルにパスワー...
-
エクセルマクロエラー「'Cells'...
-
VBAで Set wb = Sheets(1).Cop...
-
VBAで既に開いている別アプリケ...
-
VBAで作成するメール(開封確認...
-
VBで引数にDictionaryオブジェ...
-
ローカル変数を戻り値に使うと...
-
PowerPointVBAでスライドマスタ...
-
[C#]static void 関数内でthis
-
ある文字列が全て数字であるか...
-
【VB】【エクセル操作】 SaveAs...
-
UserForm1.Showでエラーになり...
-
Excelでフィルタをかけると警告...
-
Excel VBA Collection.add で R...
-
C#でオブジェクトの配列を使う
-
AccessVBAで「dim dbs as datab...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
PowerPointVBAでスライドマスタ...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
ある文字列が全て数字であるか...
-
VBAについてです。 初心者です...
-
VBScriptでファイルの日時順(降...
-
Excelでフィルタをかけると警告...
-
VBAからPDFファイルにパスワー...
-
VBで引数にDictionaryオブジェ...
-
このように書くべきですか? { ...
-
EXCEL VBA オートシェイプナン...
-
テキストボックス中の文字列の...
-
エクセルVBAでcode128のバー...
-
[VBA]CDOメッセージ送信エラー
-
オブジェクトが見つかりません
おすすめ情報