マクロのセル範囲選択方法について

このQ&Aのポイント
  • マクロのセル範囲選択方法について教えてください。
  • ネットで有効なマクロ記述を使用してセル範囲の選択を試みましたが、思った通りに動作しませんでした。
  • 具体的には、C7を起点とした最終の列 (C7:D7) を選択したいのですが、実際には(A7:C7)が選択されてしまいます。どこが間違っているのでしょうか?
回答を見る
  • ベストアンサー

マクロ セル範囲の選択の仕方について

いつも回答して頂きありがとうございます。 ネット等で検索し、有効なマクロ記述を使用してセル範囲の選択を行いましたが、 自分が思っている通りに動きませんでした。 『質問内容』 C7を起点とした最終の列 (C7:D7) ← 自分の狙いの選択範囲(Dより大きい文字がきて欲しかった) 実際は、(A7:C7)が選択された。 どこらへんの記述が間違っているのでしょうか? 御指導の程よろしくお願い致します。 ちなみに下記が自分が作成中のマクロです。 Sub シートを繰り返し選択する() Dim d As Integer Dim retu As Integer d = 3 retu = Range("IV7").End(xlToLeft).Column Worksheets(Worksheets("一覧").Cells(d, 2).Value).Activate ActiveSheet.Range(Cells(7, 3), Cells(7, retu)).Select End Sub

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

「一覧シートでマクロを起動させて、  一覧シートのB3セルで指定した“名前”がついた  一覧シート以外のシートの7行目を選択したい」んですよね? 以前に説明したと思うのですが、 「マクロは基本的に、その文を処理するタイミングで  アクティブなシートに対して動作します」。 つまり > 最初に違うシートが選択されていた場合のみ、A7:D7が選択されるみたいです。 > 最初から選択すべきシートを選択していたら狙いの選択が出来ます。 こうなるわけです。 > retu = Range("IV7").End(xlToLeft).Column ここで最終列を取るタイミングで「選択すべきシート」以外のシートがアクティブなので 上記の現象が起こります。 回避するためには、この文の前に「選択すべきシート」をアクティブにするか、 文の中に「選択すべきシートに対する処理」と書き込むかのどちらかです。 上下をひっくり返すだけで回避できるかな?   Worksheets(Worksheets("一覧").Cells(d, 2).Value).Activate   retu = Range("IV7").End(xlToLeft).Column とも思いますが、例によってWithでまとめちゃうのも手段の一です。   With Worksheets(Worksheets("一覧").Cells(d, 2).Value)     .Activate    'ここはあまり意味が無いかも     retu = .Range("IV7").End(xlToLeft).Column     .Range(Cells(7 , 3) , Cells(7 , retu)).Select   End With こんな感じですね。 複数シートをまたぐ処理をさせたいなら、 どのシートに関する処理なのか、逐一教えてあげましょう。

kero1192kero
質問者

お礼

