- ベストアンサー
短くする勤務割表の式づけについて
- 月間の勤務割表を作成しています。列に日付、行を個人名とし、勤務の割り振り状態を表示します。
- 1人-1日分の式は短くできますが、16人-31日分までの式を簡単にする方法がわかりません。
- Windows7とOffice2010を使用しています。名前の定義は、勤務1、日勤、公などで設定しています。教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>ちなみに Fox&Nextは、私も試行錯誤してやりましたが駄目でした。 どこがどうダメだったんでしょう? 全文を書くと、下記のようになります。 Sub 名前の定義の貼付け() Dim addrname_workpattern As String For i = 1 To 16 For j = 1 To 31 addrname_workpattern = "" With Worksheets("メイン・2") Select Case .Cells(70 + (i - 1) * 2, 5 + (j - 1) * 3).Value Case 1: addrname_workpattern = "勤務1" Case 2: addrname_workpattern = "勤務2" Case 3: addrname_workpattern = "勤務3" Case 4: addrname_workpattern = "日勤1" Case 5: addrname_workpattern = "日勤2" Case 6: addrname_workpattern = "日勤3" Case Else Select Case .Cells(71 + (i - 1) * 2, 4 + (j - 1) * 3).Value Case 1: addrname_workpattern = "日勤4" Case Else Select Case .Cells(70 + (i - 1) * 2, 4 + (j - 1) * 3).Value Case 2: addrname_workpattern = "明け" Case 3: addrname_workpattern = "日勤" Case 4: addrname_workpattern = "夜勤" Case 5: addrname_workpattern = "公" Case 6: addrname_workpattern = "有" Case 7: addrname_workpattern = "振" Case 8: addrname_workpattern = "特" Case 9: addrname_workpattern = "欠" End Select End Select End Select End With If addrname_workpattern <> "" Then ActiveSheet.Range(addrname_workpattern).Copy Cells(7 + i, 4 + (j - 1) * 3).PasteSpecial Application.CutCopyMode = False End If Next Next End Sub
その他の回答 (1)
- nag0720
- ベストアンサー率58% (1093/1860)
コードを書くのは面倒なので、やり方だけ。 For文を使って、16人分と31日分を繰り返す。 For i=1 to 16 For j=1 to 31 処理 Next Next Rangeの代わりに、Cellsを使う。 例えば、Rande("E70")は、Cells(70,5)と同じです。 1人目の1日目(i=1, j=1)なら、Cells(70+(i-1)*2,5+(j-1)*3) とする。
補足
真夜中のお疲れのところご回答ありがとうございます。どうしてもうまくいきませんので、マクロの式全体をコピペして必要な箇所を修正して16人31日分(496回分)のマクロを作成しそのマクロを一括処理するマクロを作成しやろうかと思います。 ちなみに Fox&Nextは、私も試行錯誤してやりましたが駄目でした。
お礼
ありがとうございます。若干の修正を加えて下記の式で事なきを得ました。寝ぼけていて回答の補足に返事をしてしまったにもかかわらずわざわざご丁寧に再度ご回答いただけるとは器の大きさを痛感しました。お陰様で手間が省けました。 重ね々厚くお礼を申し上げます。 Sub 名前の定義の貼付け() Application.ScreenUpdating = False Dim i As Integer Dim j As Integer For i = 1 To 16 For j = 1 To 31 Dim addrname_workpattern As String addrname_workpattern = "" With Worksheets("メイン・2") Select Case .Cells(70 + (i - 1) * 2, 6 + (j - 1) * 3).Value Case 1: addrname_workpattern = "勤務1" Case 2: addrname_workpattern = "勤務2" Case 3: addrname_workpattern = "勤務3" Case 4: addrname_workpattern = "日勤1" Case 5: addrname_workpattern = "日勤2" Case 6: addrname_workpattern = "日勤3" Case Else Select Case .Cells(71 + (i - 1) * 2, 5 + (j - 1) * 3).Value Case 1: addrname_workpattern = "日勤4" Case Else Select Case .Cells(70 + (i - 1) * 2, 5 + (j - 1) * 3).Value Case 2: addrname_workpattern = "明け" Case 3: addrname_workpattern = "日勤" Case 4: addrname_workpattern = "夜勤" Case 5: addrname_workpattern = "公" Case 6: addrname_workpattern = "有" Case 7: addrname_workpattern = "振" Case 8: addrname_workpattern = "特" Case 9: addrname_workpattern = "欠" End Select End Select End Select End With If addrname_workpattern <> "" Then ActiveSheet.Range(addrname_workpattern).Copy Cells(7 + i, 5 + (j - 1) * 3).PasteSpecial Application.CutCopyMode = False End If Next Next Application.ScreenUpdating = True End Sub