• ベストアンサー

Excel 入力規則_リスト 連続しないデータの空白行削除

お世話になります。 Excel2003を使用しています。 あるブックのSheet1に"リストデータ"と名前のついている範囲があります。 Sheet2の任意のセルで、リストデータを基に入力規則から リスト選択をさせています。 このリストデータにはユーザが任意でデータを入力するのですが 必ずしも連続するデータにはならず データの途中に空白セルが生じたり データの最下行が人によって異なってしまいます。 そこで、不要な空白を削除したいのですが VBAを使わない方法で何かいいアイディアはありますでしょうか。 皆様のお知恵を拝借いたしたく、よろしくお願いいたします。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

No.2です。補足拝見しました。 > Sheet2の空いている列(たとえばB列)を作業列として使います。 失礼しました。この記述がSheet1の誤りでした。名前を定義する数式の方は質問文に書いたとおりです。 > 名前を定義し、入力規則のリストを設定する際 > "数式はエラーと判断されます。続けますか?" > のメッセージが出てしまいます、どうしたらよいでしょうか。 あれ、おかしいですね。エラーになってしまいましたか。 そのままコピーして貼り付ければ、私の環境ではエラーにはならないのですが…。 いろいろパターンを変えて試してみたのですが、こちらではそのようなエラーが出ないので、ちょっと原因がわかりません。もう一度コピーした数式を見直していただけますでしょうか?数式の入力中に矢印キーなどを使うと、カーソルが移動せずに移動先のセル番地が入力されてしまい、数式が狂ってしまいますが、そのようなことはないでしょうか。 どうしてもエラーが出るようでしたら、名前「リストデータ」の定義は =Sheet1!$B:$B だけでも空白を削除したリストを利用できます。ただし、リストの一番下の項目の下に空白行がたくさんついてきてしまいますが…。

romiromi
質問者

お礼

度々のご回答、ありがとうございました。 > =OFFSET(Sheet1!$B$1,,,COUNTA(Sheet1!$B:$B)-COUNTIF(Sheet1!$B:$B,"")) やはりここでエラーが返ってきてしまいましたが =OFFSET(Sheet1!$B$1,,,65536-COUNTIF(Sheet1!$B:$B,"")) とすることで、希望がかないました! Excel機能+関数でここまで出来るとは感激です。 どうもありがとうございました。

その他の回答 (4)

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

__A 1 2 ab1 3 cd2 4 5 ef4 6 7 gh6  A2:A7 がリストデータ 8 上のような状態を想定し、リストデータはセル範囲A2:A7だとします。 まず、名前ボックスから「リストデータ」を指定し、「リストデータ」を選択状態にします。 次に、メニューから、  編集→ジャンプ→セル選択→選択オプションで空白セルを選択し、OK  選択された空白セルで右クリック→削除→上方向にシフト→OK これで下のようになります。 __A 1 2 ab1 3 cd2 4 ef4 5 gh6  A2:A5 がリストデータ  マクロなど使わず、セル範囲「リストデータ」から空白セルを削除できますが、このような質問ではない?

romiromi
質問者

お礼

ご回答、ありがとうございました。 No.3さま同様、こちらの言葉足らずで意図とは少し異なっていました。 お手数をおかけしてすみませんでした。どうもありがとうございました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

Sheet1「リストデータ」の一番上の行で、空いている列に  =COUNTA(A10:J10) の式を入れます(この式はリストデータはA列~J列で10行目から始まる場合の例です) この計算式はリストデータ行分だけしたにコピーします。 今追加した作業列の一番上のデータを選択し「データ」→「フィルタ」→「オートフィルタ」を選択します。プルダウンをクリックして計算式の値が0の行だけを表示させ、表示された行番号をまとめて選択し「右クリック」→「行削除」 これで空白行は削除できませんか? もし空白行ではなく「空白セルがある行を削除したい」ということであれば0ではなく「オプション」→「n以外(nはリストデータの列数)」を選べばよいでしょう。 意味が違っていたらごめんなさい なお「リストデータ」範囲外にデータを追加されたら自動でリストデータ範囲を訂正するのにはマクロが必要です。もしそれが必要ならもう少し条件を補足してください(リストデータの範囲、最終行判断ルールなど…)

romiromi
質問者

お礼