いつも回答ありがとうございます。 変数を指定するところなので、関係ないと思っていました。 最終の列を所得する時にもアクティブシートを参照しているんだ。これで意図しない範囲の選択理由が分かりました。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>retu = Range("IV7").End(xlToLeft).Column ここで7行目に何も記入されていないので、retuが空振りしています。 つまり、そもそものマクロの狙い(=設計方針)が間違っています。 >自分の狙いの選択範囲(Dより大きい文字がきて欲しかった あなたの狙いを正しくエクセルに示すために、「ここまで選択してほしい」そのセルに、実際にデータを記入しておく必要があります。 たとえばE7セルに「何か」記入しておいてご相談のマクロを実行すれば、C7:E7が選択されます。

kero1192kero
質問者

お礼

いつも回答ありがとうございます。 C3~G7には全て記入されています。 C3 → 清掃日の文字が記入されています。 D7~G7 → 日付が記入されています。 最初に違うシートが選択されていた場合のみ、A7:D7が選択されるみたいです。 最初から選択すべきシートを選択していたら狙いの選択が出来ます。 どうしてでしょうか?

関連するQ&A

  • マクロ 別シートへコピー

    いつも回答して頂きありがとうございます。 Worksheets("一覧").Paste Range("C3")と記述したら、エラーもかからずうまく貼り付け出来るが、 Worksheets("一覧").Paste Range(Cells(d,3))と記述したらエラーが発生してしまします。どうしたら上手くいくでしょうか? 下記に作成中のマクロを記載しておきます。 御指導の方よろしくお願いいたします。 Sub シートを繰り返し選択する(2)() Dim d As Integer Dim cVx As Integer d = 3 cVx = Range("IV7").End(xlToLeft).Column Worksheets(Worksheets("一覧").Cells(d, 2).Value).Range("C7:X7").Copy Worksheets("一覧").Paste Range(Cells(d, 3)) End Sub

  • Excellマクロ Cellsの範囲選択について

    エクセル2003についてお尋ねします。 A1には行番号にあたる変数が表示されるようになっています。 その変数によって選択するセルの範囲が変わるようにすることが目的でした。 「A1の行番号の5~10列目を選択する」というマクロを 下記のような記述を行いましたが、※のところでエラーが出てしまい、問題がわからずにおります。 お手数ですが解決策をご教授ください。 Sub マクロ1() Dim j As Integer j = Range("A1") Worksheets("Sheet1").Activate Range(Cells(j, 5), Cells(j, 10)).Select ←※ End Sub よろしくお願いいたします。

  • マクロ FIND 検索方向の変更

    いつも回答ありがとうございます。 FINDを使用した検索方向の変更についての質問です。以下のFINDの記述方法で、上から一発目に捉えられたキーワードではなく、下から一発目に捉えられたキーワードに変更するにはどうしたらよろしいでしょうか?それとも、FINDの記述方法を大幅に変えなければいけないのでしょうか?御指導の程宜しくお願い致します。 Sub TEST() Dim d As Integer Dim e As Integer Worksheets("一覧").Activate d = 3 e = 3 Do While Worksheets("一覧").Cells(d, 2).Value <> "" Dim c As Variant Dim R As Range Dim s As Range With Worksheets(Worksheets("一覧").Cells(d, 2).Value) Set c = .Columns("H").Find("増", , xlValues, 1) If Not c Is Nothing Then Set R = .Range(c.Offset(1, -4), .Cells(Rows.Count, "D").End(xlUp)) Set s = c.Offset(, -5) With Worksheets("編集用一覧") .Range(.Cells(e, 4), .Cells(e, 5)).ClearContents .Cells(e, 4).Value = s .Cells(e, 5).Value = Application.Sum(R) End With End If End With d = d + 1 e = e + 4 Loop End Sub

  • ファイルオープン時のマクロが一部実行されない

    いつも回答して頂き、ありがとうございます。感謝感謝です。 ファイルオープン時にApplication.Runで3つのマクロを実行させているのですが、最後のマクロだけ実行されません。どうしてでしょうか?もしかして、前の2つで『一覧シート』を除外するマクロを実行しているからでしょうか?御指導の程宜しくお願いいたします。 1番目に実行するマクロ Sub 特定のシート以外の最終履歴と次回予定日を算出する() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then If ws.Name <> "メニュー" Then Dim c As Integer c = 3 Do While ws.Cells(2, c).Value <> "" With ws.Cells(6, c) .FormulaR1C1 = "=MAX(R8C:R10000C)" If .Value = 0 Then .Value = "履歴無し" ws.Cells(7, c).ClearContents Else .Value = .Value ws.Cells(7, c) = DateAdd("d", ws.Cells(5, c), DateAdd("m", ws.Cells(4, c), DateAdd("yyyy", ws.Cells(3, c), ws.Cells(6, c)))) End If End With c = c + 1 Loop End If End If Next End Sub 2番目に実行するマクロ Sub 期限の未達と到達を色で分ける() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then If ws.Name <> "メニュー" Then Dim c As Long Dim res As Variant For c = 3 To ws.Cells(7, Columns.Count).End(xlToLeft).Column If IsDate(ws.Cells(7, c)) Then If ws.Cells(7, c) > Date Then res = 8 Else res = 3 End If Else res = xlNone End If ws.Cells(7, c).Interior.ColorIndex = res Next c End If End If Next End Sub 3番目に実行するマクロ Sub 各シートの情報を一覧へ転記する() Dim d As Integer Dim retu As Integer d = 3 Do While Cells(d, 2).Value <> "" With Worksheets(Worksheets("一覧").Cells(d, 2).Value) .Activate retu = .Range("IV7").End(xlToLeft).Column .Range(Cells(7, 3), Cells(7, retu)).Copy End With With Worksheets("一覧") .Activate Cells(d, 3).PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End With d = d + 1 Loop End Sub

  • マクロ 選択が上手くできない

    いつも回答ありがとうございます。 色々あってもう質問しないでおこうかと思いましたが、やっぱり壁にぶつかっちゃうので質問させて頂きます。何卒お手柔らかに宜しくお願い致します。 以前も同じような質問をここでしたと思いますが、今回作成中のマクロでは自分の思った範囲が選択されないので困っています。以前の投稿履歴・ネット等で何度も見直しましたがさっぱり分かりません。 シートの構成 ・集計用という名のシートがあります。 ・B列の4行目から下方向に日付が連続で記載されています。(重複無) で、このB列の『最終(一番下)の日付』と『最終の日付から7日前』の範囲を選択するマクロを記述しましたが、全く違うセル範囲(LCB3:LCI3)が選択されました。色々記述を変えたりしましたが、エラーがかかったりもう訳が分かりません。高確率で基本的な間違いをしているんだろうなとは思いますが、どうか御指導の程宜しくお願い致します。 作成中のマクロ Sub 直近1週間の範囲を選択() Dim b1 As Long '最後の日付 Dim b2 As Long 'b1から7日前 With Worksheets("集計用") b1 = .Cells(Rows.Count, 2).End(xlUp) b2 = .Cells(Rows.Count, 2).End(xlUp).Offset(-7, 0) .Range(.Cells(b2), .Cells(b1)).Select End With End Sub

  • エクセルマクロ:範囲の選択

    マクロで範囲を指定したいのですが、 dataと名づけたシートA1に例えば8という値、A2に20という値があります。 この数字は他のセルから参照する計算式になっていて再計算をするたびに変わります。 この時、C8:E20の範囲を指定したいのですが、やみくもに Dim c As Integer c = 3 'C列 Range(Cells(Sheets("data").Range("A1").Value, c), Cells(Sheets("data").Range("A2").Value, c + 2)).Select Selection.Copy などと書いてみたのですが、うまくいきません。 どのように記述すればよいか、教えてください、宜しくお願いいたします。

  • 選択範囲の空白セルに0を入れるマクロ

    Private Sub CommandButton1_Click() If Cells("選択範囲").SpecialCells(xlcellTypeblank).Select Then Range("選択範囲").Value = 0 End If End Sub このマクロを作成したのですが、動きません。 どこが、おかしいのでしょうか?

  • excelのマクロでrangeの選択がうまくいきません。

    excelのマクロでrangeの選択がうまくいきません。 以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。 Sub testcopy() Worksheets("sheet1").Range("B3:C10").Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub Sub testcopy2() Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub

  • エクセルマクロ 選択したセル範囲の中で空""のセルに'を入れる

    エクセルは長年使っていたのですが、 マクロも使いたいと思いネットで色々調べています。 やりたいことは、 選択したセル範囲の中で空""のセルに'を入れる マクロを作りたいのですが、 どうしたら良いのでしょうか? マクロ以外の方法もあれば教えて欲しいのですが、 この機会にマクロに挑戦しようと思いました。 宜しくお願いいたします。 今作成している途中のマクロはこんな感じですが 上手く動きません Sub NullCellAddDash () Dim cellrange As Range For Each cellrange In Selection.Cells If cellrange = "" Then cellrange = "'" End If Next End Sub

  • EXCEL VBA VLOOKUP 範囲を変数で

    Excel VBA で VLookup()の第2引数の範囲を行と列の数値の変数で指定したいのすが どのように記述すればよいでしょうか。 以下の式がエラーにならないように具体的に直していただけないでしょうか。 よろしくお願いします。 ----------------------------------- Dim d1 As String Dim d2 As String Dim r1 As Integer Dim r2 As Integer Dim c1 As Integer Dim c2 As Integer Dim c3 As Integer d1 = "愛知" r1 = 2 r2 = 782 c1 = 3 c2 = 5 c3 = 4 d2 = VLookup(d1, Worksheets("Sheet1").Range(Cells(r1, c1), Cells(r2, c2)), c3, False)

専門家に質問してみよう