前提・実現したいこと
excelで追加されていく名簿を別シートで部ごとに分類して表示したいです。
【sheet1】
営業部,山田
経理部,田中
営業部,鈴木
↓イベント発生(ボタンクリック等)
【sheet2】
営業部,経理部,財務部
山田,田中
鈴木
sheet1に人を追加する度、sheet2で列ごと(部ごと)に分類して表示したいです。
部の名前や数は既に決まっていることを前提としています。
試したこと・発生している問題・エラーメッセージ
2次元配列の各行の各部署のメンバー名を格納できたのですが、
新たな人員を追加する際いれる配列の場所を決める作業が
無駄が多いように感じています。
各行それぞれ別で列の数を決めるようなジャグ配列などを使うことで、
無駄を省くことができれば嬉しく思っております。
方法にこだわりはございませんので、効率の良い方法について
なにかアドバイスいただけましたら幸いです。
vba
1Sub click() 2 3'部のリスト 4 Dim n_category As Integer 5 n_category = 3 6 Dim list_category() 7 ReDim list_category(n_category, 2) 8 list_category(0, 0) = "営業部" 9 list_category(1, 0) = "経理部" 10 list_category(2, 0) = "財務部" 11 Dim i 12 For i = 0 To n_category 13 list_category(i, 1) = 0 14 Next 15 16 '名前分類の配列(list_category(0)営業部の人を0行に格納) 17 Dim strArray() 18 '3行1列の配列を用意 19 ReDim Preserve strArray(n_category, 0) 20 For i = 0 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 'sheet1 rows 21 Dim j 'type of category 22 For j = 0 To n_category - 1 23 If (Cells(i + 1, 1) = list_category(j, 0)) Then 24 list_category(j, 1) = list_category(j, 1) + 1 25 Dim size, k 26 size = 0 27 For k = 0 To n_category - 1 28 If (list_category(k, 1) > size) Then 29 size = list_category(k, 1) 'decide Column size 30 Cells(i + 1, 3) = size 31 End If 32 Next 33 ReDim Preserve strArray(n_category, size) 34 strArray(j, list_category(j, 1) - 1) = Cells(i + 1, 2) 35 36 Exit For 37 End If 38 Next 39 Next 40 41 For i = 0 To n_category - 1 42 Worksheets("Sheet2").Cells(1, i + 1) = list_category(i, 0) 43 Next 44 45 For i = 0 To n_category - 1 46 For j = 0 To size - 1 47 Worksheets("Sheet2").Cells(j + 2, i + 1) = strArray(i, j) 48 Next 49 Next 50End Sub
名簿の部署名によって分類していく際に、
入れるべき配列の場所(任意の部署行の最終列の次)を特定するのが楽なのかと思い
コメントにてお教えいただいたジャグ配列が適当なのかと考えておりました。
具体的には既に配列が以下のような時、
営業部(0行目) 山田,鈴木
経理部(1行目) 田中
財務部(2行目)
「経理部 佐藤」を追加する際、配列の箇所指定はどのようにするのが好ましいでしょうか。
ちなみにこの度はsheet2に部署ごとの並びとして貼り付け、
事前にその範囲を名前の定義しておいたリストを別の場所でドロップダウンリストとして用いる予定です。
回答4件
あなたの回答
tips
プレビュー