• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAでセル選択するコードが変)

エクセルVBAでセル選択するコードの理屈がわからない

このQ&Aのポイント
  • エクセルのワークシートでVBAでセル選択するコードの理屈がわからない。
  • 通常、Cells(2, 1)はセル番地で言えばA2セル、Cells(4, 1)はセル番地で言えばA4セルとなるが、With .Range("B5:B15")でくくると.Cells(2, 1)はセル番地で言えばB6セル、.Cells(4, 1)はセル番地で言えばB8セルになり、しかし実際にはC10:C12が選択される。
  • 何故この動作になるのか理解できず、コードを.Range(“A2:A4”).Selectに書きかえると、希望のB6:B8が選択される。

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.5

Sheet1がActiveで、かつ、selectすることがゴールなら Sub test03()   With Sheets("Sheet1")     With .Range("B5:B15")       .Range(Cells(2, 1), Cells(4, 1)).Select     End With   End With End Sub でも期待通り動作しますが 別なシートがActiveで、かつ、 指定したセル範囲に値を埋める制御も考慮した場合は Sub test21()   With Sheets("Sheet1")     With .Range("B5:B15")       Range(.Cells(2, 1), .Cells(4, 1)) = "AAA"     End With   End With End Sub といったコードとなりましょう。 つまり、 >Cells前のドットを消したところ ではなく、 Rangeの前のドットを消すのがより正しいコードと思います。

emaxemax
質問者

お礼

たしかに。 Activeではないと .Range(Cells(2, 1), Cells(4, 1)).Value = "AAA" ではエラーになりました。Range(.Cells(2, 1), .Cells(4, 1)) = "AAA" なら正しく作動しました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.7

Sub test02()   With Sheets("Sheet1")     With .Range("B5:B15")       .Range(.Cells(2, 1), .Cells(4, 1)).Select     End With   End With End Sub >.Cells(2, 1)はセル番地で言えばB6セルだと思います。 >.Cells(4, 1) はセル番地で言えばB8セルだと思います。 With Sheets("Sheet1")     With .Range("B5:B15")         .Range("B6", "B8").Select Range("B5:B15")範囲に対してB列(この場合C列となります) Range("B5:B15")範囲に対して6行~8行目となりC10:C12が選択されることになります。

emaxemax
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.6

実際は変数で指定してるので難しいのかもしれませんが、結果OffsetとResizeでいけますよね。 With .Range("B5:B15") .Offset(1, 0).Resize(3, 1).Select End With

emaxemax
質問者

お礼

ありがとうございます。 この方法で、変数化しようと思います。 Sub test05() With Sheets("Sheet1") With .Range("B5:B15") .Offset(1, 0).Resize(3, 1).Value = "BBB" End With End With End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.4

> Cells(2, 1)のCells前のドットが余計な参照をひっぱっているのですね? そうですね。 .Range(Cells(2, 1), Cells(4, 1)).Select は .Range(“A2:A4”).Select と同じですね。 ただ、Sheet1のシートモジュール以外だとエラーの出る場面が違いますね。

emaxemax
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • tamu1129
  • ベストアンサー率58% (1249/2132)
回答No.3

すみません 訂正部分があります >この指定された範囲(起点がC9になっている)の(.Cells(2, 1), .Cells(4, 1))の位置を取得させているのですからC10~C13が ではなく この指定された範囲(起点がC9になっている)の(Cells(2, 1), Cells(4, 1))の位置を取得させているのですからC10~C12が でした

emaxemax
質問者

お礼

はい、ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • tamu1129
  • ベストアンサー率58% (1249/2132)
回答No.2

まず、.Range("B5:B15").Selectを実行すれば、セルB5:B15が範囲指定されますよね 起点がB5になる訳です ここを起点にしてRange("B5:B15")が範囲になるように With Sheets("Sheet1") With .Range("B5:B15") .Range("B5:B15").Select End With End With を実行してやれば良いです B5を起点にしてRange("B5:B15")は右に1つ下に5つ~10下がった範囲が選択されます(C9~C19が選択される) この指定された範囲(起点がC9になっている)の(.Cells(2, 1), .Cells(4, 1))の位置を取得させているのですからC10~C13が With Sheets("Sheet1")     With .Range("B5:B15")       .Range(.Cells(2, 1), .Cells(4, 1)).Select     End With   End With の結果として範囲指定されているで、理屈にあっているという訳です

