OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

エクセル・コンボボックス内の空白セル削除方法

  • 困ってます
  • 質問No.106527
  • 閲覧数2529
  • ありがとう数5
  • 気になる数0
  • 回答数3
  • コメント数0

すみません前回教えて頂いたばかりなのですが、
コードの代入の仕方がわかりません
宜しくお願いします。
http://www.okweb.ne.jp/kotaeru.php3?q=105652
の質問で、
--------------------------------------------
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Enterを押した場合の処理
If KeyCode = vbKeyReturn Then
'ComboBox1.Textがリストに無い場合
If ComboBox1.ListIndex = -1 Then
Dim myFillRange As Range 'ComboBox1の内容リスト
Dim myAddRange As Range '付け加えるセル
'追加前のListFillRange・・・セル範囲1
Set myFillRange = Range(ComboBox1.ListFillRange)
'追加する位置(追加前のListFillRangeの次の行)・・・セル範囲2
Set myAddRange = Range("A" & (myFillRange.Rows.Count + 1))
'ComboBox1に入力した値を登録
myAddRange = ComboBox1.Text
'ListFillRangeを更新する(セル範囲1とセル範囲2の結合)
ComboBox1.ListFillRange = Union(myFillRange, myAddRange).Address
End If
End If
End Sub
--------------------------------------------
上記のように明快なご回答いただいたのですが、
コンボボックス内のリストにある空白行を何とか消せないものかと、空白セルを消すコードをマクロ記録で作って見たのですが(下記参照)、
このコードをどのように入れ込んだらうまく行くのか
解りません?宜しくお願い致します。
----------------------------
Sub Macro1()
Columns("A:A").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
End Sub
-------------------------
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル13

ベストアンサー率 68% (791/1163)

sanokuさんのコンボボックスの位置がわからなかったので次の2行を入れるかどうか迷ったんですが複雑になると思い書きませんでした。
このイベントに入ったら画面更新を止めて、処理が終わったら更新が起きるようになります。

最初の行に Application.ScreenUpdating = False
最後の行に Application.ScreenUpdating = True

を入れてください。
お礼コメント
noname#53281

デ・で・出来ました!!
ありがとう御座います。
本当に助かりました、nishi6さんがいなかったら
今ごろ到底仕事が終わってませんでした!
本当にありがとう御座いました。
投稿日時 - 2001-07-20 08:15:21
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 68% (791/1163)

Selection.SpecialCells(xlCellTypeBlanks).Select を使うと、A列のListFillRange対応範囲に空白セルが無かった場合、エラーを起こすような気がします。Selectできないことになるからです! 下記は空白行(未登録という意味です)があれば削除してListFillRangeを再定義します。Listに新規追加時に削除しますので、最初に未登録(List部 ...続きを読む
Selection.SpecialCells(xlCellTypeBlanks).Select を使うと、A列のListFillRange対応範囲に空白セルが無かった場合、エラーを起こすような気がします。Selectできないことになるからです!

下記は空白行(未登録という意味です)があれば削除してListFillRangeを再定義します。Listに新規追加時に削除しますので、最初に未登録(List部分に何も入れずに)でEnterし空白行を削除してしまえば、その後は空白行の登録は即座に削除(無効)されてしまいます。

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Enterを押した場合の処理
If KeyCode = vbKeyReturn Then
'ComboBox1.Textがリストに無い場合
If ComboBox1.ListIndex = -1 Then
Dim myFillRange As Range 'ComboBox1の内容リスト
Dim myAddRange As Range '付け加えるセル
'追加前のListFillRange・・・セル範囲1
Set myFillRange = Range(ComboBox1.ListFillRange)
'追加する位置(追加前のListFillRangeの次の行)・・・セル範囲2
Set myAddRange = Range("A" & (myFillRange.Rows.Count + 1))
'ComboBox1に入力した値を登録
myAddRange = ComboBox1.Text
'ListFillRangeを更新する
UsedRange.Columns("A:A").Select
If Selection.Rows.Count > Application.CountA(Selection) Then
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
End If
ComboBox1.ListFillRange = UsedRange.Columns("A:A").Address
ComboBox1.Activate
End If
End If
End Sub
補足コメント
noname#53281

nishi6さん、スバヤイご回答ありがとう御座います。
そうなんです、どうしても自分で書くとエラー!
VBの道は、僕にとって険しい道のりになりそうです。
さて、上記コードを使わせていただきましたが
なぜか、エンターを押すとAの行に画面が飛び、空白行が増えてしまいます。
コンボボックスのプロパティーを見るとListFillrangeが
なぜか$A$1:$A$130に変化しています。もう1度そこにA1:A10と入力してもコンボボックスでエンターを押すと自動的に$A$1:$A$130に戻ります。
僕の書き込みミスでしょうか?
宜しくお願いします。
投稿日時 - 2001-07-19 18:36:14

  • 回答No.2
レベル13

ベストアンサー率 68% (791/1163)

空白セルが無い場合の対応のためにUsedRangeを使いましたが意味が無かったみたいです。sanokuさんは当然、B列以降を自由に使っておられるわけですよね。私はA列しか入力してませんのでうまくいっていました。(そう見えていた!) 空白セルが無い場合も含めて下記の様に書き直しました。試してみて下さい。 それとA列の表示形式は文字列にして下さい。標準の場合はスペース+数値を入力すると同一値が何個も登 ...続きを読む
空白セルが無い場合の対応のためにUsedRangeを使いましたが意味が無かったみたいです。sanokuさんは当然、B列以降を自由に使っておられるわけですよね。私はA列しか入力してませんのでうまくいっていました。(そう見えていた!)

空白セルが無い場合も含めて下記の様に書き直しました。試してみて下さい。
それとA列の表示形式は文字列にして下さい。標準の場合はスペース+数値を入力すると同一値が何個も登録されてしまいます。(原因は不明です。文字列設定なら2つ目からは登録できません)

蛇足ですが、コンボボックスなので、選択するリストはソートされているほうがいいような気もします。また、スペースも登録できますが、不要なら削除したり登録できなくすることも考えられます。

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Enterを押した場合の処理
If KeyCode = vbKeyReturn Then
'ComboBox1.Textがリストに無い場合
If ComboBox1.ListIndex = -1 Then
Dim myFillRange As Range 'ComboBox1の内容リスト
Dim myAddRange As Range '付け加えるセル
'追加前のListFillRange・・・セル範囲1
Set myFillRange = Range(ComboBox1.ListFillRange)
'追加する位置(追加前のListFillRangeの次の行)・・・セル範囲2
Set myAddRange = Range("A" & (myFillRange.Rows.Count + 1))
'ComboBox1に入力した値を登録
myAddRange = ComboBox1.Text
'ListFillRangeを更新する
Range("A:A").Select
If Selection.SpecialCells(xlCellTypeBlanks) Is Nothing Then

Else
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
End If
ComboBox1.ListFillRange = Range(Range("A1"), Range("A1").End(xlDown)).Address
ComboBox1.Activate
End If
End If
End Sub
補足コメント
noname#53281

ご回答ありがとう御座います!
コンボボックス内の動作はきちんとできました!(スゴイ!)
が・・・、文字を入力してエンターを押すと、なぜかデーター行にジャンプしてしまいます。
そこで行の最後に「ActiveWindow.ScrollColumn = 1」
と入力してみたのですが、なんだか画面が一瞬スクロール
します。(スクロールの命令だから当然なんですが)
画面が移動しない(データー行にジャンプしない)何か良い方法は無いでしょうか?宜しくお願い致します。
投稿日時 - 2001-07-20 06:20:33
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