[[20210226141622]] 『別シートへの移動』(KIRARI) ページの最後に飛ぶ

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

 

『別シートへの移動』(KIRARI)

お世話になります。
色々と検索しても見たのですがどうしてもうまくいかずご教示賜りたく存じます。

内容
仕入先からの購入データを同じセルに入力し、その後、仕入先ごとに振り分ける作業をマクロ化したい

列A、B、C、D、E、F、G、H、I、J、K、L、M

・このA列からM列までを別シートに移動する
 A列には数値が入っています。(例11001、11002など)
・別シートは複数あり、シート名毎に(例11001)と同じA列にある行を移動する
 移動は繰り返すため、空白一番上の列に移動する

説明は以上でございます。
お手数をお掛けしますがよろしくお願い申し上げます。

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


同じセルではなく、同じシートです。

(KIRARI) 2021/02/26(金) 14:36


■1
>マクロ化したい
つまってる部分はどこでしょうか?

■2
レイアウトがよく分かりませんが

 【入力シート】
 _____A________B________C______
 1  仕入先   項目1   項目2
 2   A社      123      456
 3   B社      789      012
 4   B社      789      012
 5   A社      345      678
 6   A社      901      111
 7

       ↓A列の仕入先でそれぞれのシートに振り分け

 【A社】
 _____A________B________C______
 1  仕入先   項目1   項目2
 2   A社      123      456
 3   A社      345      678
 4   A社      901      111
 5

 【B社】
 _____A________B________C______
 1  仕入先   項目1   項目2
 2   B社      789      012
 3   B社      789      012
 4

みたいなことであれば、オートフィルタを使って抽出とコピペを繰り返したり、シート名を条件にしてフィルタオプションで抽出をかければよいのではありませんか?

もしそうであれば「マクロの記録」で必要な命令の大部分はしらべることができますので、トライしてみてはどうでしょうか

(もこな2) 2021/02/26(金) 15:01


(もこな2)様
ありがとうございます。
そもそも、VBAの知識が低く、自分では作れません。
いつも検索して人様が作成したコードを参考する程度なのです。
1つの項目に絞り、別シートに移動すること方法は検索したらありました。
このコードを参考にすればできるかなと思い、いろいろとためしてみましたがダメでした。

参考コード
20110526150540

 Sub Test()
    Dim i As Long, z As Long, y As Long
    Dim sh2 As Worksheet
    Application.ScreenUpdating = False
    With Sheets("Sheet1")
        y = .Range("B" & .Rows.Count).End(xlUp).Row
        z = .Range("F" & .Rows.Count).End(xlUp).Row
        For i = z To 3 Step -1
            If .Cells(i, "F").Value = "済" Then
                y = y + 1
                .Rows(i).Copy Destination:=sh2.Cells(y, 1)
                .Rows(i).Delete
            End If
        Next
    End With

(KIRARI) 2021/02/26(金) 16:51


■3
>このコードを参考にすればできるかなと思い、いろいろとためしてみましたがダメでした。
どのようなことを「いろいろとためして」みたのですか?

ネット検索して見つけたコードや、質問掲示板で提示されたコードをぼーっと眺めてみてもなかなか理解しづらいとおもうので、ステップ実行という方法で1行ずつ実行してみて、どのような動きになるのか(何を命令しているのか、変数には何が入っているのか)などを確認してみると理解しやすくなると思います。

※ステップ実行というのが何を言われているかわからなければ↓を読んでみてください。

 【ステップ実行】
https://www.239-programing.com/excel-vba/basic/basic023.html
http://plus1excel.web.fc2.com/learning/l301/t405.html

 ついでに↓も覚えてしまいましょう。

 【イミディエイトウィンドウ】
https://www.239-programing.com/excel-vba/basic/basic024.html
https://excel-ubara.com/excelvba1/EXCELVBA486.html

 【ローカルウィンドウ】
https://excel-ubara.com/excelvba4/EXCEL266.html
http://excelvba.pc-users.net/fol8/8_2.html

■4
同じ発想で、エクセル君にたたき台となるコードを作ってもらいそれを改造していくというアプローチも有効だとおもいます。
例えば、マクロの記録を開始してから【手作業で】

 (1)オートフィルタを設定する
 (2)A列で仕入れ先(例えばA社)を抽出する
 (3)抽出されたデータをコピーする
 (4)A社のシートに貼付する

という操作をしてから、マクロの記録を終了すると、エクセル君が記録したコードが手に入りますので、そちらをステップ実行してわからない命令をネット検索してみてください。
結果として、

 オートフィルタを設定する命令
 オートフィルタで抽出する命令
 セル範囲をコピーする命令
 (コピーしたものを)貼付する命令

を調べることができるはずです。
ここが理解できてから、A社、B社、C社のように抽出先(と貼付するシート)が切り替わっていく処理(ループ処理といいます)を学べばよいとおもいます。

(もこな2) 2021/02/26(金) 17:43


(もこな2)様
ご指導ありがとうございました。
時間をかけて確認してみます。

理解できない場合は一旦断念しようと思います。
(KIRARI) 2021/03/01(月) 13:36


あんまり言ってもしょうがないのでしょうが、結局「いろいろ」試してはいなかったのではありませんか?

     Sub いろいろためしてみましょう()
        Dim データ行 As Long, 出力行 As Long
        Dim sh2 As Worksheet
        Set sh2 = Worksheets("A社")

        Stop

        With Sheets("入力シート")
            For データ行 = 2 To .Range("A" & .Rows.Count).End(xlUp).Row
                If .Cells(データ行, "A").Value = "A社" Then
                    出力行 = 出力行 + 1
                    .Rows(データ行).Copy Destination:=sh2.Cells(出力行, "A")
                End If
            Next
        End With

     End Sub

 ↑は■2で提示したレイアウトを想定しています。

(もこな2 ) 2021/03/01(月) 13:52


コメント返信:

[ 一覧(最新更新順) ]


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