Excel VBA質問箱 IV

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

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


5795 / 76735 ←次へ | 前へ→

【76547】Re:2次元配列の範囲指定について
発言  β  - 14/12/30(火) 20:48 -

引用なし
パスワード
   ▼みかん さん:

★いったんアップしたレスを削除し、一部訂正して再度アップします。

そちらのコードをざっと読みました。
私の理解が正しければ、この処理に、配列からの一括転記はかなり無理ですね。

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を配列にしている意味が全くないとか エトセトラ エトセトラ。

0 hits

【76544】2次元配列の範囲指定について みかん 14/12/30(火) 12:16 質問[未読]
【76545】Re:2次元配列の範囲指定について β 14/12/30(火) 13:24 発言[未読]
【76546】Re:2次元配列の範囲指定について β 14/12/30(火) 15:46 発言[未読]
【76547】Re:2次元配列の範囲指定について β 14/12/30(火) 20:48 発言[未読]
【76548】Re:2次元配列の範囲指定について みかん 14/12/31(水) 14:46 お礼[未読]
【76549】Re:2次元配列の範囲指定について β 14/12/31(水) 21:39 発言[未読]

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