• ベストアンサー

違うシートからリストを作成するには

97のエクセルです。 リストを作成するために下記のようにマクロを作ってます。(教えてもらいました) Worksheets("sheet1").Range("m21:m100").Validation.Delete Worksheets("sheet1").Range("m21:m100").Validation.AddType:=xlValidateList,_ Formula1:="=$A$1:$A$8" これですと、Sheet1のA1~A8までをSheet1のm21~m100までに繁栄するリストができます。 このA1~A8をSheet2から選択してSheet1のm21~m100に繁栄させるにはどのようにすれば良いでしょうか? また範囲の数字(m21とか)を変数にしたいのですが可能でしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

他シートのリストを使った入力規則は通常のアドレス指定ではできなかったような気がします。(余り自信なし) 下では、Sheet2のリスト範囲(質問のSheet2のA1:A8)に自動的に範囲名(myList)を付け、それを入力規則の設定に使っています。 名前を手動で付ければ短くなりますが、マクロらしくないので内部で設定しています。変数にしたいという事なので、シート名やセル範囲を外部に出しています。 ご参考に。(当方、Excel97です) Sub myValidationSet()   Dim inpSheet As String '入力規則を適用するシート名   Dim inpArea As String '入力規則を適用する範囲     '次の行にシート名と範囲を設定します     inpSheet = "Sheet1": inpArea = "M21:M100"   Dim lstSheet As String '入力規則のリストがあるシート名   Dim lstArea As String '入力規則のリスト範囲     '次の行にシート名と範囲を設定します     lstSheet = "Sheet2": lstArea = "A1:A8"   Application.ScreenUpdating = False   'シートが異なる時のために、入力規則のリスト範囲に範囲名を付ける。   Worksheets(lstSheet).Select   Range(lstArea).Select   '『myList』という範囲名を付けた   ActiveWorkbook.Names.Add Name:="myList", _                RefersToLocal:="=" & Range(lstArea).Address   '入力規則を設定する   Worksheets(inpSheet).Select   With Range(inpArea).Validation     .Delete     .Add Type:=xlValidateList, Formula1:="=myList"   End With   Application.ScreenUpdating = True End Sub

akashyati
質問者

お礼

ありがとうございます。 できました。

その他の回答 (1)

  • Fat01ton
  • ベストアンサー率46% (122/264)
回答No.1

EXCEL2000での環境では以下のような感じで出来ました。 (名前は適当に作成しましたのでご自分の好みでお直しください) Public Sub testPRG() Dim シート As String Dim エリア As String シート = Worksheets("sheet1").Range("C1").Value エリア = Worksheets("sheet1").Range("C2").Value Worksheets(シート).Range(エリア).Validation.Delete Worksheets(シート).Range(エリア).Validation.Add Type:=xlValidateList, Formula1:="=S2List" End Sub >A1~A8をSheet2から選択してSheet1のm21~m100に繁栄させるにはどのようにすれば良いでしょうか? これは挿入→名前→定義で名前を設定(List)し参照範囲で=Sheet2!$A$1:$A$8とします。(任意の範囲) 元の式のFormula1:="=$A$1:$A$8" ""間を"List"にすれば出来ます。 >また範囲の数字(m21とか)を変数にしたいのですが可能でしょうか? こちらにつきましては仮にSheet1のC1セルに入力した名称がシート名 C2に入力した文字列をリストを繁栄する範囲としています。 ですからC1に”sheet1" C2に"m21:m100"と入力していただければ現在のままになると思います。 お役に立てればよろしいのですが……

akashyati
質問者

お礼

ありがとうございます。 試してみます。

