• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル・コンボボックス内の空白セル削除方法)

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

nishi6の回答

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

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

noname#53281
質問者

お礼

デ・で・出来ました!! ありがとう御座います。 本当に助かりました、nishi6さんがいなかったら 今ごろ到底仕事が終わってませんでした! 本当にありがとう御座いました。

関連するQ&A

  • コンボボックス 連動 VBA

    VBA初心者です。 ご教授ください。 入力フォームにコンボボックスを4っつ リストボックスを一つ作成し 一つ目のコンボでシートを選択後 二つ目以降のコンボボックスでセル範囲を選択し絞り込み、最終のリストボックスに 絞り込み表示を行い、コマンドボタンにて フィルター操作を行いたいのですが 重複表示させずに、絞り込んでいく方法がうまくいきません。下記コードにコンボボックス3以降も記述したのですが、絞り込みができません。よろしくお願いします。 Private Sub UserForm_Initialize() For i = 2 To Worksheets.Count 'シートの数だけ繰り返す ComboBox1.AddItem Worksheets(i).Name '取得したシート名をリストボックスへ Next End Sub Private Sub ComboBox1_Change() Dim Index As Integer Dim strBuf As String Index = ComboBox1.ListIndex 'ワークシートリストの選択された位置 strBuf = ComboBox1.List(Index) 'ワークシート名を取得 Worksheets(strBuf).Activate ' セルA1を左上端にする Application.Goto Reference:=Range("A1"), Scroll:=True ComboBox2.Clear Dim リスト As New Collection Dim 列 As String, 上端セル As String, 最下端セル As String Dim セル範囲 As Range, 各セル As Range 列 = "b" '※3 上端セル = 列 & "4" '※4 最下端セル = 列 & "65536" With Worksheets(strBuf) '※5 Set セル範囲 = .Range(.Range(上端セル), .Range(最下端セル).End(xlUp)) End With For Each 各セル In セル範囲 'セル範囲の各セルについて繰り返し処理 On Error Resume Next '次行が実行時エラーならその次行から継続 リスト.Add 各セル.Value, CStr(各セル.Value) 'Collectionオブジェクトにメンバを追加 If Err.Number = 0 Then '実行時エラーが発生していなければ Me.ComboBox2.AddItem 各セル.Value 'コンボボックスのリストに項目を追加 End If On Error GoTo 0 Next End Sub

  • コンボボックスのリスト全てをセルに書き出す

    private sub UserForm_Initialize()  me.combobox1.list = get_unique_and_visible_list(range("A2:A17"))  me.combobox2.list = get_unique_and_visible_list(range("B2:B17"))  me.combobox3.list = get_unique_and_visible_list(range("C2:C17"))  me.combobox4.list = get_unique_and_visible_list(range("D2:D17"))  me.combobox5.list = get_unique_and_visible_list(range("E2:E17"))  me.combobox6.list = get_unique_and_visible_list(range("F2:F17"))  me.combobox7.list = get_unique_and_visible_list(range("G2:G17"))  me.combobox8.list = get_unique_and_visible_list(range("H2:H17")) end sub private function Get_Unique_and_Visible_List(byref Target as range) as variant ’指定のセル範囲から可視セルを抽出し一意のリストを返す  dim h as range  dim myDic as object  set mydic = createobject("Scripting.Dictionary")  for each h in target.specialcells(xlcelltypevisible)   mydic(h.value) = 1  next  get_unique_and_visible_list = mydic.keys end function 上記方法で、コンボボックスのデータを取得しております。 取得したコンボボックスのリストを Sheet5のIVセルなどに書き出そうと思います。 この場合、 For i=1 To me.combobox1!="" step 1  Worksheets("Sheet5").Range("IV" & i)=me.combobox1.List( i, 0) Next こういった方法にすれば書き出せるのでしょうか? もっと簡単に書き出す方法がありそうですが、中々思いつかないので… 何か知恵をお菓子頂けると嬉しいです! よろしくお願い致します。

  • エクセルVBAコンボボックスについて

    図の左のように、商品リスト欄のセルA3から下方向に大分類(A16まで14種類) セルB3~O3(Bから数えて14個目のO)列から下方向に小分類があります。 P2~P11には1から10までの数字が入っています。 図の右側がユーザフォームで、コンボボックスの番号を入れています。 コンボボックス「1.4.・・・28.」までは大分類を選べるようにして、 コンボボックス「2.5.・・・29.」までは左の大分類に応じた小分類の値を表示させたいと思っています。 大分類「111」→小分類「あ~そ」 大分類「222」→小分類「た~と」といった具合です。 そのコンボボックスの値を指定したセルに入力しようと思っています。 下のように記述した結果、問題が発生しました。 (1)大分類で14個ほどあるリストの3つほどしかでてこない。 (2)Select Caseの構文を使用していて、大分類が14個だから「Case 13」までと しているが、「大分類の数-1」までの変えられる数までにしたい。 アドバイスをいただけると助かります。 ------------------------------------------------------------------ Private Sub UserForm_Initialize() Dim MyVar1 As Variant MyVar1 = Sheets("商品リスト").Range("A3:A" & Range("A3").End(xlDown).Row) Dim MyVar20 As Variant MyVar20 = Sheets("商品リスト").Range("P2:P" & Range("P2").End(xlDown).Row) '種類欄を指定 With ComboBox1 .List() = MyVar1 End With ※・・・(省略)・・・ コンボボックス4から25まで※ With ComboBox28 .List() = MyVar1 End With '数量欄を指定 With ComboBox3 .List() = MyVar20 End With ※・・・(省略)・・・ コンボボックス6から27まで※ With ComboBox30 .List() = MyVar20 End With End Sub '1番目 Private Sub ComboBox1_Change() Dim MyVar1 As Variant ※・・・(省略)・・・ MyVar2~13 As Variant※ Dim MyVar14 As Variant Dim MyVar20 As Variant MyVar1 = Sheets("商品リスト").Range("A3:A" & Range("A3").End(xlDown).Row) ※・・・(省略)・・・ B列からN列まで※ MyVar15 = Sheets("商品リスト").Range("O3:O" & Range("O3").End(xlDown).Row) MyVar20 = Sheets("商品リスト").Range("P2:P11") Select Case ComboBox1.ListIndex Case 0 With ComboBox2 .List() = MyVar2 End With ※・・・(省略)・・・ Case1~ Case12 ※ Case 13 With ComboBox2 .List() = MyVar15 End With End Select End Sub

  • excelのコンボボックスでの階層リスト表示

    (すいません、再投稿します) excelのコンボボックスで、階層にわけてリスト表示させたいのですが、うまくいきません。 数日悩んでまして、どなたか教えてもらえませんか。 シート1:会社名    1列目:会社名  2列目:ID シート2:事業部名   1列目:事業部名 2列目:ID シート3:部門名     1列目:部門名  2列目:ID シート4:担当名     1列目:担当名  2列目:ID ユーザーフォームにそれぞれのコンボボックスを作っています。 ComboBox1:会社名     TextBox1:ID ComboBox2:事業部名    TextBox2:ID ComboBox3:部門名     TextBox3:ID ComboBox4:担当名     TextBox4:ID   たとえば会社名がAのときは、ComboBox2ではAの事業部だけが表示される、というようなかんじです。 同時に隣のIDももってこないといけない為に、苦戦しています。助けてください。。。。 下記記述は3番、まではうまくいくのですが、”4番TextBox2の値代入”がうまくいきません。 -------- Option Explicit Dim シート名 As String Dim 行 As Long Dim 範囲 As String Dim 事業部範囲 As String '-1---ComboBox1------------------- Private Sub ComboBox1_DropButtonClick() シート名 = "会社名" Worksheets(シート名).Activate 'ワークシートをアクティブにする Range("A1").CurrentRegion.Select 'アクティブセル領域を選択する With Selection 行 = .Rows.Count '同上領域の行数を取得する 範囲 = .Cells(1, 1).Address & ":" & .Cells(行, 1).Address '同上領域のアドレスを変数に End With ComboBox1.RowSource = シート名 & "!" & 範囲 'コンボボックスのリストのソースを設定する End Sub '-2----ComboBox1------------------- Private Sub ComboBox1_Click() 'コンボボックス上でクリックされると実行される シート名 = "会社名" 行 = ComboBox1.ListIndex + 1 'コンボボックスで選択された行 + 1 TextBox1.Text = Worksheets(シート名).Cells(行, 2) '対応するセルの値をテキストボックスに End Sub '-3----ComboBox2------------------- Private Sub ComboBox1_Change() ' ComboBox1 が変化した時の処理 シート名 = "事業部名" Dim si As Integer With UserForm1 .ComboBox2.Text = "" si = .ComboBox1.ListIndex ' ComboBox1 の何番目が選択されたかを得る Select Case si Case 0 ' 0番が選択されていたらComboBox2 の内容 Worksheets(シート名).Activate Range("A1:A6").CurrentRegion.Select With Selection 事業部範囲 = .Cells(1, 1).Address & ":" & .Cells(6, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 Case 1 Worksheets(シート名).Activate Range("A7:A11").CurrentRegion.Select With Selection 事業部範囲 = .Cells(7, 1).Address & ":" & .Cells(11, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 Case 2 Worksheets(シート名).Activate Range("A12:A15").CurrentRegion.Select With Selection 事業部範囲 = .Cells(12, 1).Address & ":" & .Cells(15, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 Case 3 Worksheets(シート名).Activate Range("A16:A25").CurrentRegion.Select With Selection 事業部範囲 = .Cells(16, 1).Address & ":" & .Cells(25, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 End Select End With End Sub '---4--TextBox2に値代入-------------------- Private Sub ComboBox2_Click() Dim si As Integer With UserForm1 .ComboBox2.Text = "" si = .ComboBox2.ListIndex ' ComboBox2 の何番目が選択されたかを得る Select Case si Case 0 ' 0番が選択されていたらComboBox2 の内容 Range("A1:A6") シート名 = "事業部名" Worksheets(シート名).Activate Range("A1:B6").CurrentRegion.Select With Selection 事業部範囲 = .Cells(1, 2).Address & ":" & .Cells(6, 2).Address End With '行 = ComboBox2.ListIndex + 1 TextBox2.Text = Worksheets(シート名).Cells(事業部範囲, 2) Case 1 Case 2 Case 3 End Select End With End Sub '----5-Close-------------------- Private Sub UserForm_Deacti Unload UserForm1 End Sub

  • 現在選択中のセルの中に空白があるのなら

    現在選択中のセルの中に空白があるのなら と言うコードを作りたいのですが Sub test() Dim r As Range Set r = Selection 'if rの中に空白があるなら then MsgBox "空白セルがあります" 'end if Set r = Nothing End Sub ここまでしかわかりませんでした。 ifステートメントどうすればいいか教えていただけますか? ご教授よろしくお願いします。

  • 空白セルに●を入れたい

    Excelのセル範囲(例:としてA1からC10)のセルを調べて、 空白のセルになにかの文字(例:●)を打ち込みたい場合のVBAの書き方を教えてください。 Sub セル埋め() Dim r As Range, i As Range Set r = Range("A1:C10") '範囲指定 If Intersect(r, Target) Is Nothing Then For Each i In r If i.Value = "" Then i.Value = "●" Next i End Sub この書き方にこだわっているわけではないので、もっと簡単なやり方でもけっこうです。

  • excel vba コンボボックス更新について

    お世話になります。 シート1のA1セルに 名前 B1セルに期限と入力してあり A2セル リンゴ  B2セル 1703 A3セル バナナ  B3セル 1703 A4セル ぶどう  B4セル 1704 A5セル キウイ  B5セル 1704  A6セル お米   B6セル 1706 A7セル 酒    B7セル 1708 以下 同様に入力しています。 B2以下に入力されているのは4桁の数字で 小さいほうから大きいほうに並んでいます。 同じ数字が入力されていることもあり、 また欠番も存在します。 この期限をユーザーフォームにコンボボックス設置して 重複なし表示させています。以下のコードです。 Private Sub UserForm_Initialize() Worksheets("Sheet1").Select 名前.Value = Cells(2, 1).Value 期限.Value = Cells(2, 2).Value X = 期限.Value nextGyo = Range("B:B").Find(X).Row 'Dim リスト As New Collection 'Dim 列 As String, 上端セル As String, 最下端セル As String 'Dim セル範囲 As Range, 各セル As Range 列 = "B" '※3 上端セル = 列 & "2" '※4 最下端セル = 列 & "65536" With Worksheets("Sheet1") '※5 Set セル範囲 = .Range(.Range(上端セル), .Range(最下端セル).End(xlUp)) End With For Each 各セル In セル範囲 'セル範囲の各セルについて繰り返し処理 On Error Resume Next '次行が実行時エラーならその次行から継続 リスト.Add 各セル.Value, CStr(各セル.Value) 'Collectionオブジェクトにメンバを追加 If Err.Number = 0 Then '実行時エラーが発生していなければ Me.期限.AddItem 各セル.Value 'コンボボックスのリストに項目を追加 End If On Error GoTo 0 Next End Sub 上記の例だと「1703」「1704」「1706」「1708」の 4種類から選択できる状態です。 ここでたとえば コンボボックスで1704を選択して (コンボボックスには自由に入力はさせずにリストの中から選ばせるようにしています) ユーザーフォーム上のボタンを押すと A4セル ぶどう  B4セル 1704 A5セル キウイ  B5セル 1704 を行削除して空白行を上に詰めるコードを書きました。 ただこのときコンボボックスからは リストの更新がされないので「1704」が選択できてしまいます。 削除した時点で「1704」がない状態にするには (自動更新をかける) どうしたらよいでしょうか? (削除するコードの中に  Call UserForm_Initialize と書いてみたのですが  何も変化ありませんでした) どうかよろしくお願いいたします

  • コンボボックスの項目と同じ項目をシートから削除する

    よろしくお願いします Private Sub 追加_Click() Dim lRow As Long With Worksheets("開始").Cells(Rows.Count, "B").End(xlUp) .Offset(1).Value = Me.combobox1.Value End With End Sub combobox1.RowSource = B2:B200 上記でリストを作成していますが、 combobox1の項目を選んで、CommandButton1クリックしたら 同じ項目をシートのセル(B列)から選んで削除する その後、空白を詰める このようにできないでしょうか

  • 空白状態でEnterを押したら指定のセルに飛びたい

    例えばF5セルで何も入力せずEnterを押したらC9に入力セルを飛ばしたくて 自分の力で調べた限りでは下のコードで可能なのですが Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Range("F5,C9") If Not Intersect(Target(1), .Cells) Is Nothing Then Application.EnableEvents = False .Select Target(1).Activate Application.EnableEvents = True End If End With End Sub 上記コードはF5セルを選ぶと、次に飛ぼうとするC9セルが見えてしまいます。 これが見えずにできる他の方法があるか色々調べても見つかりませんでした; 何か可能な策はありますでしょうか・・?

  • コンボボックス3つを連動させたい

    VBA初心者なのですが、参考書やインターネットを勉強しながら取り組んでいます。行き詰っているので助け舟を頂戴できればと思います。 やりたいのは1800アイテムほどある食品リストからコードと食品名を検索するプログラムです。 もとになるデータは、B食品群、C食品コード、D食品名、あとは成分値が右にずっと続いています。 コンボボックスを3つ作り、食品群、食品コード、食品名が表示されるようにしました。 これらを連動させ、 1食品群ー食品名で探す 2コードー食品名で探す 3食品名を直接入力して探す いずれにも対応できるようなもの、最終的には任意のセルに選択した食品名及びその食品のコードを表示できるようにしたいのです。 リスト範囲は Private Sub UserForm_Initialize() '食品群のリスト範囲’(食品群は18種) ComboBox1.RowSource = "処理!B3:B20"←リスト選択用に見出しの部分だけ別シートに作りました '食品名のリスト範囲’ ComboBox2.RowSource = "食品成分表!D4:D1885" '食品コードのリスト範囲’ ComboBox3.RowSource = "食品成分表!C4:C1885" End Sub とし、 Private Sub comboBox1_Change() '食品群リスト、食品名リストを連動させる’ Dim selIndex As Integer selIndex = Me.ComboBox1.ListIndex Select Case selIndex Case 0 Me.ComboBox2.RowSource = "食品成分表!D4:D146" <以下Case 18まで続く> End Select End Sub と、食品群と食品は連動できたのですが、食品群とコード、コードと食品名がつなげられません。 Addltemでひとつづつ書いてもみましたが、1800ともなると量が多すぎるようでエラーになってしまいます。 よろしければアドバイスをお願いします。