• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCELのVBAセル操作について)

EXCELのVBAセル操作について

このQ&Aのポイント
  • エクセルのセルの操作(vba)についてお知恵をお貸しください。
  • シートAの5行目に行を挿入した時にシートBに配置してあるボタンをクリックすると、シートAの”A10”に飛ぶのですがA10の内容は行を追加した影響でA9の内容が表示されています。
  • シートAには、このようなモジュールがたくさん貼ってありA10より下の全て行を手作業で修正するのはしんどいので何かいい案はありますでしょうか?

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

シートAのA10セルに名前定義して、その名前でSelectしては如何ですか。 これでしたら、今後いくら行を挿入しても目当てのセルをSelectします。 具体的にはシートAのA10セルに名前定義(例:AAA)し、コードを次の様に変えます。 Range("A10").Select ↓ Range("AAA").Select

nabepapa
質問者

お礼

回答ありがとうございます。 その手がありましたね、セルの番号に気をとられていました。 参考にしたいと思います。

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

その他の回答 (2)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

VBAのコードのセルアドレスは自動変位しないので手作業で変更しかないと思います 一例です。 仮に、対象シートのジャンプ位置の別列にユニーク文字列(重複しない)を設定して これをキーにSelectすれば行数が変動しても影響を受けませんが如何でしょうか。 Set pos = Sheets("sheet2").Cells.Find(What:="文字列") If pos Is Nothing Then Exit Sub With Sheets("worksheeta") .Select .Range("A" & pos.Row).Select End With

nabepapa
質問者

お礼

ご意見、ありがとうございます。 回答No2さんの進化形といった形ですね。 参考にさせていただきます。

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

絶対番地的に参照して、VBAコードを組んでから、行挿入・削除を行うと、モジュールなどのコードまでは質問者の言うように自動で変えてくれない。 セル範囲の場合は同じ。 Sub test02() Range("a1:A10").Copy Range("B1") End Sub でA6をポイントしてに行挿入など。 ーー 普通はVBAの実行が始まったら人間の介入(行挿入)などはやっている隙はない。だから問題は余りない。 しかし実行してないときに行挿入、行削除をされてしまったら、表の構成が変更されてしまうわけで、普通はコードの やっていることにも差しさわりがある場合があるだろう。 この点エクセルの関数とは違う。VBAは広範囲な面の処理が考えられるが、それをやる仕組みにすると混乱するのではないかな。 今は最終行なので、A10の値を使ったとする。11行目にデータが追加されたら、最終行という意味ではA10で無くなる。 こういうことは、行挿入に比べたらよく起こる。それでRange(”A65536”).End(xlup).Rowなどで毎度の修正や混乱を防ぐ。 ーー 行挿入されても、差し障り無いコードにするのは、場合場合に応じて違う、ただ意識して、何か手を打たないと(適したコードにしないと)ダメでしょう。 A10の選んだ由縁に戻って(例えば合計行であるとか、データ最終行であるとか、10行分の最後であるとか、田中さんのデータ行であるとかで)掴むようにしないとだめでしょう。 骨が折れますが。 しかし普通に質問に回答している場合は、余り悩ましい質問のケースに出くわさない。 出来るだけ番地を固定してセルは指定しない。項目見出し行や、データ最初行などは影響するけれど。 エクセルVBAではデータは一応完成してから処理に入るのが普通。

nabepapa
質問者

お礼

専門的な意見、ありがとうございます。 当初はEXCELに行の追加を考えていなかったのですが追加するはめになってしまったのです。 ご意見、参考にしたいと思います。

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

