• ベストアンサー

エクセルVBA ファイルを変更されても問題なく作動させるには?

エクセルをVBAで処理しています。 処理は例えばC列に対して行っていますが、ファイルは誰でも自由に触ることが出来るので、C列の前に一列追加されてしまうこともあります。 (一応、みんなが列を追加することは許されています) ところが、そうするとこれまでのC列がD列に変わってしまい、マクロの処理が正しく行われなくなってしまいます。 このような状況において、列を追加されても常に本来のC列に対して処理できるようなマクロはどのように書けばよいでしょうか?

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

  • ベストアンサー
  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.2

色々な方法が考えられます 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行目を横にサーチしていき 特定の文字が入っている列を見つける 等....

VitaminBB
質問者

お礼

回答ありがとうございます。 このような方法が定番ということなのですね。

その他の回答 (2)

  • NCU
  • ベストアンサー率10% (32/318)
回答No.3

セルまたはセル範囲に名前を付けます。 ただしそのためだけに追加するより、できればどうせ必要な名前に相乗りする方向で考えるといいと思います。 コードの中にセル座標をそのまま書くのは、よほど例外的な場合だけです。

VitaminBB
質問者

お礼

回答ありがとうございます。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

実行時に処理列などを指定させるのが良いと思います。 例では選んだセルの列 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

VitaminBB
質問者

お礼

回答ありがとうございます。 確かに色々な列に対して処理したいしたい場合は、列が選択できると言うのは大変便利ですよね。(実際に使ってます) でも逆に決まった列に対して処理したい場合は、選ばなければならないというのは面倒です。(人間はわがままです)

