2017-05-07 2 views
0

私は、VBAスクリプトがさまざまな長さと開始点の多くの列をコピーし、これらの列を1つずつ別のファイルに貼り付ける、毎週更新されたデータを持つ大きなファイルを持っています。VBA:Excelの列をコピーする:セル参照を格納するためのベストプラクティス?

私の質問は、スクリプトが正しい列をコピーできるようにするために必要なセル参照を最適に保存する方法です。現在は、開始行番号、開始列番号、シート番号などをすべてインデックス化した配列群と、実際のコピー貼り付け作業を行うループ関数があります。

ソースファイルがある時点でわずかに変更された場合、この(非常に悪いのは?)ソリューションは明らかに絶対的な悪夢となります。だから、どうすればよいの?

+0

ようこそstackoverflow。特定の問題のコードを提供してください。それはあなたがどれだけ試してみたのかを証明し、他のメンバーがあなたの問題をより良く理解するのを助けます。その時、あなたは問題の文脈を与えます。これらのリンクを確認してください:https://stackoverflow.com/help/mcveおよびhttps://stackoverflow.com/help/how-to-ask –

+0

あなたのコードが機能しているので、この質問は[コードレビュー](https://codereview.stackexchange.com/)フォーラム。 –

+0

「さまざまな長さと出発点の列がたくさんある」という意味がわからないので、言うことは難しいです。とにかく、それは論理的な問題のようであり、コーディングの問題ではないようです。あなたはコピーしたい範囲をどのように知っていますか?選択肢の背後に共通の根拠がある場合は、そのルールを何らかの形で保存することができます。 1つもない場合(ColumnA、2〜5行、ColumnM、105〜522行など)は非常に難しく、おそらくルールをハードコードする必要があります。要するに、まず問題を解決してからコードを書いてください。 – CMArg

答えて

0

Excelはこの目的で列挙型を使用しています。列挙型は、名前を定数に割り当てる最も効率的な方法です。

[Private] Enum WeeklyReport 
    FirstRow = 3 
    StartColumn = 1   ' Columns: 
    Text 
    Values 
    Totals = 17 
    Remarks 
End Enum 

上記宣言は、5つの値、1行4列で列挙WeeklyReportを指定します。値が省略された場合、以前は、そのため1だけインクリメントされているのでTextは、2の値を持つRemarks = 18

あなたが好き、のように、自分のフルネームでWeeklyReport.Remarksまたはその短い名前では、値を呼び出すことができますRemarks。だからこそ、Excelは列挙型の名前を知らなくても常に使用しているxlUpのような列挙型に一意の名前を付けます。上記の名前は可能ですがあまり良くありません。

列挙型は、Long型と互換性のある独自のデータ型です。任意のコードの前に宣言され、コードシートの上部にあり、プライベートの場合はそのシート全体で使用できます。

関連する問題