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

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

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

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1127閲覧

VBA 種類別に自動振り分けをしたい

jjyso

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/12/06 23:46

従業員データを参照し、別シートに年齢ごと性別に振り分け、
更に職種を各セルに抽出したいのですが、
検索をしてもなかなかヒットせず、みなさまにお力添えを頂ければと思い質問します。

成果物
下記のシートより「年齢」「職種」「性別」を参照し、
イメージ説明
下記シートにそれぞれの条件ごとセルに「職種」を振り分けしたいです。
イメージ説明
イメージは下記のとおりとなります。
イメージ説明
各年齢性別ごとに最大21人の想定としています。

参考になるページだけでも構いませんので、
どうかご教授お願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

シート名が「職員」と「振り分け」として

vba

1Public Sub sample() 2 Dim data 3 data = Worksheets("職員").Range("A1").CurrentRegion.Value 4 5 Dim tbl(19 To 64, -1 To 0) 6 Dim i As Long 7 For i = 2 To UBound(data) 8 Dim sex As Long: sex = (data(i, 4) = "男性") 9 tbl(data(i, 6), sex) = tbl(data(i, 6), sex) & "," & Left(data(i, 2), 1) 10 Next 11 12 With Worksheets("振り分け") 13 For i = 5 To 50 14 Dim ary, s As String 15 s = Mid(tbl(.Cells(i, "V"), -1), 2) 16 If s <> "" Then 17 ary = Split(StrReverse(s), ",") 18 .Cells(i, "U").Offset(, -UBound(ary)).Resize(, UBound(ary) + 1).Value = ary 19 End If 20 s = Mid(tbl(.Cells(i, "V"), 0), 2) 21 If s <> "" Then 22 ary = Split(s, ",") 23 .Cells(i, "W").Resize(, UBound(ary) + 1).Value = ary 24 End If 25 Next 26 End With 27End Sub

投稿2021/12/07 02:08

hatena19

総合スコア33790

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

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

0

振り分け後の職種がまとまってなくていいのであればこんな感じでしょうか

VBA

1Sub test() 2 3 Dim i As Long, j As Long, k As Long 4 Dim rng As Range, tempRng As Range 5 6 j = 21 7 k = 23 8 9 For i = 19 To 64 10 11 Set rng = Range("F:F").Find(What:=i) 12 13 If Not rng Is Nothing Then 14 15 Set tempRng = rng 16 17 Do 18 If Cells(rng.Row, "D").Value = "男性" Then 19 20 Sheets("別シート").Cells(69 - i, j) = Left(Cells(rng.Row, "B").Value, 1) 21 j = j - 1 22 23 ElseIf Cells(rng.Row, "D").Value = "女性" Then 24 25 Sheets("別シート").Cells(69 - i, k) = Left(Cells(rng.Row, "B").Value, 1) 26 k = k + 1 27 28 End If 29 30 Set rng = Range("F:F").FindNext(rng) 31 32 If rng.Address = tempRng.Address Then 33 Exit Do 34 End If 35 Loop 36 End If 37 38 j = 21 39 k = 23 40 Next 41 42End Sub 43

投稿2021/12/07 01:16

bebebe_

総合スコア504

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問