プロが教えるわが家の防犯対策術!

VBA初心者の


図2と3を見比べてみてください。
図1から必要な列だけを選択して1列丸ごとコピーするのですが

図2を見てください。1行丸ごと項目でつぶしているところがあり
このままだと1項目づつコピーしなければなりません。その際、コピーするデータ量が一定ではないため、可変行における変動するコピー開始位置の設定が問題となります。

この手の話でよく出る、vbaの最終行指定offset+count    index+countaはいずれも開始位置が固定した上で、終了位置の変動位置に対応するというものであり、この話には対応できません。
コピーした後、値を合計し(vbaのEnd xlup)追加行を挿入しないといけませんが、(vbaのResize10)
いづれも、検索のみでは、開始位置が変動する場合の話はありませんでした。


そこで、考えた結果、フォーマットを変更することにしました(図3)。項目を列の一つと設定し、それにより開始位置を固定した上でデータを全項目一括でコピーすることにしたのです。
開始位置が固定した上で、データ量が変動する、コピー・合計の話はネット上によくあるので、今それを参考にコーディングしてる最中です。

どう思われますか?この話。かなり無駄があるような気がするのですが・・・・

「可変行における変動するコピー開始位置の設」の質問画像

A 回答 (2件)

画像がぼやけて見えない。

補足で画像を大きく(狭い範囲を)あげることが出来ないなら、別質問したら。
色々書いているが、
ーー
自分の思考過程など長々と書いているが
文章でやりたいことの要点を絞れないのか。
また自分の生のデータ(画像)を質問に使わず、質問に適当な長さの、特徴を盛り込んだ、要点が判るデータを考えること。
ーー
左列や、上行に空白セルがあって、例えばデータの開始行や開始列を知りたいなら、End(xlUp)やEnd(xlDoun)を使えないのか。
例データ
A1:B7
ーは空白セルをあらわす
データ1データ2
ー     -
a      -
bx
cy
ーz
ーu
ーーーー
Sub test01()
r = Cells(1, Columns.Count).End(xlToLeft).Column
'MsgBox r
For j = 1 To r
u = Cells(2, j).End(xlDown).Row
'MsgBox u
'MsgBox Rows.Count
d = Cells(Rows.Count, j).End(xlUp).Row
MsgBox j & "列は" & u & "行から" & d & "行までデータがあります"
Next j
End Sub
こういう問題でなければすみません。無視して。
ーー
表現
>図2と3を見比べてみてください。
>どう思われますか?
問題出題者のような表現になっている。質問する立場なのだから、考えて。
    • good
    • 0
この回答へのお礼

質問の仕方がまずいとわかりました。
文章・データで自分のやりたいことを明確にし
それをスクリプトで記述する。

申し訳ありませんでした

お礼日時:2011/12/21 08:54

画質の問題か、添付の図から質問をうまく読み取れない状態ですが。


「図1にある内容をコピーしたい。図2へのコピーだと面倒なので図3の形式にしたい」ですか?

データを例示してみていただけませんか?
    • good
    • 0
この回答へのお礼

はい、そのとおりです。図2の形式だと1項目づつのコピーなので、データ量によりコピー開始位置が変動してしまい、VBAでその位置を指定するのが困難です。

例)タイプ1(全30件等)のABC(2・2・4等)の値をコピーした後に、タイプ2(全50件等)の  ABCの値をコピーする
  またはタイプ5のABCの値をコピーした後にタイプ4のABCの値をコピーする
  そして最終的に全タイプのコピー、合計(150・180・190等)、不足行の挿入




図の3の形式だと項目名を列の1つとすることになるので、開始位置を固定した上での変動するデータのコピー・合計の話になると思いました。

例)タイプ12345のABCの値を一括でコピー、合計(200件分)、不足行(全200行コピー、不足分50行追加)の挿入

お礼日時:2011/12/19 00:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!