• ベストアンサー
※ 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/17069)
回答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

専門家に質問してみよう