Excel VBA質問箱 IV

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

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


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

【34984】プルダウンリストで VBAビギナー 06/2/17(金) 17:14 質問[未読]
【34992】Re:プルダウンリストで Ned 06/2/17(金) 18:30 発言[未読]
【34993】Re:プルダウンリストで Ned 06/2/17(金) 18:36 発言[未読]
【34994】Re:プルダウンリストで ichinose 06/2/17(金) 19:01 発言[未読]

【34984】プルダウンリストで
質問  VBAビギナー  - 06/2/17(金) 17:14 -

引用なし
パスワード
   プルダウンリストをシート2に作成しシート1のデータをリストに反映するのに
INDIRECTを使いできたのですが、
シート1の選択範囲をA3からA1000にし
入力されているデータが50個(リストも)であったものをデータを消し10個にしたところ11から50までの分が空白になってしまいました。
リストはdeleteをしたくないのでmodifyで規則を変更させ、シート1のデータが変更されたらシート2のリストが空白のないデータ分だけが表示されるようにするにはどのようにしたらよろしいのでしょうか?
Private Sub Worksheet_Activate()
 Module1.tes
End Sub

sub tes()
With Range("A1").Validation
.Modify Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=INDIRECT(""Sheet1!$A$1:$A$1000"",TRUE)"
     .IgnoreBlank = False
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .IMEMode = xlIMEModeNoControl
    .ShowInput = False
    .ShowError = False
  End With
End Sub

【34992】Re:プルダウンリストで
発言  Ned  - 06/2/17(金) 18:30 -

引用なし
パスワード
   こんにちは。多分そのままでもBookを保存すれば大丈夫だと思います。
一般操作ですが、可変の名前定義を使うというのはどうなのでしょう?

Sub 可変の名前定義の例()
'一般操作でできます。
  ActiveWorkbook.Names.Add Name:="サンプル", RefersToR1C1:= _
    "=OFFSET(Sheet1!R1C1,0,0,COUNTA(Sheet1!R1C1:R1000C1))"
End Sub

Sub リスト設定例()
'これも一般操作でできます。
'設定例です。毎回行う必要はありません。
  With Range("A1").Validation
      .Delete
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
      xlBetween, Formula1:="=サンプル"
      .IgnoreBlank = False
      .InCellDropdown = True
      .ShowInput = False
      .ShowError = False
  End With
End Sub

【34993】Re:プルダウンリストで
発言  Ned  - 06/2/17(金) 18:36 -

引用なし
パスワード
   ごめんなさい、こっちのほうがわかりやすいかも
ActiveWorkbook.Names.Add Name:="サンプル", RefersTo:= _
    "=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A$1:$A$1000))"

【34994】Re:プルダウンリストで
発言  ichinose  - 06/2/17(金) 19:01 -

引用なし
パスワード
   ▼VBAビギナー さん:
こんばんは。

実際に入力規則のリストメンバとして設定するセル範囲を
Sheet1のA列ではなく、B列にしたらどうでしょうか?
このB列で空白を詰めます。

'====================================
Sub tes()
  Dim radd As String
  Dim idx As Long
  With Worksheets("sheet1")
   .Range("b:b").ClearContents
   For Each crng In .Range("a1:a1000")
     If crng.Value <> "" Then
      .Cells(idx + 1, 2).Value = crng.Value
      idx = idx + 1
      End If
     Next
   radd = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)).Address(, , , True)
   End With

  With Range("A1").Validation
   .Delete
   .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=INDIRECT(""" & radd & """)"
     .IgnoreBlank = False
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .IMEMode = xlIMEModeNoControl
    .ShowInput = False
    .ShowError = False
   End With
End Sub

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