[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数シートから検索し、結果を貼り付けたい』(ゆき)
給与一覧表での質問です。VBAを使用して処理をしたいと思っています。
1月、2月、3月とシートが12個あり、各シートには
A |B |C
社員コード |名前 |給与情報
といった感じで情報が載っています。
短期アルバイトが多いため、列は変動があります。
したいこと
1.シート1(1〜12月ではない別のシート)のA1セルに「名前」を入力すると、1〜12月のシートから「名前」の「行」をコピーする
2.シート1のA3からA4、A5といった風に順に貼り付けていく。
3.欲を言えば「シート名」をA3行、貼り付けをA4行とできれば最高です。
4.名前は1月、3月、6月といった風にとびとびの場合もあります。
ご教授いただけると助かります。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
>列は変動があります。
どのように変動するんでしょうか?
>2.シート1のA3からA4、A5といった風に順に貼り付けていく。
わからないけどこういうこと?
社員コード 名前 1月 2月 3月・・・・
00001 山田 1000 1000
00001 鈴木 2000 2000
>3.欲を言えば「シート名」をA3行、貼り付けをA4行とできれば最高です。
>4.名前は1月、3月、6月といった風にとびとびの場合もあります。
ちょっと意味がよく理解できませんでした。
具体例(レイアウト?)をあげてもらえると理解できるかもです。
(もこな2) 2018/06/12(火) 11:32
>列は変動があります。
1月は勤務が30人、2月は40人、3月は30人といった形での変動になります。
>2.シート1のA3からA4、A5といった風に順に貼り付けていく。
シート1のA1セルに「山田」と入力すると
A |B |C
001 |山田 |給与情報 (1月分のシートから抜粋)
001 |山田 |給与情報 (2月分のシートから抜粋)
001 |山田 |給与情報 (4月分のシートから抜粋)
001 |山田 |給与情報 (6月分のシートから抜粋)
…
といった形にしたいです。
(ゆき) 2018/06/12(火) 11:37
とりあえず、列と行の書き間違えだとして、マクロで各月ごとのデータを一旦シート1に集約(コピー)してから、抽出についてはフィルタオプション機能を使ってみるという方向で考えてみてはどうでしょうか
(もこな2) 2018/06/12(火) 12:23
1枚のシートに全部のデータをまとめてしまえば、
フィルターで絞り込んで、「見る」ことが可能です。
手動ですべてやってもそんなに苦になる作業ではないと思いますが、
いかがでしょうか。
で、その手順を自動化することで、いつも間違いなく素早く行うことが可能になります。
そして、その手順をエクセル君が解る言葉(=VBA)で書いてやると、
エクセル君はその通りに動いてくれます。
なので、
ただで誰かにアプリを作ってもらうつもりじゃなくて、
自分で作れるようになりたいと思っているのであれば、
まずは手動でのやり方を覚えて、
その操作を、マクロの記録という機能でVBAのコードに変換してみるところから、
マクロに入ってみてはいかがでしょうか?
それと並行して、入門書を読むなり、Webで入門系のサイトを見るなりして、
ある程度基礎も身に着ける必要があると思います。
(まっつわん) 2018/06/12(火) 12:36
マクロで処理したいのであれば、ステップ実行等をして研究してみて、使えそうな部分があったらその部分だけ、ご自身のコードに組み込んでください。
Sub Sample() Dim WS As Worksheet Dim srcRNG As Range, dstRNG As Range
Stop '←ブレークポイントの代わり
With ThisWorkbook.Worksheets("シート1") .Range("A5:D5").Value = _ Array("社員コード", "名前", "給与情報", "由来シート")
Set dstRNG = .Range("A6") End With
For Each WS In ThisWorkbook.Worksheets If WS.Name <> dstRNG.Parent.Name Then Set srcRNG = Intersect(WS.UsedRange, WS.Range("A:C"))
If Not srcRNG Is Nothing Then srcRNG.Copy dstRNG dstRNG.Offset(0, 3).Resize(srcRNG.Rows.Count, 1).Value = WS.Name Set dstRNG = dstRNG.Offset(srcRNG.Rows.Count, 0) End If End If Next WS
(もこな2) 2018/06/12(火) 13:49
まとめシートに膨大なデータが残るのでそれの処理方法をどうすべきかまだ勉強すべきことが多々ある気がします。
もこな2様のマクロを今拝見したので、自分に落とし込めないか確認しながら勉強していきたいと思います、ありがとうございました!
Sub test()
Dim i As String
i = Sheets("まとめ").Range("A1") 'i=まとめシートのA1へ人名を記入するため
Dim tuki
tuki = 1
Dim LstRow1 As Long
Dim LstRow2 As Long
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "結果"
'「結果」シートを最後尾に作成
For tuki = 1 To 12
'最終行の取得
LstRow1 = Worksheets(tuki & "月分").Cells(Rows.Count, 1).End(xlUp).Row LstRow2 = Worksheets("まとめ").Cells(Rows.Count, 1).End(xlUp).Row
'タイトル行を除き、まとめへコピー、貼り付け
Worksheets(tuki & "月分").Range("A2:U" & LstRow1).Copy Worksheets("まとめ").Range("A" & LstRow2).Offset(1, 0).PasteSpecial xlPasteAll
Next tuki
With Sheets("まとめ").Range("B10")
.AutoFilter Field:=2, Criteria1:=i
.CurrentRegion.Copy Sheets("結果").Range("A1")
End With
'フィルターしてiを抽出、結果に貼り付け
End Sub
(ゆき) 2018/06/12(火) 17:12
Sub Sample1() Dim i As Long
For i = 1 To Worksheets.Count If Worksheets(1).Name <> "まとめ" And Worksheets(1).Name <> "結果" Then '処理 End If Next i End Sub
Sub Sample2() Dim ws As Worksheet
For Each ws In Worksheets If ws.Name Like "*月分" Then '処理 End If Next ws End Sub (もこな2) 2018/06/14(木) 07:56
今更の返信で申し訳ありません。
下のマクロで1〜6月までの状態で無事処理することができました!!!
For Each ws In Worksheets If ws.Name Like "*月分" Then '処理 End If
こちらの処理は初めて知りました。勉強になります……!
思いつきもしなかったので本当にありがたいです!
また質問させていただくことがあるかもしれませんが、よろしくお願いします!
(ゆき) 2018/06/19(火) 10:39
For Each〜Nextステートメント
・https://www.vba-ie.net/statement/foreachnext.html
Like演算子
・http://officetanaka.net/excel/vba/tips/tips35.htm
(もこな2) 2018/06/19(火) 12:48
まだまだ入門書を1冊読み切った程度で知らないことが多いので、本当に参考になります…!
Like演算子は否定もできるということで、できることの幅が広がりそうです…!
For〜Nextは普段よく使用していたのですが、For Each〜Nextは初めて使用します。
リンク先の文章をよく読んで使用していきたいと思います。ありがとうございます!
(ゆき) 2018/06/19(火) 13:15
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.