- ベストアンサー
エクセルVBA ファイルを変更されても問題なく作動させるには?
エクセルをVBAで処理しています。 処理は例えばC列に対して行っていますが、ファイルは誰でも自由に触ることが出来るので、C列の前に一列追加されてしまうこともあります。 (一応、みんなが列を追加することは許されています) ところが、そうするとこれまでのC列がD列に変わってしまい、マクロの処理が正しく行われなくなってしまいます。 このような状況において、列を追加されても常に本来のC列に対して処理できるようなマクロはどのように書けばよいでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
色々な方法が考えられます 1.C列に名前をつけて、Reng で参照する 例:"C列"という名前にした場合 Sub TEST() For Each c In Range("C列") If c.Value = (対象) Then (処理) End If Next c End Sub 2.特定の文字列を参照する 一番上に1行挿入し、特定の文字を入れておきます その行を非表示にしておいて、VBAから1行目を横にサーチしていき 特定の文字が入っている列を見つける 等....
その他の回答 (2)
- NCU
- ベストアンサー率10% (32/318)
セルまたはセル範囲に名前を付けます。 ただしそのためだけに追加するより、できればどうせ必要な名前に相乗りする方向で考えるといいと思います。 コードの中にセル座標をそのまま書くのは、よほど例外的な場合だけです。
お礼
回答ありがとうございます。
- papayuka
- ベストアンサー率45% (1388/3066)
実行時に処理列などを指定させるのが良いと思います。 例では選んだセルの列 1~26行にA~Zを入力します。 Sub Test() Dim r On Error GoTo ER: Set r = Application.InputBox("処理する列を含むセルを選択", "セル選択", Type:=8) '適当な処理 For i = 1 To 26 ActiveSheet.Cells(i, r.Cells(1, 1).Column).Value = Chr(i + 64) Next i ER: End Sub
お礼
回答ありがとうございます。 確かに色々な列に対して処理したいしたい場合は、列が選択できると言うのは大変便利ですよね。(実際に使ってます) でも逆に決まった列に対して処理したい場合は、選ばなければならないというのは面倒です。(人間はわがままです)
お礼
回答ありがとうございます。 このような方法が定番ということなのですね。