月間の勤務割表を作成しています。
1列3行を一枡として一人・一日の枡とし、勤務の割り振り状態を表示するものです。
列に日付、行を個人名(max16名)とし1列3行を名前の定義で15種類作成してあります。
同じシートの各セルの入力番号(2行3列を一升)でに応じて15種類を貼り付けていますが、1人-1日分は、式を短くできたのですが、16人-31日分までの式を簡単にできませんでしようか?この式を496回分作るのは、難儀ですので。
お教えくださいませんでしょうか?勉強不足でこれが限界です。
尚名前の定義は、1行3列に1--で勤務1・""-""で日勤・""公休""で公等にしてあります。
OS Windows7 Office2010
Sub 名前の定義の貼付け() '1人-1日分
Dim addrname_workpattern As String
addrname_workpattern = ""
With Worksheets("メイン・2")
Select Case .Range("E70").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 .Range("D71").Value
Case 1: addrname_workpattern = "日勤4"
Case Else
Select Case .Range("D70").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
Range("D8").PasteSpecial
Application.CutCopyMode = False
End If
End Sub
Sub 名前の定義の貼付け() '16人-31日分
Dim addrname_workpattern As String
addrname_workpattern = ""
With Worksheets("メイン・2")
Select Case .Range("CQ100").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 .Range("CP101").Value
Case 1: addrname_workpattern = "日勤4"
Case Else
Select Case .Range("CP100").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
Range("CP23").PasteSpecial
Application.CutCopyMode = False
End If
End Sub
No.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
ありがとうございます。若干の修正を加えて下記の式で事なきを得ました。寝ぼけていて回答の補足に返事をしてしまったにもかかわらずわざわざご丁寧に再度ご回答いただけるとは器の大きさを痛感しました。お陰様で手間が省けました。
重ね々厚くお礼を申し上げます。
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
No.1
- 回答日時:
コードを書くのは面倒なので、やり方だけ。
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は、私も試行錯誤してやりましたが駄目でした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) いつもお世話になります 下記のコード実行すると エラーになります わかるかた教えてくれませんでしょう 6 2022/12/17 15:01
- Visual Basic(VBA) select caseの入れ子 3 2023/03/08 18:48
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) ワークシートチェンジで曜日を表示する方法 1 2023/03/04 21:51
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) Excelのマクロについて教えてください。 3 2022/06/30 09:36
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ホームレスの日雇い仕事はどこ...
-
夜勤のある営業
-
夜勤のある接客業って何がある...
-
皆さん、おはようございます♪ ...
-
夜職勤務をしており接客業とか...
-
ファミマのタイムスキャン(?)に...
-
時計修理技能士の資格
-
自動販売機について質問させて...
-
工場の夜勤業務ってどういうこ...
-
警察官の勤務体系なんですけど。
-
三交代制の工場の仕事に誘われ...
-
海上自衛隊の階級について知り...
-
タクシーの夜勤 (約12時間勤務...
-
介護福祉士受験資格のことで。
-
夜勤はしんどい?
-
高2女子です。 これから目指す...
-
タクシー運転手はお酒飲むの?
-
基本9−17時定時で帰るという新...
-
夜職勤務をしていて、大体売れ...
-
看護師の給与について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
例えば週4勤務の方などの平日の...
-
研究室に入ることを、入研とい...
-
刑務官 勤務中の食事
-
夜勤のある接客業って何がある...
-
工場の夜勤業務ってどういうこ...
-
三交代制の工場の仕事に誘われ...
-
夜勤の挨拶は、なんと言えばい...
-
タクシー運転手はお酒飲むの?
-
工場の夜勤は、きついですか?...
-
アルソックやセコムと言った警...
-
三交替制の仕事
-
午後から出社時の挨拶は?
-
朝勤 昼勤
-
警察官の勤務体系なんですけど。
-
工場での1週間おきの日勤、夜勤...
-
コンビニバイトは自由にトイレ...
-
若い看護師さんの多くが、夜間...
-
最低勤務期間1ヶ月以内というの...
-
ファミマのタイムスキャン(?)に...
-
バイト先でタイムカード切った...
おすすめ情報