|    | 
     ▼みかん さん: 
 
★いったんアップしたレスを削除し、一部訂正して再度アップします。 
 
そちらのコードをざっと読みました。 
 私の理解が正しければ、この処理に、配列からの一括転記はかなり無理ですね。 
 
 2次元配列の中身をセルに落とし込むときの絶対条件は、セル側が連続している 
 ということになります。なので、↑で、【連続している一部】を配列から抜き出して 
一括転記するコードをアップしたんですが、今回のように4列とびの1列ずつを 
別の列に転記するのは、無理ですねぇ。 
 (1列ずつの配列からの抜出と一括転記はできますが、意味がないですから) 
 
それと、PasteSpecialでxlPasteFormulaとしていますね。 
これに意味があるなら(つまりコピー対象領域に、本当に式があるなら) 
たとえば元のセルに =A100+B100 といった式があったとして、それを配列に 
式として取り込むことはできますが、別のセルに落とし込んでも =A100+B100 
となります。PasteSpecialなら、例えば =E100+F100 となるべきところですね。 
この意味でも配列に格納ーー>それを落とし込む ということは不可能になります。 
もし、たまたま xlPasteFormula としているだけで、実際は値の転記でいいなら 
話は別です。 
 
つまり、BC列、BG列、BK列、。。。。のコピー対象行に式がないなら、この処理は 
配列にセル領域から取り込み配列内で加工してシートに一挙に書き戻すということは 
簡単に(↑でアップしたような INDEX関数処理を使わずとも)可能です。 
 
 
ところで、もともとのコード自体に、ちょっと難なきにしもあらず。 
Ws.Range(Cells(4, Ij(1) + 1), Cells(Maxrows, Ij(1) + 1)).Select 
実は、このコードは【間違った書き方】です。 
( ) の中の Cells は、実は Ws ではなく ActiveSheet の領域を指します。 
その上にWs.Selectがあるので、この間違いが表に出ていませんが 
日本語にすると、Wsの中の領域で、その詳細は ActiveSheetのここからここまで 
 という意味になります。なので、仮に ActiveSheetがWs ではなかったらデバッグ画面 
が登場するところです。で、Ws.Selectだからいいだろうといいたいでしょうが、 
それなら、 Ws.Range と、Wsで修飾する必要もなく、単に Range( と書けばいいんです。 
 (あぁ、私は Ws とつけるのは大変いいこと、というか必要なことだと思ってるんですよ) 
そのほかにもループの中で毎回シート選択をするのは、いかがなものかとか、 
 変数Ijを配列にしている意味が全くないとか エトセトラ エトセトラ。 
 
 | 
     
    
   |