[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別シートへの移動』(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
■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
参考コード
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
ネット検索して見つけたコードや、質問掲示板で提示されたコードをぼーっと眺めてみてもなかなか理解しづらいとおもうので、ステップ実行という方法で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
理解できない場合は一旦断念しようと思います。
(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.