• ベストアンサー

ExcelVBA(2003)でドロップダウンリストを設定できる数に制限ありますか?

はじめまして、yasu_131と申します。 掲題について質問させてください。(長文失礼します) やりたいことは、「Excel VBAを使って、ある固定列(例えばB列)に対してドロップダウンリストによる入力規則を適用したい」ということです。 諸事情により、ExcelVBAを直接扱うのではなく、JScriptを使ってExcelVBAを操作するという制約がありますが、 結局、書きたいコードや実行したい処理内容はExcel VBAそのものです。 開発環境、実行環境は Excel 2003 です。 困っていること: 実際に、10列×10行程度のデータを用意して、B列へドロップダウンによる入力規則を適用することはできています。 しかし、実際の運用で用いるデータは23列×2500行程度あり、このデータに対してExcelVBAを実行すると なぜかB列の1023行目までしかドロップダウンリストが適用されません。1024行目以降は普通の(入力規則が適用されてない) セルなのです。。 セルの中身のデータに問題があるかもしれないと思い、ためしに1~100までの数値だけが入力された列(E列)に対して 実行してみましたが、やはり1023行目までしかドロップダウンリストが適用されませんでした。 なにやら、1023(1024)という数値にExcelの内部的な制約を感じていますが、MS社のサイト等では該当する説明は ありませんでした。 この現象について、原因の糸口や解決策(あるいは回避策、代替策)を模索しています。 皆様のお知恵をご教授いただければと思います。 ※追加検証1:ドロップダウンリストを適用する列を増やす(例えばB列とE列を同時に適用する)と、  B列は1023行目まで、E列は202行目までしかドロップダウンリストになりませんでした。 ※追加検証2:Excel 2007 環境では、2列(B列とE列)へドロップダウンリストを適用しても  末尾行(2500行目)まで正常に入力規則が設定されました。 以下はその際のコードです。 // 初期化 this._objExcelApp = new ActiveXObject("Excel.Application"); this._objWorkbook = this._objExcelApp.Workbooks.Add(); this._objExcelApp.Selection.Style = "Normal"; this._activeSheet = this._objWorkbook.ActiveSheet; // 外部データのインポート //(実際のコードではCSVから必要なデータを抜き出してセルに埋めています。) for (i = 1; i < 2500; i++) { for (j = 1; j < 23; j++) { with(this._activeSheet) { Cells(i,j) = 'AAAAA'; } } } // 入力規則の適用(B列に対するドロップダウンリストの設定) var _row; var _xlDown = -4121; var _xlValidateList = 3; var _xlValidAlertStop = 1; var _xlBetween = 1; var _maxRow = this._activeSheet.Range("A1").End(_xlDown).Row; for (_row = 1 ; _row <= _maxRow ; _row++) { // B列に対するドロップダウンリストの設定 with(this._activeSheet.Range("B" + _row)){ with(Validation) { Delete(); Add(this._xlValidateList,this._xlValidAlertStop,this._xlBetween,"AAA,BBB,CCC,DDD,EEE"); IgnoreBlank = true; InCellDropDown = true; } Locked = false; } // E列に対するドロップダウンリストの設定 with(this._activeSheet.Range("E" + _row)){ with(Validation) { Delete(); Add(this._xlValidateList,this._xlValidAlertStop,this._xlBetween,"111,222,333,444,555"); IgnoreBlank = true; InCellDropDown = true; } Locked = false; } } // 実際のコードではここで保存処理はしていませんが、投稿のためにここで終了させています。 var fname; fname = this._objExcelApp.GetSaveAsFilename() this._objWorkbook.SaveAs(fname); this._objWorkbook.Close();

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

  下記マイクロソフトのサイトに、入力規則、2045、という数字があります。 このサイトでは、不連続セル、となってますが。。 一応の覗いてみてください。   http://support.microsoft.com/kb/436987/JA/ 試してみましたが、どうやら、一気に設定するその制限に引っかかるようです。 で、例えば、6000セルセットしたければ、 1~1000セットして、保存 1001~2000セットして、保存 ・・・・・・・・・ 5001~6000セットして、保存 面倒でも制限範囲個数でセット、保存を繰り返してはどうでしょうか。 当方で試してところこれで上手くいきました。    

