ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

EXCEL VBAコミュのプルダウン内の空白データを削除したいです

  • mixiチェック
  • このエントリーをはてなブックマークに追加
皆様、こんばんは。

エクセルのセルに会社組織を書き、参照範囲に名前を付けたあと、
データ入力規制をおこない、セルB10にて部長Aをプルダウンで選択したら、
セルC10では部長Aの部下の課長だけをプルダウンで選択できるようにしました。
同様に、セルB10で部長Bを選ぶと、セルC10では課長Cか課長Dがプルダウンで
表示されます。
   A     B     C
1 社長    部長A   課長A
2              課長B
3       部長B   課長C
4              課長D
5       部長C   課長E
6              課長F

なおセルB10は、データの入力規制で、入力値の種類は「リスト」を選択し、
元の値は「=INDIRECT(A10)」と設定しています。

実際の入力状況は添付JPEGファイル「A」をご覧いただければ幸いです。
また、「名前の管理」は、添付JPEGファイル「B」の通りです。
B1からB6までの参照範囲は、「社長」という名前。
C1とC2の参照範囲は、「部長A」という名前
C3とC4の参照範囲は、「部長B」という名前
といった具合です。

ここから私がご相談したい件なのですが、セルB10でプルダウンを出すと、
「部長A」と「部長B」の間に、空白データが入ってしまっています。
「部長B」と「部長C」の間も、同様に空白データがはいってしまいます。
これは、参照範囲指定のときに、B1からB6をまとめて指定しているから
当然なのですが、この空白データをプルダウン内から消去したいのです。
ただし、現状のSheetの配置のように、「部長A」「部長B」「部長C」の
間(B2、B4、B6)は、空欄セルが必要なのです。

これらの範囲指定は、VBAでプログラムを組んでいます。
ThisWorkbook.Names.Add Name:="社長", RefersToR1C1:="='組織'!R1C2:R6C2"

もし、宜しければ、アドバイスいただければ幸いです。

宜しくお願い申し上げます。

PS 私は説明が上手でなく、わかりにくいようであれば、再度ご説明するように
  致します。






コメント(13)

どこか別セルに空白を含まないものを置いておいて
それを名前の定義に使うとか
もしくは、名前の定義を使わずにVBAで入力規則の元の値の部分に
空白以外のセル値を入力させてしまうとか
マリ男様、

いつも本当にありがとうございます!

>どこか別セルに空白を含まないものを置いておいて
>それを名前の定義に使うとか

そうですね!その方法ができるレイアウトを再考してみます!

>どこか別セルに空白を含まないものを置いておいて
>それを名前の定義に使うとか

ThisWorkbook.Names.Add Name:="社長", RefersToR1C1:="='組織'!R1C2:R6C2"
で今VBAでおこなっておりますが、範囲指定はRefersToR1C1:="='組織'!R1C2:R6C2"
しか記載方法をしりません。。。他の方法ございますか?





>3
例えば、入力規則のリストの元の値に
「部長A,部長B,部長C」
という文字列を入力し入力規則を設定すれば、リストは
部長A
部長B
部長C
というようになります

これをマクロの記録を使って記録し、そのコードを
今回の状況に合わせて変更する
例えば、For文でB1:B6のセル値を順に見ていき
「部長A,部長B,部長C」というような文字列が出来るようなコードを最初に書き
そのあとに入力規則のリストの元の値にFor文のところで出来た文字列を入れて
入力規則を設定するようなコードにする
マリ男様、

>どこか別セルに空白を含まないものを置いておいて
>それを名前の定義に使うとか

最終的には、マリ男様のアドバイスどおりに、別の
場所に空白を含まないものを置きました。

御蔭さまで目的達成できました。
本当にありがとうございました!
出来たようでよかったです

とりあえず、VBAのサンプルを作ったので載せておきます
ちなみに、B11セルに入力規則を設定しています

