プロが教える店舗&オフィスのセキュリティ対策術

VBA初心者です。初歩的なことですが、ご教授いただきたく存じます。
【完了】とE列に記載してある行を切り取って別シートの一番下(値が入っている行の下)に貼り付けを実行したいのですが、現在の様に行を指定するやり方は理解したのですが、
月毎に貼り付け先の行数が変わっていくので、値が入っている値のすぐ下に貼り付けとVBAを組みたいのですがうまく行きません。
下記のコードを変更して処理をしたいのですが、やり方をご教授していただけると嬉しいです。

'完了行のコピー
Private Sub copy_compline()
Dim wrow As Long
Dim wrow3 As Long
wrow3 = maxrow_sz
For wrow = 3 To maxrow_ms
If ms.Cells(wrow, "E").Value = "完了" Then
sz.Range("A" & wrow3 & ":E" & wrow3).Value = ms.Range("A" & wrow & ":E" & wrow).Value
wrow3 = wrow3 + 1
End If
Next
End Sub

A 回答 (3件)

こんにちは


maxrow_sz この変数はどこで代入されているのでしょう?
想像の範疇になりますが、
もし、maxrow_sz=sz.Cells(Rows.Count, "E").End(xlUp).Row
(EはAかも知れない)だった場合、値のあるセルになってしまうので
その下を指定したいのなら 変数は行№で使用しているので+1すれば良いと思います。
ご質問のコードの場合、(色々やり方はあるけれど例として)
wrow3 = wrow3 + 1 と実行後されているので これを実行前に
書き直せば良いかと

If ms.Cells(wrow, "E").Value = "完了" Then
wrow3 = wrow3 + 1
sz.Range("A" & wrow3 & ":E" & wrow3).Value = ms.Range("A" & wrow & ":E" & wrow).Value
’実行前に移す
End If
    • good
    • 0

入力されてる一番下のセルを検出するマクロは、結構基本的なアルゴリズムがあります。



対象の列の一番最後のセルから上に向かって入力が有るかを調べるのです。

・・・

というか、マクロでなくても良いと思うんだ。
 Ctrl+↓キー 
を押すと連続した範囲の一番下のセルにジャンプする。
もう一度
 ↓キー
を押せばその下のセルを選択できる。
マジでこんだけ。マクロなんていらない。

・・・余談・・・

このようにマクロに頼らなくても、標準の機能で対応できれば
こんなところで
 「代わりにマクロを作ってください。オレ様の成果として使ってやるwww」
なんて投稿をしなくても済みますよ。

なお、ここは自力でマクロを作るためのアドバイスを受ける場所です。
「代わりに作ってください」と作業依頼をする場所ではありません。
もしも
 「御託は良いから、マクロのコードを寄こせ」
という事でしたら、有料サイトで作業委託することをお勧めします。
この程度の物でしたら、ワンコインで引き受けてくださると思いますよ。
(1000円分程度の無料券が毎月配られるようなサイトがあるので、そういうサイトを利用すると良いでしょう)
    • good
    • 1

こんにちは



なんだか変ですね。
変数の初期設定もされていないようですし・・・
グローバル変数になっているのでしょうかね、それでメインから呼ばれるサブルーチンなのかな??

>月毎に貼り付け先の行数が変わっていくので、
どこが月ごとの処理なのかも不明です。

通常、最終行を求める場合は、基準となる列(=必ず値が入っている列)に対して
 Cells(Rows.Count, n).End(xlup)
などで求めることができます。(nは列番号)
その次の行なら、.Offset(1) としておくとか。

あるいは、空白セルが混じっている可能性があるような場合などでは、シートのUsedRange の次の行を求める方法でも代用できるかも知れません。
    • good
    • 0

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