関連するQ&A

  • VBAにて

    初めまして、宜しくお願いします。 エクセルのVBAの処理を最近やり始めたのですが、私には ハードルが高くて、よく解りません。。。 出来るのかも解らないのですが、それもふまえて教えて いただけると助かります。 A列:名称 B列:概要 C列:ファイル名 D列:フォルダ構成 のエクセルファイルがあります。 各列ともに、何行にも渡りデータが格納されております。 これを読み込んで、ローカルにある指定のエクセルファイル(シート) をD列にある、C列のファイルに全てコピーしていきたいのです。 そのかたわらで1行ずつの処理結果を、ログに出力していくような 感じにしたいのですけど出来ますか?? 教えて下さい。 あと、もし可能であればフォルダがネットワーク上にあっても 可能なのか知りたいです。 宜しくお願いします。

  • エクセルVBAでVBAの修正は出来るのでしょうか?

    エクセルVBAでVBAの修正は出来るのでしょうか? あるエクセルファイルにマクロを組み込んでいます(ユーザーフォームも使用)。 このエクセルファイルを複数個フォルダ内にコピーしています。 このコピーした全てのファイルのマクロの修正をVBAで出来ないかと考えています。 修正箇所はモジュール内のコード修正、モジュールの追加、既存のユーザーフォームにボタン等の追加等です。 エクセルは2003を使用しています。 どなたか教えてください。

  • Excel VBA でファイルが開かれているか確認する

    ExcelのVBAで、book1.xlsというファイルが現在開かれているか確認するにはどんなプロパティを使えばいいでしょうか? 実際にやりたい事は、book1.xlsに対して処理するマクロがあるのですが、そのbook1.xlsが開かれていなければ処理が出来ないのでマクロが入っているファイルを閉じる。というものです。

  • エクセルのVBAについて

    エクセルのVBAについて教えて下さい。 エクセルのVBAでプログラムを組んでいるのですが、一つわからないことがあるのです。 マクロが実行(オープン)されるファイル名(ファイルパス)をVBAで取得するためにはどうすればいいでしょうか? たとえば、マクロが実行されるファイルがC:\テスト.xlsならば "C:\テスト.xls"を取得したいと考えています。 どなたかご教授お願い致します。 宜しくお願い致します。

  • Excel VBA セルの値を変更後にVBA作動

    Excel VBAを活用して、特定のセルの値が変更されたときに、VBA処理を発動させることになりました。 処理といたしましては、C列(3列目)の4行目以下の空白セルに数値を入力するか、セルに入力されている数値を変更した場合にVBAを発動させたいです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 3 And Target.Row >= 4 Then MsgBox "セルの値が更新されました" End If End Sub 上記のコードを実行してみたところ、3列目(C列)の4行目を選択した段階でVBAが作動してしまいます。 セルの値変更後に作動するようにするには、どう修正すればよろしいでしょうか?

  • VBAでエクセルからのファイル名とテキスト化を自動で実行する方法

    マクロを実行して、エクセルのセルからファイル名とテキストファイルを自動で出力したいのですが、VBA初心者なのでプログラムの書き方がわかりません。 どうかVBAのプログラムの書き方を教えて下さい。 【マクロ実行前のエクセル状態】 1.エクセルのA列にファイル名1を入力 2.エクセルのB列にファイル名2を入力 3.エクセルのC列にテキスト出力させたい文字列を入力 【期待のマクロ動作】 ファイル名1+ファイル名2のファイル名でC列の文字列をテキストファイルで出力。 《例》 A B C 1 2 あ ⇒マクロ実行⇒ファイル名『12』テキスト内容『あ』 3 4 い ⇒マクロ実行⇒ファイル名『34』テキスト内容『い』 5 6 う ⇒マクロ実行⇒ファイル名『56』テキスト内容『う』 7 8 え ⇒マクロ実行⇒ファイル名『78』テキスト内容『え』 ・ ・ ・ ・ 上記の様に、一回のマクロ実行で入力されている列のセル全て がファイル名付きのテキストファイルとして出力をさせたいです。 申し訳ありませんが、よろしくお願いいたします。

  • 他のExcelファイルのVBAコードを検索したい

    他のExcelファイルに書かれたVBAコードに、ある特定のキーワード(パス名など)が使われているかを自動的に調べるためのVBAを書きたいと思っています。 仕事で使っているマクロが書かれたExcelファイルからある特定の処理をしているマクロを含むものを検索したいのですが、検索するExcelファイルが膨大なため、順番にExcelファイルを開いてVBAコードをチェックしていく工程をマクロ化したいのです。ファイルを順に開いていく処理はマクロ化できるのですが、書かれたVBAコードのチェックをどうしたらよいか悩んでいます。 「VBAコードに対して検索する」または「VBAコードを1行ずつ変数に代入する」、「モジュールシートをテキストファイルに出力する」などの処理が自動化できれば対応できそうなのですが、そのような処理をExcelVBAで作成できるでしょうか。 なお環境はWindowsXPのExcel2003です。 よろしくお願いいたします。

  • ExcelのVBA

    Aというフォルダ内にあるEXCELファイルにてC列を参照(C列にはAフォルダ内にあるテキストファイルのファイル名が記載されている)し、 D列にC列に記載されているテキストファイルの内容(15文字程度)をVBAで出力したいと思っています。 Googleで色々と調べてみたのですが、同じような内容が発見できなかったので、質問致しました。 非常に困っていますので、どなたか教えていただけませんでしょうか? よろしくお願いします。

  • VBAでエクセルからエクセルのファイルを開くには?

    D:\に db1.mdb Book1.xls があります。 db1.mdbのフォームのコマンドボタンをクリックして Book1.xlsを開きたいのですが VBAコードをご教授いただけますか? (マクロではなくVBAコードが知りたいです) エクセルからエクセルのファイルを開くなら Workbooks.Open ファイルのフルパス で出来ました。 ご回答よろしくお願いします。

  • EXCEL- VBA(CSVファイル→インポート)

    A列~F列になる複数(100個以上)のCSVファイルをエクセルファイルにインポートして更に個別にエクセルファイルとして保存したいのですが VBAでできるのでしょうか? 記憶マクロでやったらどうにもうまくいきません。 エクセルのVBAについては ほとんど知識ゼロなので困っております。 大変厚かましくありますが どなた様かご教授お願いできたらと思います!! 【元のファイルの状態】   ◆ファイル名「*.CSV」*は文字数それぞれ違います。   <例:tanaka.xls だったり 09福島.xls>  ◆入っているドライブ   TEXT;C:\Documents and Settings\AA_B\デスクトップ\練習  ◆A~F列にデータが入っている 【やりたいこと】    (1)A~F列はカンマ区切りで全て文字列としたい  (2)元のファイル名でエクセルとして保存したい「*.XLS」

専門家に質問してみよう