Sub Macro1()
For i = 1 To 6
  If Range("B" & i).Value <> "" Then
    If IsEmpty(rng) = False Then
     rng = rng & "," & Range("B" & i).Value
    Else
     rng = Range("B" & i).Value
    End If
  End If
Next i
Range("B11").Validation.Delete
Range("B11").Validation.Add Type:=xlValidateList, Formula1:=rng
End Sub
Sub Macro2()
For i = 1 To 6
  If Range("B" & i).Value <> "" Then
    rng = rng & Range("B" & i).Value & ","
  End If
Next i
rng = Left(rng, Len(rng) - 1)
Range("B11").Validation.Delete
Range("B11").Validation.Add Type:=xlValidateList, Formula1:=rng
End Sub
>6
私の方では状況が再現できなかったので
今現在ではちょっと原因の特定をすることはできませんね

実際のBookを見ていないので分かりませんが
もしかするとGoogleなどで検索すれば、同様の状況の解決策が
載っているサイトがあるかもしれません
また、新しいBookに作り直して、そちらでやってみると
出来るかもしれません

お力になれず、すみません
マリ男様、

さっそくありがとうございました。
わかりました。

「名前の管理」を見るかぎり、問題ないように見えるのですが、
なぜなのか、わからないのですが、ネットでまた調べてみます。

ありがとうございました!
マリ男様、

こんにちは。
まっさらな何も手を加えていないエクセルのセルに、DS1、CN1と名前を
つけようと思ったところ、エラーが起きました。
名前自体が、何らかの名前をつけるルールに違反している模様です。
もう少し調べてみます。。。。


^^^^^^^

開発者が独自に行える名前付けには、最低限のルールが存在します。以下、このルールを備忘録に書き込んでいきましょう。

名前に用いることのできる文字(ここでは数値を含む)の種類は、アルファベット、数字、漢字、ひらがな、カタカナ、アンダースコアのみです。
先頭に用いる文字(ここでは数値を含む)は、全角文字か英字のみに限定されます。
例えば、数字や「_」のアンダースコアは使用できません。
名前の文字数は半角で255文字以内、全角では127文字以内で記述しなければなりません。
英字と数字は必ず半角にし、日本語の場合は全角にする習慣をつけましょう。
また、日本語の名前付けは不具合が発生することが想定されますので、できるだけ英数字の方がベターです。

ピリオドやカンマ、スペースなどは使えません。
予約語などAccess内部で定義付けされている種類のものは使えません。以下、参考・・・。
Dim
As
Select
Integer
Beep
Move

EOF
acTable
Function
などなど・・・


1つのプロシージャ内で同じ名称を使うことはできません。但し、モジュール内では使用できます。
変数名においては、大文字、小文字の区分はありません。
例えば、INT_NUMBER も int_number も同じ変数名として扱われます。当然、Int_Number のように大文字と小文字を併用しても問題ありません。
> 10 PAOPAOさん 
| まっさらな何も手を加えていないエクセルのセルに、DS1、CN1と名前を
| つけようと思ったところ、エラーが起きました。
DS1・CN1 共に、セル座標とバッティングするので名前として使えません。
DS_1・CN_1等としてください。
> まっさらな何も手を加えていないエクセルのセルに、DS1、CN1と名前を
> つけようと思ったところ、エラーが起きました。

「DS1」や「CN1」だと「セル番地」と同じになりますから、そのような名前は付けられません。

[6]に元となる原因のコメントが書かれていたのでしょうか?
エクセル2007以降だとXFD列までありますから、「アルファベット+数字」という名前は、避けたほうが無難なのではないかと思います。
Amlaid様、まじん様

さっそくありがとうございます!
そうか!!セル番地とバッティングするのですねっ!!

VBAのコマンドと一致するのがダメと思っていたのですが、
セル番地もダメだったのですね!

とても勉強になりました!

でも、そうですね、とりあえず _ にしてみます。

なぜなのかわからず、1週間以上先に進むことができませんでした。
本当に助かりました!
ありがとうございました!

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

EXCEL VBA 更新情報

EXCEL VBAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。