Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4120 / 13646 ツリー ←次へ | 前へ→

【58330】マクロの相対参照?について kenken 08/10/20(月) 0:07 質問[未読]
【58331】Re:マクロの相対参照?について ichinose 08/10/20(月) 1:26 発言[未読]
【58344】Re:マクロの相対参照?について kenken 08/10/20(月) 19:47 質問[未読]
【58345】Re:マクロの相対参照?について りった 08/10/20(月) 20:33 回答[未読]
【58346】Re:マクロの相対参照?について kenken 08/10/20(月) 21:18 お礼[未読]
【58356】Re:マクロの相対参照?について ichinose 08/10/21(火) 8:40 発言[未読]

【58330】マクロの相対参照?について
質問  kenken  - 08/10/20(月) 0:07 -

引用なし
パスワード
   マクロ初心者です。質問の意味がわかりづらいかもしれませんが
どなたか教えてくれたら嬉しいです。

普通のエクセルでは列の挿入をしても数式が記入されているセルは
それに応じて変更されると思います。
例 C1セル=A1*B1 が入力されていて、B列に1列挿入すると
  D1セル=A1*C1 と自動的になりますよね

しかし、マクロでは
Sub 例()
 Worksheets("sheet1").Range("B1") = "aaaa"
End Sub
などのマクロがあっても、後々作成していく中でB列を挿入して
も自動的にマクロがC1には変わりませんよね?

現在は、挿入などをする度に手作業でひとつずつ変更しています。
しかし、何かもっと良い方法があるはずと思いお聞きします。
行や列の挿入をおこなった際に自動的にマクロ側も変更される
方法ってあるのでしょうか?

素人質問ですみません。。

【58331】Re:マクロの相対参照?について
発言  ichinose  - 08/10/20(月) 1:26 -

引用なし
パスワード
   ▼kenken さん:
こんばんは。


>普通のエクセルでは列の挿入をしても数式が記入されているセルは
>それに応じて変更されると思います。
>例 C1セル=A1*B1 が入力されていて、B列に1列挿入すると
>  D1セル=A1*C1 と自動的になりますよね
>
>しかし、マクロでは
>Sub 例()
> Worksheets("sheet1").Range("B1") = "aaaa"
>End Sub
>などのマクロがあっても、後々作成していく中でB列を挿入して
>も自動的にマクロがC1には変わりませんよね?

名前の定義を使うとそれらしい変化は見られます。

新規ブック(Sheet1というシート名が存在すること)の標準モジュールに


'=============================================================
Option Explicit
Sub 準備()
  ActiveWorkbook.Names.Add Name:="sheet1!氏名", RefersToR1C1:="=Sheet1!C2"
  Worksheets("sheet1").Range("b1").Value = "氏名"
End Sub
'=====================================================================
Sub test()
  With Worksheets(1).Range("氏名")
    .Cells(.Rows.Count).End(xlUp).Offset(1, 0).Value = _
                 Application.InputBox("input")
    End With
End Sub

まず、「準備」を実行して名前の定義や項目名を設定します。

上記のプロシジャーが正常に終了したなら、「test」を実行してみてください。
(但し、Inputboxで「キャンセル」はなしということで・・・)

B2から順次入力が可能になります。

B列に列挿入を行い、再び「test」を実行して適当な文字を指定して下さい。

指定した文字列は希望通りC列に入力されませんか?

後は、名前の定義にどれだけ便利な数式を登録するかですが・・・。

【58344】Re:マクロの相対参照?について
質問  kenken  - 08/10/20(月) 19:47 -

引用なし
パスワード
   ▼ichinose さん:
早速の回答ありがとうございます。

すみません。私の質問の仕方が悪かったですね。
ichinose さんのマクロでも指定した箇所ではできました。
しかし、私がやりたいというか、質問させていただいたのは
どのような場合でも使える基本的な操作方法とか技があるかなのです。

素人の私は一度完成させたマクロがあり、それを
後からエクセルの列などを追加してしまった場合、マクロも
手作業でひとつひとつ対応するセルを指定し直したりしています。

上級者の方たちもそのようなチマチマした作業をしているのかな
と疑問に思ったのです。
調べたのですが、それらしきものが見つからなかったので
質問させていただきました。

もし、よい方法がありましたら引き続きお願いします。

【58345】Re:マクロの相対参照?について
回答  りった  - 08/10/20(月) 20:33 -

引用なし
パスワード
   自分は名前定義とoffset関数と列見出しを検索で位置決めするのでそもそもセル位置をコードに記載しません。

【58346】Re:マクロの相対参照?について
お礼  kenken  - 08/10/20(月) 21:18 -

引用なし
パスワード
   ▼りった さん:
ありがとうございます。

ということは、上級者の方々はみなさんichinoseさんが教えて
くださったような名前定義のやり方で作成段階から行なっているので
後々も苦労しないといことですね。

ichinoseさん申し訳ありませんでした。

勉強します!

【58356】Re:マクロの相対参照?について
発言  ichinose  - 08/10/21(火) 8:40 -

引用なし
パスワード
   おはようございます。


>ということは、上級者の方々はみなさんichinoseさんが教えて
>くださったような名前定義のやり方で作成段階から行なっているので
>後々も苦労しないといことですね。

上級者というよりは、後々のメンテナンスを考慮すると、
先の投稿のような手法も考えられるということです。

私もだいぶ前ですが(7,8年前かな)、34列ぐらい表(長いよね)を扱ったときに
データの追加で列挿入がありそうだな と判断したときに前投稿のような
名前の定義を使ったことがありました。

が、簡単にこの方法に決定したわけではありません。
というのも名前の定義を使用すると、処理速度はやはり落ちるのです。
何度もテストをして、処理速度低下とメンテナンスを計りにかけての決定です。

プログラムを作る時、アルゴリズム的には、早い段階である程度見通しがたっても
データ構造やプログラム構造の選択には、かなり時間をかけて迷って、決定しています。

4120 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free