質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%

Q&A

解決済

1回答

604閲覧

【Excel】条件に合致するデータ一塊を別シートに抽出して自動的に反映させたい

退会済みユーザー

退会済みユーザー

総合スコア0

0グッド

0クリップ

投稿2021/08/19 09:46

前提・実現したいこと

Excelにて、下図のように全体の表から社員ごとの表に自動的に反映されるようにしたいです。

1列の中に違う情報が入っており、かつその中から欲しい2マスを抽出する方法が上手くいかず悩んでおります。
このような場合、どのような式を使用すれば良いでしょうか?

イメージ説明

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

VBAでいいならこんな方法が考えられます。

VBA

1'ThisWorkbookオブジェクト 2Private Sub Workbook_SheetActivate(ByVal Sh As Object) 3 If Sh.Name = "全体" Then Exit Sub 4 Sh.Range("C4", Sh.Cells.SpecialCells(xlCellTypeLastCell)).ClearContents 5 6 Dim r As Long, col As Range, cell As Range 7 For Each col In Sheets("全体").UsedRange.Columns 8 r = 4 9 For Each cell In col.Cells 10 If cell.Value = Sh.Name Then 11 Sh.Cells(r, cell.Column) = cell.Offset(1) 12 Sh.Cells(r + 1, cell.Column) = cell.Offset(2) 13 r = r + 2 14 End If 15 Next cell, col 16End Sub 17

投稿2021/08/19 11:26

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/08/20 04:16

ご回答ありがとうございます。 VBAはあまりわからず、試しに標準モジュールにコピペしてみましたが上手く動きませんでした。 素人丸出しで申し訳ありませんが、どのようにしたら動くでしょうか?
jinoji

2021/08/20 04:18

標準モジュール(Module1とか)ではなく、ThisWorkbook というモジュールがあるはずですので、そちらにコピペしてみてください。
退会済みユーザー

退会済みユーザー

2021/08/20 06:56

既に表を作っていたところで動いていました。ありがとうございます! ちなみに、表をコピーしたりしたいときはどうしたら良いでしょう? 今のところは適当な文字を入れて式を崩して一時的に無効にしております。
jinoji

2021/08/20 08:04

一時的であればそのやり方でもいいしコードの各行に ' を入れてコメント化するのでもいいと思います。 また、いまはシートを切り替えるたびに動くようになっていますが、 もしかしたらボタンを押したら動く形に変えた方がいいかもしれません。
退会済みユーザー

退会済みユーザー

2021/08/20 08:22

なるほど、用途的にはボタンを付けることも検討して良さそうですね。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2021/08/20 10:27

すみません、再度の質問で申し訳ありません。 最後にお聞きしたいのですが、上記式にて反映先のシート名を参照しているのはどの部分になるでしょうか? 実際には、シート”全体”内の社員A等の名称と抽出して反映するためのシート名が若干変わってくるので、そこを自分で変更できるようにしたいと思っております。
jinoji

2021/08/20 10:56

If cell.Value = Sh.Name Then の行の、Sh.Name の部分がシート名です。
退会済みユーザー

退会済みユーザー

2021/08/21 14:12

ありがとうございます。 例えば「正社員A」や「契約社員B」などをシート名に使用したい場合はどのように追加いたしますか?
jinoji

2021/08/21 14:23

シート名は「正社員A」で、全体シートのセル上は「社員A」になっている場合、ということですか? もしそうなら、正社員AシートのA1セルあたりに「社員A」と入れておいて、 If cell.Value = Sh.Range("A1").Value Then とかでしょうか。
退会済みユーザー

退会済みユーザー

2021/08/26 01:35

切り替わりました。ありがとうございます。 気づいたのですが、元シートの社員A等を消したり書き換えたりしても反映先のデータは一緒に消えないのですね。 一応、使用日と個数を先に消してから使った人を消すことで可能ですが、他に何か良い方法はないでしょうか。 最後と言いつつ何度も聞いてしまって申し訳ありません。
jinoji

2021/08/26 04:29

あれ、書き換えたあとにシートを切り替えれば反映される気がしますが、、、 まあ、どんなときにどんな使われ方をするのかをあまりわからないまま書いたコードなので、 今一つ気が利いていないところもあるかとは思います。すみません。 ですので、もし今後手を加えていくなら、 そのあたりのところを改めて整理してみるのがいいと思います。頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問