ご回答、ありがとうございました。 こちらの言葉足らずで意図とは少し異なっていました。 ユーザの入力はそれぞれで、リストデータ入力後の操作は ないと言うことが前提でした。 また、"不要な空白を削除"とは 入力規則_リストで、プルダウンメニューに表示される空白の削除 という意味です。 お手数をおかけしてすみませんでした。どうもありがとうございました。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

まず元データが入っている範囲の名前「リストデータ」を、「リストデータA」に変更します。その際、範囲はデータが入るMAXの行よりも大きくしておく必要があります。 Sheet2の空いている列(たとえばB列)を作業列として使います。 B1に、 =IF(ROW(A1)>COUNTA(リストデータA),"",INDEX(リストデータA,SMALL(IF(リストデータA<>"",ROW(リストデータA),10^5),ROW(A1)))) という数式を入力し、配列数式なのでCtrl+Shift+Enterで確定します。 そのセルをマウスで下にコピーすると、リストデータAの空白行が削除された列になります。念のため大きめの範囲をコピーしておいてください。 名前の定義で、改めて「リストデータ」という名前を定義します。その際、参照範囲には =OFFSET(Sheet1!$B$1,,,COUNTA(Sheet1!$B:$B)-COUNTIF(Sheet1!$B:$B,"")) という数式を入れておきます。 これで入力規則で「リストデータ」の名前を指定すると、空行が削除されたリストが出てくるようになります。

romiromi
質問者

補足

ご回答、ありがとうございます。 記述いただいた > =OFFSET(Sheet1!$B$1,,,COUNTA(Sheet1!$B:$B)-COUNTIF(Sheet1!$B:$B,"")) のSheet1は > Sheet2の空いている列(たとえばB列)を作業列として使います。 より、Sheet2の間違いでしょうか? 名前を定義し、入力規則のリストを設定する際 "数式はエラーと判断されます。続けますか?" のメッセージが出てしまいます、どうしたらよいでしょうか。 引き続き、ご教示いただけますでしょうか。

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

VBAを使わないと難しいでしょう。 リストが変更される都度操作をやり直すなら Sheet2で 最下行まで範囲指定 編集ージャンプーセル選択ー定数ー文字を残す等ーOK 編集ーコピー 空き列に、形式を選択して貼り付けーリンク貼り付けーOk (または空白を無視するーOK) その範囲に名前をつけておく(仮にccとする) 後は Sheet1に戻って、入力(するであろう)セル列を範囲指定 データ 入力規則 リスト 範囲の入力ボックスに =CC 前記で定義した名前 といれてOK Sheet2のリストに使う範囲のセルの値を変えても対応OK しかしスペースのセルが変わると入力規則の操作をやり直しする必要あり。

romiromi
質問者

お礼

ご回答、ありがとうございました。 やはりVBA必要ですね。 可能なら数式で、と思ったのですが難しいですね。

