Excel VBA質問箱 IV

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

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


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

【30477】入力規則のリスト範囲がFOR_NEXTで変わる... rara 05/10/28(金) 13:57 質問[未読]
【30480】Re:入力規則のリスト範囲がFOR_NEXTで変わ... BJ 05/10/28(金) 15:14 発言[未読]
【30481】Re:入力規則のリスト範囲がFOR_NEXTで変... awu 05/10/28(金) 15:16 回答[未読]
【30485】Re:入力規則のリスト範囲がFOR_NEXTで変... rara 05/10/28(金) 16:19 お礼[未読]
【30487】Re:入力規則のリスト範囲がFOR_NEXTで変... ichinose 05/10/28(金) 16:26 発言[未読]

【30477】入力規則のリスト範囲がFOR_NEXTで変わる...
質問  rara  - 05/10/28(金) 13:57 -

引用なし
パスワード
   Dim m, x As Integer
 For m = 1 To 50
こんにちは。
早速質問をさせてください。

「B1」から「B40」まで入力規則をしたいのです。
「A1」から「A40」の値によって「B列」でリストにしたいセルが変わります。

「A1」の値が「P1」の時は,「Q1」から「AD1」をリストに、
「A1」の値が「P2」の時は,「Q2」から「AD2」をリストに、
              ・
              ・
「A1」の値が「P50」の時は,「Q50」から「AD50」をリストに、
「A2」の値が「P1」の時は,「Q1」から「AD1」をリストに、
「A2」の値が「P2」の時は,「Q2」から「AD2」をリストに、
              ・
              ・
「A2」の値が「P50」の時は,「Q50」から「AD50」をリストに、

              ・
              ・
「A40」の値が「P50」の時は,「Q50」から「AD50」をリストに、

Dim m, x As Integer
For m = 1 To 40
 For x = 1 To 50
  Select Case Cells(m, 1)
   Case Cells(x, 16)
    Cells(m, 2).Select
     With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:=Cells(x, 17), formura2:=Cells(x, 30)
    .IgnoreBlank = True
    .InCellDropdown = True
    .IMEMode = xlIMEModeNoControl
    .ShowInput = True
    .ShowError = True
    End With
  End Select
 Next x
Next m

これを実行させると
「実行時エラー1004:アプリケーション定義またはオブジェクト定義のエラーです。」
となるのです。
どこがだめなのか教えてください。

【30480】Re:入力規則のリスト範囲がFOR_NEXTで変...
発言  BJ  - 05/10/28(金) 15:14 -

引用なし
パスワード
   Formula1:=Cells(x, 17), formura2:=Cells(x, 30)
 ↓
Formula1:=Range(Cells(x, 17), Cells(x, 30)).Address(0, 0)

【30481】Re:入力規則のリスト範囲がFOR_NEXTで変...
回答  awu  - 05/10/28(金) 15:16 -

引用なし
パスワード
   > Dim m, x As Integer

この変数宣言ですと、mは、Variantになりますよ。

Validation.Add で Type:=xlValidateList の場合は、リストですから
formura2 は、不要です。 あと綴りが ra ではなく la です。

Select Case で Case が1つよりないのでどうかと・・・

こんな感じで如何でしょうか。


Dim m As Integer, x As Integer
For m = 1 To 40
  For x = 1 To 50
    If Cells(m, 1).Value = Cells(x, 16).Value Then
      With Cells(m, 2).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:="=" & _
        Range(Cells(x, 17), Cells(x, 30)).Address
        .IgnoreBlank = True
        .InCellDropdown = True
        .IMEMode = xlIMEModeNoControl
        .ShowInput = True
        .ShowError = True
      End With
    End If
  Next x
Next m

【30485】Re:入力規則のリスト範囲がFOR_NEXTで変...
お礼  rara  - 05/10/28(金) 16:19 -

引用なし
パスワード
   ▼awu さん:
>> Dim m, x As Integer
>
>この変数宣言ですと、mは、Variantになりますよ。
>
>Validation.Add で Type:=xlValidateList の場合は、リストですから
>formura2 は、不要です。 あと綴りが ra ではなく la です。
>
>Select Case で Case が1つよりないのでどうかと・・・
>
>こんな感じで如何でしょうか。
>
>
>Dim m As Integer, x As Integer
>For m = 1 To 40
>  For x = 1 To 50
>    If Cells(m, 1).Value = Cells(x, 16).Value Then
>      With Cells(m, 2).Validation
>        .Delete
>        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
>        Operator:=xlBetween, Formula1:="=" & _
>        Range(Cells(x, 17), Cells(x, 30)).Address
>        .IgnoreBlank = True
>        .InCellDropdown = True
>        .IMEMode = xlIMEModeNoControl
>        .ShowInput = True
>        .ShowError = True
>      End With
>    End If
>  Next x
>Next m

ありがとうございます。
ほんまに初心者なもので綴りミスなんて・・・恥ずかしい。。

教えてくださったのでうまく動きました☆

これからも初心者の私に教えてください。
ありがとうございます。

【30487】Re:入力規則のリスト範囲がFOR_NEXTで変...
発言  ichinose  - 05/10/28(金) 16:26 -

引用なし
パスワード
   ▼rara さん、皆さん、こんにちは。
解決後ですが・・・。

'====================================
Sub Macro1()
  With Range("B1:B40").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=OFFSET(INDIRECT(A1),0,1,1,14)"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .IMEMode = xlIMEModeNoControl
    .ShowInput = True
    .ShowError = True
  End With
End Sub

というコードで設定も一度ですみますよ!!
実行後、A1を P1やP2にしてみてください。

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