[[20210603152142]] 『受注残が0以外を別シートに転記』(みっち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『受注残が0以外を別シートに転記』(みっち)

B6からAA〇〇(B6は確定でAAの行数はどんどん追加されるので未定です)までの表があります。

B6からですが4,5行目には結合されているタイトル欄があります。

V?-W?=0とならない行のみを次月のシートに転記するマクロを使用したいです。
?は同一行を表しています。

Vは受注残、Wは今月の販売数なのでV-Wは今月で完納するという意味です。

{=IFERROR(INDEX(R3.9!$A$17:$Z$500,MATCH(LARGE((R3.9!$AA$17:$AA$500="残")*1/ROW(R3.9!$A$17:$A$500),ROWS(R3.9!$A$17:$A32)),1/ROW(R3.9!$A$17:$A$500),0),COLUMNS(R3.9!$A$17:G$17)),"")}

このような関数でやってみたのですがセル一つ一つに式が挿入されるためエクセルが重すぎて話になりませんでした。

出来ればマクロでやりたいのでよろしくお願いします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


こんな感じで教えて頂いき、これ自体は作動しました。

Sub 転記用9月()

Dim myRng As Range
Dim myData As Variant
Dim myUnion As Range
Dim i As Long

Set myRng = Range("B6:AA10000") '表の範囲

myData = Range("V6:W10000").Value '比べる列

For i = LBound(myData) To UBound(myData)
If myData(i, 1) <> myData(i, 2) Then
If myUnion Is Nothing Then '最初に見つかったとき
Set myUnion = myRng.Rows(i)
Else
Set myUnion = Union(myUnion, myRng.Rows(i))
End If
End If
Next i

If Not myUnion Is Nothing Then
myUnion.Copy Worksheets("R3.10").Range("B6") 'コピー先
End If

End Sub

追加したい機能がありお尋ねします。

転記した際に、R列を前月のR列-S列の値に、
       T列をS列に移動
       Y列をT列に移動
としたい場合はどのようにするとよろしいでしょうか??

ちなみにシート名はR3.09とR3.10です。
R3.09からR3.10に受注残のある行のみ移動したい感じです。
(みっち) 2021/06/03(木) 16:49


■1
>こんな感じで教えて頂いき、これ自体は作動しました。
当人同士が納得してるなら、それでよいのかもしれませんが配列に入れることでかえってややこしくなってないですかね

■2
VBAの世界では基本的にシートやセル(オブジェクトといいます)を明示すれば、いちいち選択したりアクティブにしたりする必要はありません。
さらに、「標準モジュール」で「Range("B6:AA10000")」のような書き方をした場合、「ActiveSheet.Range("B6:AA10000")」のようにアクティブシートを指定したものとして扱われます。
また、「Worksheets("R3.10")」のように、ブックを指定しない場合も同様にアクティブブックを指定したものとして見なされるルールです。
今回のケースでは、ブックをまたいだ処理ではないようですが、複数(少なくとも2つ)のシートが登場しますから、想定外のものを対象にしないためにも、対象のオブジェクトは明示したほうがよいとおもいます。

■3
VBAでインデント(字下げ)することにプログラム的な意味はありません。
(インデントが入っていようがいまいがエクセル君は困りません)
一方で、人間が見たときに、適切なインデントが入っていると格段に見やすくなるとおもいます。
よって、こだわりがなければインデントを入れる癖をつけると良いようにおもいます。
(見やすくすることでデバッグ(メンテナンス)作業の効率アップが期待できます)

■4
ということを踏まえて整理するとこんな感じになろうかとおもいます。

    Sub 転記用9月_整理()
        Dim MyRNG As Range, myUnion As Range

        With Worksheets("R3.09")
            For Each MyRNG In .Range("V6:W10000")
                If MyRNG.Value <> MyRNG.Offset(, 1).Value Then
                    If myUnion Is Nothing Then
                        Set myUnion = MyRNG
                    Else
                        Set myUnion = Union(myUnion, MyRNG)
                    End If
                End If
            Next MyRNG

            '▼「myUnion」が空っぽでなければ処理する
            If Not myUnion Is Nothing Then
                Intersect(.Range("B6:AA10000"), myUnion.EntireRow).Copy Worksheets("R3.10").Range("B6")
            End If
        End With       
    End Sub

■5
>追加したい機能がありお尋ねします。

 >R列を前月のR列-S列の値に、
   →前月のR列をコピペした後に、前月のS列の【値】を【減算】で貼り付けすればよいですね

 >T列をS列に移動、Y列をT列に移動
  →よくわかりませんが、B〜AA列を一括してコピペしたらT列もY列も上書きされちゃうので移動もへったくれもないとおもいますよ。
     いやいや、そうでなくコピー元のT列を貼り付け先のS列に変更したいのだという話なら、B〜AA列を一括してコピペするのではなく、
     必要な列範囲ごとに分けて処理しないとダメですよ

(もこな2) 2021/06/04(金) 10:10


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.