Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
将来的に行もしくは列が増える可能性がある複数のシートについて
投稿日時: 21/03/29 09:33:24
投稿者: だいふくもち

いつもこちらのコミュニティにはお世話になっております。
現在VBAを勉強中の者です。
ご経験者様のご意見をいただければと思いご相談させていただきました。
 
現在、VBAを使用して目的のシートに転記を行っております。
 

'@変更前
With ActiveSheet
  .Range("A1").Value = estimateSheet.Range("B1").Value
  .Range("A2").Value = estimateSheet.Range("D2").Value
  .Range("D1").Value = estimateSheet.Range("F2").Value
End With

しかし今後、転記元であるestimateSheetに行もしくは列が
挿入されるかもしれない状況になり、Rangeを書き換える際のミスを防ぐため
各セルに名称を付け、その名称で紐づけることにしました。
 
'A変更後
With ActiveSheet
  .Range("A1").Value = estimateSheet.Range("数量").Value
  .Range("A2").Value = estimateSheet.Range("単価").Value
  .Range("D1").Value = estimateSheet.Range("小計").Value
End With

estimateSheetのあるブックには、つくりが全て同じシートが複数存在しており、
@変更前のマクロを共通して使用できておりました。
しかし、同じブックにあるシートのセルの名称は、それぞれ一意の名称で
なければならないため、ブックを分ける必要が生じてしまいました。
 
行もしくは列の挿入が発生した場合、@変更前だと挿入された以降の列&行の数値を
変更しなければならず、変更し忘れがないか不安です。
しかし、A変更後を使用した場合、シートを分けた分のブックを
それぞれ修正しなければならないのも、ブックごとに差異が生じてしまわないか不安です。
 
行もしくは列の挿入に適した書き方をご存じの方がいらっしゃいましたら、
どうかアドバイスいただけませんでしょうか?(初歩的な質問で申し訳ありません…)
 
最後までご覧いただきありがとうございました。

回答
投稿日時: 21/03/29 10:17:09
投稿者: Suzu

「名前の定義」にて 名前を設定された セルの 「範囲」はどうなっていますか?
 
数式 - 定義された名前 名前の管理 の当該名称を選択後、
「名前の編集」が表示されますから、その 範囲 を確認します。
 
 
範囲が、『ブック』 であれば、

引用:
同じブックにあるシートのセルの名称は、それぞれ一意の名称でなければならないため
こうなるでしょうが、
 
範囲に、シート名が指定されていれば、シート内で重複が許されないだけで、ブックでの重複は可能です。
 
WorkBooks("Book1.xls").WorkSheets("Sheet1").Range("数量").Value
WorkBooks("Book1.xls").WorkSheets("Sheet2").Range("数量").Value
 
で、それぞれ、Sheet1 と Sheet2 の 数量の名称の指定されたセルの値が取得できます。

投稿日時: 21/03/29 10:47:19
投稿者: だいふくもち

>Suzu様
 
いつも迅速かつ分かりやすいご回答、本当にありがとうございます。
教えていただいた通りに「シート」を選択し、名称を登録することで
無事、共通のマクロで運用することができました!
 
かなり簡単な処理で片付いてしまって唖然としております…
初歩的な質問にも関わらず、ご丁寧に教えていただき本当にありがとうございました!
おかげさまで、運用しやすくなりました(*^ ^*)