Excel VBA質問箱 IV

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

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


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

【65214】条件によって転記元のデータを変更したい isausa 10/4/27(火) 16:31 質問[未読]
【65215】Re:条件によって転記元のデータを変更したい かみちゃん 10/4/27(火) 16:50 発言[未読]
【65223】Re:条件によって転記元のデータを変更したい isausa 10/4/28(水) 11:31 質問[未読]
【65224】Re:条件によって転記元のデータを変更したい かみちゃん 10/4/28(水) 12:26 発言[未読]

【65214】条件によって転記元のデータを変更したい
質問  isausa  - 10/4/27(火) 16:31 -

引用なし
パスワード
   D15〜D20に10月のデータ、E15〜E20に11月のデータ、F15〜F20に12月データが・・・O15〜O20に9月データが入っています。R1に月を入力するセルがあり、10を入れると10月のD15〜D20のデータがD4〜D9に転記され、11月を入れるとD5〜E20まで、12月はD15〜F20という風にしたいのです。
以前教えていただいたシートモジュールで下記のように、記入してみましたが、転記がその月の分をD4:D9に転記するのみです。
どこをどう変えたら複数月のデータを転記できるのでしょうか

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Dim V As Variant
If Target.Count <> 1 Then Exit Sub
If Target.Address <> "$R$1" Then Exit Sub
V = Choose(Target.Value, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2)
If Not IsNull(V) Then
With Me.Range("D15:D20")
 Set r = .Offset(, .Columns.Count * V)
 End With
 Application.EnableEvents = False
 Me.Range("D4:D9").Value = r.Value
 Application.EnableEvents = True
 MsgBox V & vbCrLf & r.Address
 Else
 MsgBox "入力値が誤っています"
 End If
End Sub

【65215】Re:条件によって転記元のデータを変更し...
発言  かみちゃん  - 10/4/27(火) 16:50 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> R1に月を入力するセルがあり、10を入れると10月のD15〜D20のデータがD4〜D9に転記され、11月を入れるとD5〜E20まで、12月はD15〜F20という風にしたいのです。
>以前教えていただいたシートモジュールで下記のように、記入してみましたが、転記がその月の分をD4:D9に転記するのみです。
>どこをどう変えたら複数月のデータを転記できるのでしょうか

以下のようにすればできると思います。
★の行の部分がポイントです。

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim V As Long
 
 If Target.Count <> 1 Then Exit Sub
 If Target.Address <> "$R$1" Then Exit Sub
 '数値でない場合は処理しない
 If IsNumeric(Target.Value) Then
  '整数でかつ、1以上12以下の場合のみ処理する
  If (Int(Target.Value) - Target.Value = 0) And (V >= 1 Or V <= 12) Then
   V = Target.Value
   If V <= 9 Then
    V = V + 12
   End If
   With Range("D15:D20").Resize(, V - 9) '★
    Application.EnableEvents = False
    Range("D4:D9").Resize(, .Columns.Count).Value = .Value '★
    Application.EnableEvents = True
    MsgBox V & vbCrLf & .Address
   End With '★
  Else
   MsgBox "入力値が誤っています"
  End If
 Else
  MsgBox "入力値が誤っています"
 End If
End Sub

【65223】Re:条件によって転記元のデータを変更し...
質問  isausa  - 10/4/28(水) 11:31 -

引用なし
パスワード
   うまくいきました。有り難うございます。でもひとつ聞き忘れた事が・・・
転記元を指定する前に、転記先のD4:O9をクリアしたいのです。シートモジュールに書き込む時はクリアはどうすればいいのですか。
教えてください。

【65224】Re:条件によって転記元のデータを変更し...
発言  かみちゃん  - 10/4/28(水) 12:26 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 転記先のD4:O9をクリアしたい

マクロの記録で記録すれば、だいたいのコードは、わかると思います。

処理の先頭で、以下のようにすればいいと思います。

    Application.EnableEvents = False
    Range("D4:D9").ClearContents '★
    Application.EnableEvents = True

なお、
> 10を入れると10月のD15〜D20のデータがD4〜D9に転記され、11月を入れるとD5〜E20まで
の部分を
11を入れるとD4〜E9をクリアし、D4〜E9に転記した後、10を入れるとD4〜D9をクリアし
D4〜D9に転記するのですが、このとき、E4〜E9は、11月のデータが残ったままになるの
ですが、 それでいいのですか?
それか、常に、D4〜O9をクリアすることでもいいのでしょうか?

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