■ いきさつ
ある日、「よくわかる Microsoft Excel2010基礎」(FOM出版)の第8章「データベースの利用」の表
とりあえず開催日を 2014年に変えて、区分の担当者に配ってくれ。検討させる...と言ってきた... とする。
§1.開催日を 2014年に変える
「26行もある。手で修正するのも面倒だなぁ〜」「マクロを作ってみよう」と着手した。
- Public Sub 選択範囲の年を2014にする()
- Dim mbTitle As String
- Dim i As Long, newYear As Long
- Dim datDate As Date
- Dim strAns As String
- mbTitle = "選択範囲の年を2014にする/" & ThisWorkbook.Name
- '来年を作る。
- newYear = Year(Date) + 1
- '新しい年の入力を求める。
- Do
- strAns = InputBox("新しい年を入力してください。", mbTitle, newYear)
- If strAns = "" Then 'キャンセル時
- Exit Sub
- ElseIf IsNumeric(strAns) Then
- newYear = Val(strAns)
- Exit Do
- End If
- Loop
- '選択したセルが日付型であれば、年をnewYearに変える。
- '但し、2月29日になると戻せない。
- For i = 1 To Selection.Count
- If IsDate(Selection(i)) Then
- datDate = Selection(i)
- Selection(i) = DateSerial(newYear, Month(datDate), Day(datDate))
- End If
- Next
- End Sub
§3.担当者シートを作り区分の入力規制を行う
- シート「担当者」を作り、
- B2〜B4 の名前を“区分”とした。(入力規制の管理を容易にするため)
- F列に入力規制を掛ける。
- F列を選択する。
- [データ]タブ/データツールGr.の[データの入力規制]をクリック、
- [データの入力規制]をクリックする。
- 右図を入力し、
- [OK]
- ついでに‥‥ 「区分」に増減が生じた時は、
§4.区分別のシートに貼り付ける
マクロ化に備え、上記手順のマクロを記録した。今後、課題を整理する予定。
- Sub 区分で絞り込んでコピペする()
- Range("C5").Select
- ActiveWorkbook.Worksheets("開催状況").Sort.SortFields.Clear '古い並べ替え基準のクリアー
- ActiveWorkbook.Worksheets("開催状況").Sort.SortFields.Add _
- Key:=Range("C5:C30"), _ '並べ替えの基準セルで必須
- SortOn:=xlSortOnValues, _ 'セル内のデータで並べ替え
- Order:=xlAscending, _ '昇順
- DataOption:=xlSortNormal '数値と文字列を別々に並べ替える
- With ActiveWorkbook.Worksheets("開催状況").Sort
- .SetRange Range("B4:K30")
- .Header = xlYes
- .MatchCase = False
- .Orientation = xlTopToBottom
- .SortMethod = xlPinYin
- .Apply
- End With
- Range("B5").Select
- Selection.AutoFilter
- ActiveSheet.Range("$B$4:$K$30").AutoFilter Field:=5, Criteria1:="就職"
- Range("B9").Select
- Selection.CurrentRegion.Select
- Selection.Copy
- Sheets("就職").Select
- Range("B4").Select
- ActiveSheet.Paste
- Range("L5").Select
- Application.CutCopyMode = False
- Selection.AutoFill Destination:=Range("L5:L12")
- Range("L5:L12").Select
- Range("B5").Select
- End Sub
Office Tanaka によれば、Excel2007 以降変わったようだ。
Excel2003 以前を使っている方には参考にならないかも知れないので、とりあえず、これで止めておく...