関連するQ&A

  • Excel 入力規則のリストのカーソル位置

     セルに入力規則でリストを設定すると、セルが空白のときにリストを開くと 必ず最下行にカーソルがあります。 リストが長いときは、上に持っていくのに手間が掛かります。 このカーソルの表示する位置を変更することはできるのでしょうか? VBAを使ってできるのなら、その方法を知りたいです。  ご教授を、よろしくお願いいたします。

  • エクセルの入力規則のリストが効かない

    エクセルの入力規則でリストを設定していますが シート内の他のセルをいじっていると 突然リストを選択できなくなる時があります。 [データ]→[入力規則]の「ドロップダウンリストから選択する」はチェックされたままです。 こうなると一度ファイルを閉じても直りません。 新規ブックに全文をコピーしたら直りました。 新規ブックにシートコピーだと駄目です。 これはバグなのでしょうか?

  • エクセルの入力規則リストで1行目に空白を設定したい

    エクセル2000です。 入力規則でリストからの入力をさせる場合、リストの最初の一行目に空白を設定したいのです。 もちろんシートにそのようなリストを作ってリストをセル範囲で指定すればそうなるのですが、セル範囲指定でなく、「元の値」に直接入力でリストを指定する場合、カンマ区切りの先頭に何も入れず、 ,選択肢1,選択肢2,選択肢3 とすると、最初のカンマの前は反映せず3択のリストになってしまいます。最初のカンマの前を全角スペースとすればできるのですが全角スペースは空白ではありません。 これはどうしようもないのでしょうか?

  • VBAで入力規則のリスト参照元の値取得

    エクセル2007を使っています。 VBAツールを作っており、その処理で使われる一機能として 「任意のセルに設定されている入力規則のリストの元の値をVBAで取得する」処理を コード中に書きたいと思っております。 ■質問概要  「入力規則のリスト」が設定されている任意のセルを選択したときに、そのセルに設定されている  「入力規則のリスト」の「元の値」をVBAで取得する方法について教えてください。  ※取得した値は配列型の変数に代入するものとします ■想定イメージ  たとえば、次のようなブックで使うことを想定しております(画像参照)  ※実際はもっとデータ量が多いブックで使う予定です  ・「リスト元の値」というシートで「選択言語」という名前でリストを定義化  ・「通常操作するシート」では値を入力したいセルに対し、「入力規則のリスト」の「元の値」を   「=選択言語」で設定  VBAではこの「通常操作するシート」の入力欄のセルを選択している時に「選択言語」で定義されている  データをすべて取得し配列型変数に代入するという動作をさせたいと思っています。     この方法について教えてくださいますようお願いします。

  • エクセルの入力規則で「空白を無視する」

    エクセル2010です。 あるセルには必ず入力が必要なので、入力規則でリストを設定し、「空白を無視する」のチェックを外しました。 これで、BackSpaceキーで削除した空白値に対してはエラーメッセージが表示されるのですが、Deleteキーで削除した空白値はエラーにならず許可されてしまいます。 これではほとんど意味がありません。 VBAでなら対処できますが、入力規則では無理なのでしょうか?

  • EXCEL 入力規則のリストについて教えてください

    EXCELの入力規則でリストを作っています。 以前、こちらで別なシートにある一覧をリストの元データにする方法を教えていただいたのですが、元データが別なブックにある場合はどうでしょうか? EXCEL2000、XP、2003を使っています。 よろしくお願いします。

  • エクセル入力規則の空白について

    エクセル2007を使用しています。 エクセルの入力規則で下記の条件を満たす方法を教えて下さい。  1.選択できる言葉の中に空白(全角スペースは不可)が存在する  2.セルの範囲指定ではない方法 自分では、リストでカンマを二個連続でやってみましたが駄目でした。 よろしくお願いします。

  • (MS-Excel)「入力規則」で「リスト」に空白セルを含めない方法

    (MS-Excel)「入力規則」で「リスト」に空白セルを含めない方法 たとえば、A1,B1,D1,G1は何らかの文字列が入力されていて、C1,E1,F1が空白セルだとします。 「入力規則」の「リスト」で、「元の値」にA1:G1を指定した場合は、空白もリストされてしまいます。 空白を表示させたくないのですが、作業セルに空白以外をリストさせて元の値とする、という方法は使いたくないです。 調べたところ、名前の定義方法で実現できるみたいですが、良く解りませんでした。

  • エクセルの入力規則のリスト

    教えてください エクセルの入力規則で、シート1がリストの出力、シート2が リスト一覧というブックを作成しているのですが、 シート1でリストから選んだ場合シート2のフォントをそのまま 依存させることは可能なのでしょうか? シート1で普通に入力しているものとの差別化が欲しいのです。 変な質問で申し訳ございませんがアドバイスよろしくお願いします。

  • 入力規則-リスト選択で,リストの頭の行から表示させたいのに。

    1シート目に入力規則-リスト選択したいセルがあり, 2シート目にあるデータから選択するため,名前-定義で「行」に名前をつけて,範囲設定した。 ↓ 入力規則設定では空白を無視にチェックしてみたのですが・・・ 1シート目でプルダウン?(▼)で選択しようとすると,窓には2シート目リストの入力のない行(空欄)がデフォルトとして表示されてしまいます。 ↓ リストの先頭行から表示されるようにするにはどうしたら良いでしょうか?そのような技がありましたら教えて下さい。 (「行」を範囲選択するのがマズイでしょうか?行が増えても1シート目の範囲を設定し直さなくて良いかな,と思って行を範囲設定してみました。) ちなみに,Offset関数(?)は全くわかりません。

専門家に質問してみよう