[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『一覧からシートを順番に作成し、一覧から値を取得し張り付ける(VBA)』(marco3)
Excel初心者です。
『賃金一覧』シートに社員一覧があり、社員一覧全員分のシートを『原本』シートをコピーして追加作成したいと思ってます。
・追加シートについて、シート名は一覧の「シート名」とする。
・一覧全員分の追加シートを作成する。
(『原本』シートをコピーしてシート後ろに順番に追加する)
・一覧から「氏名」「ID」「基本給」等の情報を追加したシートのセルに順番にいれたい。
どうしたらいいか分からないので教えてほしいです。
ちなみに
★【賃金一覧】シート内の社員一覧は
A列:ID
B列:氏名
C列:シート名
D列:基本給
という作りになっており、社員増減します。
★追加シートへの各値のセルは下記のとおりです。
・ID:M2
・氏名:T2
・基本給:AI1
よろしくお願いします。
< 使用 Excel:Excel2013、使用 OS:Windows8 >
一例です。
Sub Sample() Dim c As Range Dim shn As String
Application.ScreenUpdating = False
With Sheets("賃金一覧") For Each c In .Range("A2", .Range("A" & Rows.Count).End(xlUp)) shn = c.Offset(, 2).Value Application.DisplayAlerts = False On Error Resume Next Sheets(shn).Delete On Error GoTo 0 Application.DisplayAlerts = True Worksheets("原本").Copy After:=Worksheets(Worksheets.Count) DoEvents 'おまじない With Worksheets(Worksheets.Count) .Range("M2").Value = c.Value .Range("T2").Value = c.Offset(, 1).Value .Range("AI1").Value = c.Offset(, 3).Value .Name = shn End With Next End With
End Sub
(β) 2017/01/13(金) 19:50
一点追加の質問なのですが、このマクロは一覧表全員分を作成しますが、指定した社員IDの方のシート1枚のみ追加作成する時はどうするのがいいでしょうか?
メッセージボックスを表示させて社員IDを入力させて…
というやり方しか思いつかないのですが、その場合のコードを教えてほしいです。
(marco3) 2017/01/14(土) 08:56
多くのメンバから1つ選ぶならコンボボックスやリストボックスを用意して、そこから選択させるとか あるいは、当該行を選択して実行ということも考えられますが、社員IDを入力して処理するとして、一例です。
★状況依存になっていたコードが1つあったので修正しました。(1/15 10:20)
ところで、どこかのシートのどこかのセルに入力規則で社員IDのリストを設定しておき そこを選んだ時に自動実行 というやりかたもありますね。
Sub Sample2() Dim c As Range Dim shn As String Dim id As Variant
id = Application.InputBox("作成する社員IDを指定してください", Type:=2) If id = False Then Exit Sub 'キャンセルボタン
Set c = Worksheets("賃金一覧").Columns("A").Find(What:=id, LookAt:=xlWhole) If c Is Nothing Then MsgBox "指定の社員IDはありません" Exit Sub End If
shn = c.Offset(, 2).Value
Application.DisplayAlerts = False On Error Resume Next Sheets(shn).Delete On Error GoTo 0 Application.DisplayAlerts = True
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count) DoEvents 'おまじない With Worksheets(Worksheets.Count) .Range("M2").Value = c.Value .Range("T2").Value = c.Offset(, 1).Value .Range("AI1").Value = c.Offset(, 3).Value .Name = shn End With
End Sub
(β) 2017/01/14(土) 09:45
思い付きでコメントした入力規則でのID選択と自動実行の処理例です。 以下のコードでは 入力規則セルを 賃金一覧の F1 にしています。 ここは★のところを変更すれば どのシートのどのセルでもOKです。
なお、入力規則はマクロ内で自動的に設定しています。
すべてを ThisWorkbookモジュールに貼り付け、一度保存して閉じたうえで開き直してください。
Option Explicit
Const LISTNM As String = "賃金一覧" Const TPLTNM As String = "原本" Const RULEAD As String = LISTNM & "!F1" '★入力規則設定セル
Private Sub Workbook_Open() RuleSet End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = LISTNM Then If Not Intersect(Target, Sh.Columns("A:D")) Is Nothing Then RuleSet End If If Sh.Name = Range(RULEAD).Parent.Name Then If Not Intersect(Target, Range(RULEAD)) Is Nothing Then MakeSh End If End Sub
Private Sub RuleSet() Dim ad As String
With Sheets(LISTNM) ad = "=" & .Range("A2", .Range("A" & Rows.Count).End(xlUp)).Address(External:=True) End With
With Range(RULEAD).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=ad .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With
End Sub
Private Sub MakeSh() Dim c As Range Dim shn As String Dim id As Variant
If IsEmpty(Range(RULEAD)) Then Exit Sub
id = Range(RULEAD).Value
Set c = Worksheets(LISTNM).Columns("A").Find(What:=id, LookAt:=xlWhole) If c Is Nothing Then MsgBox "指定の社員IDはありません" Exit Sub End If
Application.EnableEvents = False
shn = c.Offset(, 2).Value
Application.DisplayAlerts = False On Error Resume Next Sheets(shn).Delete On Error GoTo 0 Application.DisplayAlerts = True
Worksheets(TPLTNM).Copy After:=Worksheets(Worksheets.Count) DoEvents 'おまじない With Worksheets(Worksheets.Count) .Range("M2").Value = c.Value .Range("T2").Value = c.Offset(, 1).Value .Range("AI1").Value = c.Offset(, 3).Value .Name = shn End With
Application.EnableEvents = True
End Sub
(β) 2017/01/15(日) 10:58
今まで、手作業で毎月行っていた時間を考えると本当にびっくりするほど簡易的になりました。
自分でも本を片手に調べていたのですが、何分組み立て方が全然できず、教えていただいたコードを見ると何となく何をしているのかが分かるけど、作り上げることができないという致命的な悩みで半年うろうろしてました。
入力規制セルの参考は分からないところがあるので、またじっくりコードなど見比べながら勉強させて頂きます。
本当にありがとうございました。
(marco3) 2017/01/16(月) 15:08
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.