yasu_131
質問者

お礼

MS社サイト情報ありがとうございます。覗いてみました。 また、回避策も提示して頂いて、大変勉強になりました。 実は、onlyromさんの「一気に設定する」というキーワードがひっかかって、私なりに色々と泥臭いコードを試してみました。 すると、以下のようなコードにしてみたところ、無事に2500行目(最下行)まで入力規則のプルダウンを適用することができました。 for (_row = 1 ; _row <= _maxRow ; _row++) { // B列に対するドロップダウンリストの設定 with(this._activeSheet.Range("B" + _row)){ with(Validation) { Delete(); Add(this._xlValidateList,this._xlValidAlertStop,this._xlBetween,"AAA,BBB,CCC,DDD,EEE"); IgnoreBlank = true; InCellDropDown = true; ShowError =false; ←ココでエラー通知をひとまず無効化して入力規則を適用 } Locked = false; } with(Validation) { ShowError = true; ←適用が済んだあとで、エラー通知だけ有効に戻す } } Excelはデフォルトでいろいろな機能を自動的に有効にしていますので、明示的に機能を無効化するロジックを付け加えてみた次第です。 onlyromさんのレスが解決に向けたアプローチのきっかけになりました。 ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

Sub test01() On Error GoTo p1 Worksheets("sheet1").ComboBox1.Clear ' Exit Sub For i = 1 To 10000 Worksheets("sheet1").ComboBox1.AddItem i Next i p1: MsgBox i End Sub のようなのを10000の部分を増やしてやってみたら(まず論より証拠)。

yasu_131
質問者

お礼

助言いただき、ありがとうございます。 お示しいただいたような処理を試してみましたが、2500行すべてにコンボボックスをつけることはできました。 その後、いろいろ試行錯誤した結果、onlyronさんへの回答に書いたように無事うまく入力規則を適用することに成功しました。 論より証拠。壁にぶつかってネットに答えを求め始めると、つい忘れがちです。(^^; ありがとうございました。

関連するQ&A

  • エクセルのドロップダウンリスト

    入力規則のドロップダウンリストですが、次のような使い方は可能でしょうか?また可能なら方法を教えて頂けませんか?よろしくお願いします。 A、B列にドロップダウンリストを設定し、A列のリストに値を複数設定し、B列のリストの値をA列の値によって変化させたいのですが・・・。各列とも、複数行にわたってドロップダウンリストを設定しています。

  • エクセル セルを結合させてドロップダウンリストを作りたい

    Office2003を使用しています。 エクセルで、結合させたセルの列を一つの列とみなしてドロップダウンリストを作成したいのですがうまくできません。 言葉が足りずにわかりにくいかもしれませんが、例えば1行目のA列とB列、2行目のA列とB列、3行目のA列とB列・・というようにセルを結合させていき、その列にドロップダウンリストを作成したいのです。 結合させた後に範囲を指定してドロップダウンリストを作成しようとすると、A列とB列の2列にドロップダウンリストを作成するように出来上がってしまいます。 何か方法はありますでしょうか? 宜しくお願いします。

  • ドロップダウンリストについて

    ドロップダウンリストの作成についてお願いします。 列にドロップダウンリストを作る方法はわかるのですが、行に作る方法がわかりません。 可能なのでしょうか?また、できればその方法について教えていただきたいです。 よろしくお願いします。 EXCEL2004forMac OS:mac OS X 10.4.8 使用しています。

  • エクセルのドロップダウンリスト

    エクセルのドロップダウンリストについて、困っていることがあります。 たとえば、 ・Aシート A列|B列|C列 1|ペン|200 2|鉛筆|100 3|本|200 ・Bシート A列|B列 ペン(ドロップダウンリスト)|200 という風に、Bシートのドロップダウンリストを選択すると、動的に200と隣のセル(B列)に表示するようにするにはどのようにすればいいでしょうか? よろしくお願いします。

  • エクセルのドロップダウンリストについて(再)

    ドロップダウンリストで、参照先のリストは、単一の行、もしくは列でないといけないともいますが、たとえば、A1列にあらかじめ設定されたドロップダウンリストを表示(※ドロップダウンリストの右隣の▼ボタンを押したときに表示される内容です。)させたときに、A0001などのリストの隣、もしくは下にそれに対応する商品名を表示させるにはどうしたらいいのでしょうか? 先程やっていたら偶然にできたのですが、しばらくしたら更新されやり方が分からなくなりました。

  • ドロップダウンリストを2列で表示するには?

    Excel2010を使用しています。 1列目に商品ID、2列目に商品名が入ったリストをもとに 入力規則からドロップダウンリストをつくろうとすると、 「区切り文字で区切られたリストか、または単一の行または列の参照でなければならない」 とでてしまいます。 2列のドロップダウンリストを作ることはできないのでしょうか? 入力するのは1列目ですが、2列目も参照しながら選択できるようにするのが目的です。 よろしくお願いします。

  • エクセルのドロップダウンリストの行の高さについて

    エクセル2007のドロップダウンリストの行の高さで、困っています。 「データの入力規制」で、現在は4行のドロップダウンを作っています。 検索でいろいろと調べると、ドロップダウンのリストの1行の高さは、親のセルと同じ高さに なっているようです。 自分の作った4行のドロップダウンは、4行で親のセルと同じ高さになってしまい、 非常に文字が小さくなっていて、読みにくく実用になりません。 エクセル2007のどこかの設定で、このように制限されているのでしょうか? 通常のように、ドロップダウンのリストの1行の高さを、親のセルと同じ高さにしたいので、 そのやり方を教えてください。

  • エクセルでのドロップダウンリスト作成について

    エクセルで、3つの項目(A,B,Cとします)をドロップダウンリストから選択する場合、A,B,Cを『名前の定義』で関連付けることはできました。しかし、A,B,Cが同じ文字列の場合、同シート上で同じ名前の定義にできないため、ドロップダウンリストが作成できずにいます。 このようなドロップダウンリストを作成するにはどのようにすれば良いか教えてください。 VBAなどが必要になるのでしょうか? 宜しくお願いします。

  • ドロップダウンリストの連動

    いつも大変お世話になっております。 エクセルで、セルO6にA社とB社を名前の定義で登録しドロップダウンリストで選択できるようにしました。 セルD14に、セルO6でA社を選択した場合には、A5052(H)とA5052(R)がドロップダウンリストで選択でき、同じく、セル14に、セルO6でB社を選択した場合には、アルハイスとアルジェイドがドロップダウンリストで選択できるようにしたいです。 こちらで拝見したり、ネットで調べたのですが、列が同じの場合はやれそうでしたが、同列以外ではできませんでしょうか? (INDIRECTや、ドロップダウンリストを使用してやったりできるのでしょうか) 説明が上手く出来ず申し訳ありません。 ご教授して頂けたらありがたいです。 よろしくお願いします。

  • ドロップダウンリストを使用して関連した値を入力したいです。

    ドロップダウンリストを使用して関連した値を入力したいです。 Excel2007を使用していますが、 リストから項目を選択した時に、 各セルに選択した項目に関連する値を入力させたいです。 例えば、 リストから「ライオン」を選択した場合 A列1行目に「肉食」 A列2行目に「ネコ科」 A列3行目に「大型」 リストから「うさぎ」を選択した場合 A列1行目に「草食」 A列2行目に「うさぎ科」 A列3行目に「小型」 今はコンボボックスにドロップダウンリストを作成して一覧参照していますが、どう関連付けよいものか苦慮しております。 マクロを使わないと対処できない気もしますが、良い方法があれば教えてください。

専門家に質問してみよう