- 締切済み
EXCELの技(マクロ・VBA)についての質問
EXCELについてお知恵を拝借できればと存じます。 以下のようなEXCELの社員データベースを取り扱っているのですが、 これをマクロやVBAを使って部署別にシート分けしたいと思っております。 また、出来ればシート名も自動で部署名に出来ればと思っています。 下の例では3つの部署しかないので、手作業でやってもすぐ出来るのですが、実際はもっと30近い部署がありますので、これを自動化できたらと思っている次第です。 マクロやVBAは全くのシロウトなため、分かられる方がいらっしゃいましたらお助けいただけますと幸いです。 どうぞよろしくお願い致します。 ◆社員データベース例 A列 B列 氏名 部署 山田子花 ○○部 板飯雄太 ○○部 鈴木郎一 ××部 山下太市 ××部 山藤呂歌 △△部 今田五郎 △△部 ・ ・ ・ ◆部署別にシートを簡単に分けたい。(シート名は部署名) sheet1→○○部 山田子花 ○○部 板飯雄太 ○○部 sheet2→××部 鈴木郎一 ××部 山下太市 ××部 sheet3→△△部 山藤呂歌 △△部 今田五郎 △△部
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- n-jun
- ベストアンサー率33% (959/2873)
既に、 >sheet1→○○部 と言うシートが存在しているとエラーになります。 シートは存在していないとするなら、 Sub try() Dim myDic As Object Dim ws As Worksheet Dim i As Long Dim v As Variant, myKey As Variant Set myDic = CreateObject("Scripting.Dictionary") Application.ScreenUpdating = False With Worksheets("Sheet1") '元のデータのあるシート名に変更 v = .Range(.Range("B2"), .Cells(Rows.Count, 2).End(xlUp)) For i = 1 To UBound(v, 1) myDic(v(i, 1)) = Empty Next For Each myKey In myDic.keys Worksheets.Add After:=Worksheets(.Index) Set ws = ActiveSheet ws.Name = myKey .Range("A1").AutoFilter 2, myKey .Range(.Range("A2"), .Cells(Rows.Count, 2).End(xlUp)).Copy ws.Range("A1") .AutoFilterMode = False Next End With Application.ScreenUpdating = True Set myDic = Nothing Erase v End Sub こんな感じとか。
- hige_082
- ベストアンサー率50% (379/747)
ここは、丸投げは禁止されていますので #2さんが言われてるように まずは、マクロの記録で記録を取り 自分で勉強して、どうしても分らない部分を質問されてはと思います Sheet1のB列にある文字列がシート名にあるかどうか 確認のみのサンプル Sub test1() Dim i As Integer, ii As Integer For i = 1 To Range("b65536").End(xlUp).Row For ii = 1 To Worksheets.Count + 1 If ii = Worksheets.Count + 1 Then Sheets.Add(, Worksheets(Worksheets.Count)).Name = Worksheets("sheet1").Cells(i, 2).Value MsgBox Worksheets(ii).Name & "シートは存在しません" & vbCr & "新規作成しました" Exit For ElseIf Worksheets("sheet1").Cells(i, 2).Value = Worksheets(ii).Name Then MsgBox Worksheets(ii).Name & "シートは存在します" Exit For End If Next ii Next i End Sub 参考まで
- kmetu
- ベストアンサー率41% (562/1346)
> 今までオートフィルタでやっていたのですが、それでも30部署くらいやっていると単純作業で手間だと感じてしまいます。 今回だけの作業だと思っていたのですが違うのですね失礼しました。 マクロの記録で一連の動作を記録させて、次回からそのマクロで対応してみればいかがでしょう。
- kmetu
- ベストアンサー率41% (562/1346)
マクロを利用しなくてもオートフィルタで部署ごとに表示してコピー&ペーストすればそれほど手間はかからない(マクロをタイプしてる間に出来る)と思いますよ
お礼
ご回答大変ありがとうございます。 今までオートフィルタでやっていたのですが、それでも30部署くらいやっていると単純作業で手間だと感じてしまいます。 できればマクロなどを登録しておいて自動化できたらと思っております。 また何かいいお知恵がございましたらどうぞよろしくお願いします。