関連するQ&A

  • excel2003 vba の入力規則リスト

    入力規則でリスト登録する記述について、教えていただけないでしょうか。 例えば変数(long)で、a=1,b=5 というものがあったとします。 シート1のA1セルに、1,2,3,4,5 でそれぞれ数値選択できる入力リスト を作成したいのですが、うまくいきません。どのように修正したらよいか教えて欲しいです。 Dim a As long Dim b As long a=1 b=5 With Worksheets("Sheet1").Range("A1").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=a, Formula2:=b End With だと、何も設定されません。

  • VBA リストを作成後、そのセルに文字列を挿入したい

    With Worksheets("シート名").Range("A1").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="該当なし" End With というように、A1のセルに対して、「該当なし」というプルダウン(入力規則)を設定し、そのあと文字列(文言)を挿入したいです。 その方法を教えてください。

  • エクセルでchangeプロジェクトを複数設定する場

    すみません、マクロの基本的な部分を分かっておらず、Google検索などで知識を得た程度のど素人なのですが。 A1にあ・い A2にう・え A3にお・か をプルダウンで選べるように設定していて 【い】を選んだ場合は選択肢を【う】と【お】のみにする 【あ】を選んだら選択肢を戻す 【え】を選んだ場合は選択肢を【あ】と【お】のみにする 【う】を選んだら選択肢を戻す 【か】を選んだ場合は選択肢を【あ】と【う】のみにする 【う】を選んだら選択肢を戻す という挙動を設定したく、複数のchangeプロジェクトを書いてみたのですが、どうしても1箇所のみうまくいきません。(下のマクロでは【え】を選んだ場合、A3の選択肢が消えない。) 書き方・考え方自体が間違っているのかもしれませんが、教えていただけませんでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) 処理1 Target 処理2 Target 処理3 Target End Sub Private Sub 処理1(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Else If Range("A1").Value = "い" Then With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="う" End With Range("A2") = "う" With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お" End With Range("A3") = "お" MsgBox "入場区分を【い】に設定した場合は、分配フラグは【え】、お客様情報取得フラグは【お】に固定となります。" ElseIf Range("A1").Value = "あ" Then With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お,か" End With With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="=INDIRECT(A1)" End With End If End If End Sub Private Sub 処理2(ByVal Target As Range) If Intersect(Target, Range("A2")) Is Nothing Then Exit Sub Else If Range("A2").Value = "え" Then With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お" End With Range("A3") = "お" With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="あ" End With Range("A1") = "あ" MsgBox "分配フラグを【え】に設定した場合は、入場認証区分は【あ】、お客様情報取得フラグは【お】に固定となります。" ElseIf Range("A2").Value = "う" Then With Range("A3").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="お,か" End With With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="=INDIRECT(A3)" End With End If End If End Sub Private Sub 処理3(ByVal Target As Range) Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A3")) Is Nothing Then Exit Sub Else If Range("A3").Value = "か" Then With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="あ" End With Range("A1") = "あ" With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="う" End With Range("A2") = "う" MsgBox "お客さま情報をかに設定した場合は、入場区分は【あ】、分配フラグは【う】に固定となります。" ElseIf Range("A3").Value = "お" Then With Range("A1").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="あ,い" End With With Range("A2").Validation .Delete .Add _ Type:=xlValidateList, _ Formula1:="=INDIRECT(A1)" End With End If End If End Sub

  • 入力規則 日付をリストのプルダウンで選択したい

    エクセルの入力規則をVBAでやる時に日付をリストのプルダウンで選択したいのですが Sub test() With Range("A1").Validation .Delete .Add Type:=xlValidateList, Formula1:="2014/1/1,2014/1/2" End With End Sub をすると、 1/1/2014 1/2/2014 にとプルダウン上で表示されてしまい、なおかつ文字列になってしまいます。 .Add Type:=xlValidateList, Formula1:=#1/1/2014# & "," & #1/2/2014# .Add Type:=xlValidateList, Formula1:=Format(#1/1/2014#, "yyyy/mm/dd") & "," & Format(#1/2/2014#, "yyyy/mm/dd") これでも同じでした。 2014/1/1 2014/1/2 と表示させるにはどうすればいいでしょう?

  • Excelでシートを保護してもマクロが使えるようにしたい

    Excelのマクロについて、また質問させていただきます。 シートを保護してもマクロが使えるようにしたいのです。  Selection.Validation.Add Type:= _  xlValidateList, AlertStyle:= _  xlvalidalerstop, Operator:= _  xlBetween, Formula1:="=$A$1" というようなマクロを作ったとします。 このままなら使えるのですが シートを保護すると アプリケーション定義またはオブジェクト定義のエラーです。 と表示されるようになります。 前回質問させていただいたときにアドバイスいただいた  Validation.Delete を付けても 状況は変わりません。  Unprotect password や  Protect userinterfaceonly:=True を付けても、やはり無理なのです。 マクロについては まだまだ初心者の域を脱していません。 今回もまた明快なお答えをいただけること 期待しております。

  • すみません、質問の内容を変更します。【VBA リスト操作】

    With Worksheets("シート名").Range("A1").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="該当なし" End With というように、VBAでA1のセルに対して、「該当なし」というプルダウン(入力規則)を設定し、「該当なし」がすでに選択された状態、若しくはタイトル的な感じで「該当なし」とセルに表示させる方法をお願いします。 前の質問を削除したいのですができません。 ご了承ください。 よろしくお願いいたします。

  • excel vba でドロップダウンリスト

    sheet1のA1セルに、VBAでドロップダウンリストを作ろうとしているが、うまくいかず、どうかアドバイスをお願い致します。 ドロップダウンリストの元のデータは「datalist」というシートののA1セル~A10セルにあります。 参考書を参考にしながら、下記コードを作成しました。 Sub ドロップダウンリストの作成() Dim r As Variant For Each r In Range("A1") r.Validation.Add_ Type:=xlValidateList, _ formula1:="Worksheets("datalist")."=$A$1:$A$10" Next r End Sub

  • EXCELでのリスト作成について

    このサイトでこのようなマクロを教えてもらいました。 そこでこれはシートの左側からリストシートに表示していくのですが、右側からリストにしていく方法はないでしょうか? よろしくお願いします。 ------------------------- Sub テスト() ActiveWindow.WindowState = xlNormal Dim i As Integer, r As Range With Worksheets("リスト") .Hyperlinks.Delete .Range("B4:B65536").ClearContents For i = 2 To Worksheets.Count Set r = .Cells(((i - 2) Mod 20) + 4, 2 + Int((i - 2) / 20)) r.Value = Worksheets(i).Name .Hyperlinks.Add Anchor:=r, Address:="", _ SubAddress:=Worksheets(i).Name & "!A1" Next i End With Columns("B:B").EntireColumn.AutoFit End Sub -------------------------

  • Excel VBA 入力規則のリスト化

    Excel VBAにて入力規則でリスト化しようと思っています。 通常セルを範囲指定によってリスト化する場合、 以下のようなコードになると思うのですが、 (セルA1にセルB1~B10の内容がリスト化される) Range("A1").Select With Selection.Validation .Add Type:=xlValidateList, Formula1:="=B1:B10" End With 例えばB1~B3, B6~B10などのような不連続な範囲をリスト化 する方法はありませんでしょうか? 宜しくご教示の程お願い致します。

  • VBAで入力規則の設定がうまくいかない・・・

    VBAで入力規則の設定がうまくいきません どなたかご教示ください。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Dim A As String If Target.Column = 3 And Target.Row >= 77 And Target.Row <= 65536 Then If Target.Value <> "" Then Worksheets("Sheet2").Range("A1:Z5").Copy _ Destination:=Target.Offset(5, -1) For i = 5 To 9 For k = 5 To 23 Step 2 A = "=INDIRECT(" & Target.Offset(0, 3).Address & ")" Target.Offset(i, k).Validation.Delete Target.Offset(i, k).Validation.Add Type:=xlValidateList, Formula1:=A Next Next End If End If End Sub 「実行時エラー '1004' : アプリケーションの定義またはオブジェクト定義のエラー」が出てしまします。 A = "=INDIRECT(" & Target.Offset(0, 3).Address & ")" Target.Offset(i, k).Validation.Delete Target.Offset(i, k).Validation.Add Type:=xlValidateList, Formula1:=A "=INDIRECT(""" & Target.Offset(0, 3).Address & """)"こうすることや"INDIRECT(" & Target.Offset(0, 3).Address & ")"こうするとエラーは発生しません。これはバグなのでしょうか? 上記だとリストに値がうまく設定されません。 このプログラムの意味ですが・・・ ttp://www.relief.jp/itnote/archives/000822.php こちらにあるような物を参考にしています。 ドロップダウンリストを連動させて使いたいのです。

専門家に質問してみよう