関連するQ&A

  • エクセルVBAでボタンを作ったシートとVBAを実行するシートを変えたい

    シート1にボタンを作成し、 そのボタンを押すと実行するVBAを作成しました。 そこで、VBAを実行するシートの指定はできるのでしょうか。 例えば、ボタンを押すと、 10行から20行まではシート2で実行させ、 30行から40行まではシート3で実行させたいと考えています。 可能でしょうか。 どうぞ宜しくお願いします。 *********************************************** 作成したVBA。ボタンはシート1にあります。 *********************************************** Private Sub CommandButton1_Click() *********************************************** ここからはシート2で実行させたい *********************************************** Range("E2").Select ActiveCell.FormulaR1C1 = "10" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("E2:E101").Select *********************************************** ここからはシート3で実行させたい *********************************************** Range("A2").Select ActiveCell.FormulaR1C1 = "100" Range("A2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("A2:A101").Select End Sub

  • エクセルVBAセルの選択、挿入でズレた時に自動修正

    エクセルのVBAで、セルA1を選択します Sub Macro1() Range("A1").Select End Sub 別の作業でA列に1行挿入すると 自動的にセルB1を選択してくれないと困るのですが、どうすれば良いのですか?

  • エクセルVBAで

    いつもお世話になります。 Sub ボタン_Click() Sheets("別紙1").Range("E1") = ActiveSheet.Name Sheets("別紙1").Activate Range("B65536").End(xlUp).Offset(1).Select End Sub Sub ボタン1_Click() i = Range("B65536").End(xlUp).Offset(, -1).Value na = Range("E1") Sheets(na).Activate ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _ SubAddress:="別紙1!B" & i + 2, TextToDisplay:=Str(i) End Sub 上記モジュールで、ボタンをクリックすると別紙1に飛んで、その中に必要事項を記入後、ボタン1をクリックすると、ボタンをクリックしたときにアクティブだったセルに、ハイパーリンクを貼るものを利用していました。 先日、これらモジュールが貼られているシートを保護をかけて再度保護を解除したら、今までボタンを押したときにアクティブだったセルにハイパーリンクが貼れていたのに、A1のセルに記入してしまうようになりました。 そこで、不具合を改善すべく、上記モジュールを書き換えて、ボタンをクリック時にアクティブセルを別紙1のE2の保存しておいて、ボタン1をクリックするとそのE2のセルに戻ってハイパーリンクを貼るというものにしなおしたいと思います。 そこで質問ですが、ボタンをクリックした時点で、アクティブであるセルの座標(表現の方法が不適切かもしれませんが)を取得するにはどのようにすればいいでしょうか? ちなみに、E1にはクリックした時点でアクティブであるシート名を記録し、ボタン1をクリックしたときにそのシートへ戻るようにしてあります。 以上、ご教示の程よろしくお願いします。

  • VBA(エクセル)で自動的にボタンをクリックさせるには

    いつもお世話になっております。 下記のことがしたいのですがどうやって良いのかがわからなくって困っております。 やりたいこと。 AブックとBブックが有るとします。(双方ともエクセルファイル) エクセルのVBAで、Aブックのシート上のコマンドボタンを押すと Bブックのシート上のコマンドボタンをクリックするという動きを VBAでさせたいのですがどうしてもクリックさせることができません。 試したこと。 初めは、AのボタンをクリックするとBのボタンをセレクトして SendKeysでENTERを送ってみたりしたのですがうまくいきませんでした。 何かやり方が有りましたら、お教えいただけませんでしょう。 宜しくお願いいたします。

  • ExcelのVBAです。

    先日お答えいただいたVBAなんですが、 Sub Macro1() Sheets("Sheet1").Select Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("Sheet3").Select Range("A1").Select ActiveSheet.Paste Selection.End(xlDown).Select Application.CutCopyMode = False Do Selection.Insert Shift:=xlDown Selection.End(xlUp).Select Loop Until ActiveCell.Address = "$A$1" End Sub というのを使用させて頂いてます。 これを、コピー先のものを上書きせずに、コピーされたものがあれば表示させるといった風に出来ないでしょうか? 例  A    A 1 a 1 2 b → 2あ 3 c 3 右から左に一行間隔で別シートに表示させたいのですが、  A  1 a 2 あ 3 b 4 5 b という結果にしたいのです。 拙い文章で申し訳ないのですが、教えて頂きたいです。

  • 【エクセル】VBAでハイパーリンクそうさ

    VBAでハイパーリンクのマクロを組んでいます。 A列にホームページ名が50行(シートによってまちまち)くらい並んでいて、 B列に、それに対応するURLが記入されています。B列は空白のところがちらほ らあります。 A列に、A列の表示(ホームぺジ名)のまま、B列のURLでハイパーリンクを張りたい です。リンクは貼れたんですが、ホームページ名がどうやれば表示できるかわかり ません。教えてくださいお願いします。 ダメダメですが、一応自分で書けたところまでを載せておきます。 Sub ハイパーリンク() Dim i As Integer Dim j As Integer j = 50 For i = 1 To j Sheets("Sheet1").Select Cells(i , 1).Select ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _ Cells(i , 2), TextToDisplay:="" Next i End Sub としました。

  • Excel VBAでのコードの書き分け方

    Excel VBAについてご質問します。 プロジェクトの項目を見ると、 Sheet1 ThisWorkbook 標準モジュール などさまざまあると思います。 これらに対して、どこにコードを書いていくべきなのかがわかりません。 例えば、Sheet1にボタンを配置して、それがクリックされたときの動作についてはSheet1に書けばいいのだと思います。 ですが、いろんなシートのコード、フォームのコードなどから呼び出される関数はThisWorkbookか標準モジュールのどちらに書けばいいのか悩んでいます。 それ以外のケースも含めて、一般的にこういう風に使い分けをするというのがありましたら、ぜひ教えてください。 よろしくお願いいたします。

  • エクセルVBA 1つのシートで出来ますか?

    説明が下手で申し訳ございませんが、宜しくお願い致します。 sheet(1)に20個のボタンがあります。 ボタンをクリックすると、別のシートが開きます。 開いたシートにも複数のボタンがあり、そのうちの任意のボタンをクリックすると、そのボタンの値がsheet(1)のそれぞれのボタンに対応したセルに入力される、という動作を実現したいと思っています。 現状、下記のようなコードで目的の動作は実現できてはいるのですが、各ボタンそれぞれにシートを作っているような状況です。(データ自体は全く同じ内容のものが、計20シート) たぶん、もの凄く頭の悪い事をやっているんだろうと思います。 sheet(1)を除いた各シートの入力データ自体は全く同じなので、シート一枚で出来るんじゃないのかなと思い、ネットや本で調べながら色々試してみたのですが、どうも上手く行きません。データが同じでも、sheet(1)のクリックしたボタンによって入力するセルを変えなければならないのが問題です。 sheet(1)のボタンとセルの関連付けや、sheet(1)のどのボタンを押したのかの判別ができればいいのかなと思って調べてみても、初心者にはよく理解できず、もう何週間もチャレンジしているのですがお手上げです。 上級者の方の知恵をお借りできれば幸いです。 Sub sheet2を開く() Worksheets(2).Select End Sub Sub 入力1() Worksheets(1).Range("F8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("F8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("F8") = "データ3" Worksheets(1).Select End Sub Sub sheet3を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("H8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("H8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("H8") = "データ3" Worksheets(1).Select End Sub Sub sheet4を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("M8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("M8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("M8") = "データ3" Worksheets(1).Select End Sub    ・    ・    ・    ・    ・

  • エクセルVBAのボタン操作について

    sheet1にコマンドボタン(CommandButton1)を貼り付けて sheet2にもコマンドボタン(CommandButton1)を貼り付けています。 sheet1のコマンドボタンを押すとVBAで処理をして sheet2を表示後 自動的にsheet2のコマンドボタンにかかれたVBAの処理をしたいのですがうまくいきません。 教えてください。 環境windows2000 office 2000 sheet1のボタンの最後 Sheets("2").Select ActiveSheet.Shapes("CommandButton1").Select でうまくいきません。

  • エクセルVBAでオプションボタンのセル内配置

    エクセル2000です。 シート上に「フォーム」のオプションボタンを配置する際、自動記録を取ると ActiveSheet.OptionButtons.Add(2.25, 2.25, 48, 16.5).Select のように、座標表示になりますが、これを仮に、A1セルやA2セルに配置したい場合、(行の高さ等はシートにより異なるものとします・・・つまり座標が使えない場合)どのような記述になるのでしょうか?