[[20161030154022]] 『入力規則を繰り返したい』(りこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『入力規則を繰り返したい』(りこ)

こんにちは。入力規則を23行おきに200回繰り返したいので、ネットやVBA辞典を参考に、コードをそれぞれ書いてみましたが、どうやって繋げればいいのかわかりません。

【入力規則】
Sub 入力規則1()

    Range("D4").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, _
             Formula1:="=Sheet2!$A$2:$A$11"
    End With
End Sub

【繰り返す】
Sub 繰り返し()
Dim i as integer
For i = 4 To 4000 Step 23 ’23行ごとに繰り返します。

    Range ("Di")
Next i

上の2つのコードをまとめたいです。

また、最終的には23行分の入力規則を200回繰り返すコードを作りたいです。
*入力規則の設定はD4からD26まで、Sheet2のA2:A5〜W2:W11を参照します。
これを下の方向に200回繰り返します。参照先のSheet2の最終行はA列からW列までばらばらです。

【入力規則】

    Range("D4").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, _
             Formula1:="=Sheet2!$A$2:$A$5"
    End With
    Range("D5").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, _
             Formula1:="=Sheet2!$B$2:$B$6"
    End With
    Range("D6").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, _
             Formula1:="=Sheet2!$C$2:$C$10"
    End With

−中略

    Range("D26").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, _
             Formula1:="=Sheet2!$W$2:$W$11"
    End With

【繰り返す】
Sub 繰り返し()
Dim i as integer
For i = 4 To 4000 Step 23 ’23行ごとに繰り返します。

    Range ("Di")
Next i
For j = 5 To 4000 Step 23 ’23行ごとに繰り返します。
    Range ("Dj")
Next j
For k = 6 To 4000 Step 23 ’23行ごとに繰り返します。
    Range ("Dk")
Next k
ー中略
For ae = 26 To 4000 Step 23 ’23行ごとに繰り返します。
    Range ("Dae")
Next ae

分かりにくい説明で申し訳ありません。
ご教授お願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 この入力規則を設定しなければいけないシートのレイアウトというか、逆、なぜ、このような入力規則が必要になるかという
 そのレイアウト要件がピンとこないのですが、さておき。

 条件のリストで与える範囲の行数が一定ではなく、かといって増加分が一定ということでもないですね。
 与えるリスト範囲の条件を教えていただけませんか?

(β) 2016/10/30(日) 16:34


 こんにちわ。

 ループの部分はD4:D26を下に丸ごとコピペでは問題あるんですか?

 後リスト範囲はそれぞれのデータのある最終行までですか?
 以下のような感じかな?
 200回繰り返すなら最終行は4626じゃないですか?

 Sub test()
    Dim i As Integer
    Dim ads As String

    For i = 4 To 26
        With Sheets("Sheet2")
            ads = "=" & .Range(.Cells(2, i - 3), .Cells(Rows.Count, i - 3).End(xlUp)).Address(External:=True)
        End With
        With Range("D" & i).Validation
            .Delete
            .Add Type:=xlValidateList, Formula1:=ads
        End With
    Next i
    Range("D4:D26").Copy Range("D27:D4626")

 End Sub

 コード修正(18:49)

(sy) 2016/10/30(日) 16:54


 >>後リスト範囲はそれぞれのデータのある最終行までですか?

 あぁ、なるほど。そうかも。
 だから規則性がなかったんですね。

(β) 2016/10/30(日) 18:08


βさん、syさん、こんにちは。私の拙い説明を読み取ってくださり、ありがとうございます。
また、お礼が遅くなりごめんなさい。

結局、23行分の入力規則を手作業で設定し、syさんにアドバイスいただいたコピペをアレンジしました。
*syさんのご指摘通り、4626行でした。

Range("G4:G26").Copy

Range("G27:G4626").PasteSpecial Paste:=xlPasteValidation

本当に助かりました。ありがとうございました。
(りこ) 2016/11/06(日) 17:29


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.