emaxemax
質問者

お礼

理屈を理解出来ました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.1

.Range("B5:B15").Range(.Range("B5:B15").Cells(2, 1), .Range("B5:B15").Cells(4, 1)).Select B5からB5含めて(以下起点を含む)+5=B9 B9から+2=B10 Bから+B Bは2なのでC Cから+1でそのままC という感じではないでしょうか。

emaxemax
質問者

お礼

ありがとうございます。 そういう理屈ですか。.Cells(2, 1)のCells前のドットが余計な参照をひっぱっているのですね? ためしに Sub test03()   With Sheets("Sheet1")     With .Range("B5:B15")       .Range(Cells(2, 1), Cells(4, 1)).Select     End With   End With End Sub と、Cells前のドットを消したところ。希望のB6:B8が選択されました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • エクセルVBA 他シート選択・セルへ入力

    下記コード内で、シートを選択する際、マクロ呼出前は意図したとおり になるのですが、セル入力前だと上手くいきません。Activateにして もダメでした。根本的に理解していないようなので、教えてください。 よろしくお願いします。 シートAの実行ボタンをクリック Private Sub ButtonA_Click() Application.ScreenUpdating = False tempA = TextBox1 If ButtonB = True Then tempB = "10" End If Sheets("B").Select Call XYZ1 ' ----------------- (問題あり ここから)-------------- Sheets("B").Select Cells(1, 2) = 100 For i = 2 To 200 Cells(i, 2) = Range("B" & i - 1) - Range("A" & i) Next ' ----------------- (問題あり ここまで)-------------- Sheets("A").Select Call XYZ5 Application.ScreenUpdating = True End Sub

  • アクティブでないシートのセルを選択

    Excel VBAでアクティブでないシートのセルをSelectすることはできないのでしょうか。 Selectメソッドというのは,もともとそういうものなのでしょうか。 エラー: 「RangeクラスのSelectメソッドが失敗しました。」 コード Sub aaa() With Worksheets("Sheet2") .Range(.Cells(44, 1), .Cells(48, 21)).Select End With End Sub

  • エクセルVBAで、とびとびのセルの順次選択方法?!

    仮にA1:B10という範囲内で、空白のセルだけを一つずつ順番に選択しようと思い、以下のコードを書いてみました。 実行してみると、範囲内がすべて空白の場合にはA1→B1→A2→B2→・・・と、選択してくれます。 しかし、空白と空白以外のセルが混在していると、最初の空白セルから下に、範囲内の空白セル数分だけ、空白であると否とを問わず選択してしまいます。 ( ̄□ ̄;)!! myRngには空白セルだけを指定され、myRng.Cells.Countでもちゃんと空白セル数がカウントされます。 でも、myRng.Cells(i).Select では正しく選択されないのはなぜでしょうか? Cells(i)を使用せず、ループを For Each c In myRng c.Select Application.Wait Now + TimeValue("0:00:01") Next c で回せば選択できるのに・・・・・。 Sub test01() Dim x As Long, i As Long, myRng As Range With ActiveSheet Set myRng = .Range("A1:B10").SpecialCells(xlCellTypeBlanks) x = myRng.Cells.Count For i = 1 To x myRng.Cells(i).Select Application.Wait Now + TimeValue("0:00:01") Next i End With Set myRng = Nothing End Sub ご教示くださいませ。 (o。_。)oペコッ.

  • excelで別シートのセルを選択(VBA)

    どなたか教えてください。 シートXのB1に行番号 シートXのB2に列番号 が記載されていたとして、 別シート(Y)の、上記で指定したセルを選択する(フォーカスを移動する方法)を教えてください。 シート(X)   A   B   C  1 行  25  2 列  2  シート(Y)   A   B   C  1 2   ::::::: 24 25   (ここ) 以下のように書いても、最後の行でエラーになってしまいます。  行番号 = Sheets("X").Cells(1, 2).Value  列番号 = Sheets("X").Cells(2, 2).Value  Sheets("Y").Select  Range(Cells(行番号, 列番号)).Select

  • エクセルVBAについて

    Sub a() Sheets("Sheet1").Select End Sub Sub b() Worksheets("Sheet1").Select End Sub どちらコードもSheet1を選択しますが 「こちらを使うべき!」ってありますか? 独学のため、SheetsとWorksheetsの違いがわかりません。 ご教授よろしくお願いします。

  • セルの選択について

    <Sheet2のコード> Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not UserForm3.Visible Then UserForm3.Show 0 UserForm3.TextBox1.Text = Selection.Count End Sub *********************************************** <UserForm3のコード> Private Sub CommandButton1_Click() With Selection .MergeCells = True .WrapText = True .Value = TextBox2.Text & ComboBox1.Text End With UserForm3.Hide End Sub ---------------------------------------------- Private Sub UserForm_Initialize() Dim lastrw As Integer, lastrw2 As Integer, i As Integer lastrw = Sheet3.Range("A1").End(xlDown).Row lastrw2 = Sheet3.Range("B1").End(xlDown).Row If Sheet2.Range(Cells(5, 4), Cells(5, 100)).Select Then ・・・(1) For i = 1 To lastrw - 1 ComboBox1.AddItem Sheet3.Cells(i + 1, 1).Value Next i End If If Sheet2.Range(Cells(6, 4), Cells(6, 100)).Select Then ・・・(2) For i = 1 To lastrw2 - 1 ComboBox1.AddItem Sheet3.Cells(i + 1, 2).Value Next i End If End Sub ************************************************* ワークシート上でマウスで選択されたセルの行ごとにUserForm3のComboBox1で表示させる文字を変えたいのですが、どのようにすればよいのでしょうか。 上の(1)(2)だととマウスで選択されたセルではなく(1)(2)の範囲のセルが結合されてしまいます。。。 また、今はワークシート上でマウスを左クリックする度にUserForm3が表示されてしまいます。 これをワークシート上でマウスでセルを選択して右クリックするとUserForm3が表示される ようにしたりすることは可能なのでしょうか。

  • エクセル★画像選択のVBAコード

    いつも参考にさせて頂いております。 リンク先の画像貼付まではうまく行くのですが 貼り付けた画像のセレクト方法を教えてください。 VBAコード Range("a1").Select Sheets("sheet2").Select Sheets("sheet1").Pictures.Insert Cells(2, 2) Sheets("sheet1").select 質問内容 シート1のA1に貼り付けられた画像を選択したいのですが・・・? ActiveSheet.Shapes("Picture 10").Select               ↑ このコードでは画像のナンバーが変わるとエラーとなってしまいます。 どうぞ宜しくお願いいたします。

  • エクセルで、選択したセルを上に表示したい

    たとえばsheet1のA1を選択した場合、 Sub MacroA1() Sheets("Sheet1").Range("A1").Select End Sub で、A1が選択されますが、 次に仮に Sub MacroA100() Sheets("Sheet1").Range("A100").Select End Sub でA100を選択してもA100が画面上で一番上には来ないようです。 この場合、A100を画面で一番上に表示させたい場合はどうやればいいのでしょうか?スクロールさせるマクロを記述するのでしょうか?もしそうならどのように書けばいいのでしょうか?

  • 印刷範囲を設定するvbaコード

    エクセルシートの印刷範囲を設定するvbaコードで Sub Macro1() With ActiveSheet.PageSetup .PrintArea = "$A$1:$c$10" End With End Sub としてるのですが、 "$A$1:$c$10"の部分を Range(Cells(1, 1), Cells(10,3)) 形式でやりたいのですが、 うまくできません。 Sub Macro1() With ActiveSheet.PageSetup .PrintArea = Range(Cells(1, 1), Cells(10,3)) End With End Sub としても、全部が印刷範囲として選択されてしまいます。 というか、印刷範囲が設定されません。

このQ&Aのポイント
  • Skypeで相手に声が届かない問題が発生しています。以前は通話が正常にできていたのに、突然声が届かなくなりました。PCとSkypeの設定を確認しましたが、問題はありません。
  • Skypeの音声通話で相手に声が届かないという問題が発生しています。以前は問題なく通話ができていたのですが、最近突然相手に声が届かなくなりました。PCとSkypeの設定を確認しても特に問題は見つかりませんでした。
  • Skypeを使用している際、相手に声が届かないという問題が発生しています。以前はちゃんと声が届いていたのに、最近突然声が聞こえなくなりました。PCやSkypeの設定を確認してみましたが、特に問題はありませんでした。
回答を見る

専門家に質問してみよう