Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6721 / 13644 ツリー ←次へ | 前へ→

【43511】セルに入力した値によってコピーする内容を変えたい そうごん 06/10/18(水) 14:47 質問[未読]
【43513】Re:セルに入力した値によってコピーする内... そうごん 06/10/18(水) 14:55 発言[未読]
【43533】Re:セルに入力した値によってコピーする内... Kein 06/10/18(水) 22:51 回答[未読]
【43534】Re:セルに入力した値によってコピーする内... Kein 06/10/18(水) 22:54 回答[未読]
【43541】Re:セルに入力した値によってコピーする内... そうごん 06/10/19(木) 8:15 質問[未読]
【43544】Re:セルに入力した値によってコピーする内... そうごん 06/10/19(木) 9:19 お礼[未読]

【43511】セルに入力した値によってコピーする内容...
質問  そうごん  - 06/10/18(水) 14:47 -

引用なし
パスワード
   今、職場で勤務表を作成しております。
VBAはまだ初心者です


エクセルシート1(勤務表)に

  A B C・・ J K ・・・・  AN6

1 



5 氏名    1 2      31  
6 ああああ
  いいい
  ううう

このような勤務表があり、Sheet2(パターン)を休日パターンのデータ置き場としています。
入力を簡単にする為に、Sheet1セルj6の値が1ならSheet2のL7(休日)をコピペ
           Sheet1セルj6の値が2ならSheet2のL8(半日)をコピペ
           Sheet1セルj6の値が3ならSheet2のL9(有休)をコピペ

などのようにマクロを組みたいのですが、どのようにすれば良いのでしょうか?

一応 今書いたものは

If Range("j6") = 1 Then
  Worksheets("パターン").Range("L7").Copy Range("j6")
ElseIf Range("j6") = 2 Then
  Worksheets("パターン").Range("L8").Copy Range("j6")
ElseIf Range("j6") = 3 Then
  Worksheets("パターン").Range("L9").Copy Range("j6")
ElseIf Range("j6") = 4 Then
 Worksheets("パターン").Range("L10").Copy Range("j6")
ElseIf Range("j6") = 5 Then
 Worksheets("パターン").Range("L11").Copy Range("j6")
ElseIf Range("j6") = 6 Then
 Worksheets("パターン").Range("L12").Copy Range("j6")
ElseIf Range("j6") = 7 Then
 Worksheets("パターン").Range("L13").Copy Range("j6")
ElseIf Range("j6") = 8 Then
 Worksheets("パターン").Range("L14").Copy Range("j6")
ElseIf Range("j6") = 9 Then
 Worksheets("パターン").Range("L15").Copy Range("j6")
ElseIf Range("j6") = 10 Then
 Worksheets("パターン").Range("L16").Copy Range("j6")
End If

です。
1つのセルだけならこれで動くのですが、
K6 L6 ・・・とAN6 まで31日分入力し、
2人目を書いていた途中1回テストしてみたところ
「プロシージャが大きすぎます」とのコンパイルエラーになりました。


よろしくおねがいします。

【43513】Re:セルに入力した値によってコピーする...
発言  そうごん  - 06/10/18(水) 14:55 -

引用なし
パスワード
   すみません書き忘れました。
35行目、AN35までの30名分の勤務表です。

【43533】Re:セルに入力した値によってコピーする...
回答  Kein  - 06/10/18(水) 22:51 -

引用なし
パスワード
   イマイチよく意味が分からないんですが「J6以降のセルに1〜10までの数値を
入力すると、値によって条件分岐してパターンシートの特定のセルの値に
置き換えたい」ということなのかな ?
それなら以下のようなセル入力イベントを、勤務表シートのシートモジュールに
入れてみて下さい。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim LR As Long, Num As Long

  LR = Range("A65536").End(xlUp).Row
  If Intersect(Target, Range("J6:AN" & LR)) Is _
  Nothing Then Exit Sub
  With Target
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
   If Not IsNumeric(.Value) Then Exit Sub
   If .Value < 1 Or .Value > 10 Then Exit Sub
   Num = Int(.Value) + 6
   Application.EnableEvents = False
   .Value = Sheets("パターン").Cells(Num, 12).Value
  End With
  Application.EnableEvents = True
End Sub 

【43534】Re:セルに入力した値によってコピーする...
回答  Kein  - 06/10/18(水) 22:54 -

引用なし
パスワード
   >35行目、AN35までの30名分
でしたか。それなら・・

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Num As Long

  If Intersect(Target, Range("J6:AN35")) Is _
  Nothing Then Exit Sub
  With Target
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
   If Not IsNumeric(.Value) Then Exit Sub
   If .Value < 1 Or .Value > 10 Then Exit Sub
   Num = Int(.Value) + 6
   Application.EnableEvents = False
   .Value = Sheets("パターン").Cells(Num, 12).Value
  End With
  Application.EnableEvents = True
End Sub

【43541】Re:セルに入力した値によってコピーする...
質問  そうごん  - 06/10/19(木) 8:15 -

引用なし
パスワード
   おお 基本的にはまさしく期待通りの動きです。
こんなに簡単に書けるなんて・・・奥が深いです。

重ね重ね恐縮なのですが、
>.Value = Sheets("パターン").Cells(Num, 12).Value
これでパターンSheetからセルの値を代入してると思うのですが、
セルの書式も一緒にコピーする場合はどのようにすれば良いのでしょうか?

【43544】Re:セルに入力した値によってコピーする...
お礼  そうごん  - 06/10/19(木) 9:19 -

引用なし
パスワード
   いろいろ試しにやっていたら出来てしまいました。
Sheets("パターン").Cells(Num, 12).Copy Target

自分で試しもせず、回答に質問で返信した非礼をお詫び申し上げます。

いろいろとありがとうございました。

6721 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free