• ベストアンサー

複数行表示されたリストボックスから最後の行だけ削除するには

エクセルのユーザーフォーム上にあるリストボックスですが 必要に応じてボタンクリックでAddItemにより項目が追加されて行くリストボックスがあります この複数行表示された項目の内 別のボタンクリックで最後に追加された行だけ削除していくには どのように記述すればいいのでしょうか ------------- abcde fghij klmno pqrst ------------ と表示されていたリストボックスから クリックするたびに ------------- abcde fghij klmno ------------- ------------- abcde fghij ------------- の様に最後の行だけ削除をしたいのです 単純に ListBoX1.Clear では全て消されてしまい こまっています ぜひお力をお貸し下さい よろしくお願いします

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

  • ベストアンサー
  • stouma
  • ベストアンサー率35% (142/399)
回答No.2

失礼しました 最後の行では ListBox1.RemoveItem (ListBox1.ListCount - 1) と記載してください。 なお、下記同様に On ErrorとErrHanderは記載してください。 また、記載しない場合は If ListBox1.ListCount>0 Then等で リストにデータがないときは処理しないよう 心がけてください。

ecoecojp
質問者

お礼

ありがとうございました 助かりました

その他の回答 (2)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

「最後の行だけ削除」ですから、こんな感じで、どうでしょうか。 Private Sub CommandButton1_Click() Dim Lcnt As Long Lcnt = Me.ListBox1.ListCount If Lcnt > 0 Then   Me.ListBox1.RemoveItem (Lcnt - 1) End If End Sub

ecoecojp
質問者

お礼

ありがとうございました 参考になりました

  • stouma
  • ベストアンサー率35% (142/399)
回答No.1

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)   On Error GoTo ErrHander   ListBox1.RemoveItem (ListBox1.ListIndex) ErrHander:   Err.Clear End Sub こんなんではだめでしょうか? なお、Office Excel 2003にて動作確認はしました。 ダブルクリックにより削除されます。 (質問の際にはOfficeのバージョンも明記のこと)

関連するQ&A

  • リストボックスからリストボックスへ(複数列)

    データ読み込み済みのリストボックス1(4列)から空白のリストボックス(4列)へ、コマンドボタンをクリックしたらデータが追加されるコードを作成しました。 Private Sub CommandButton1_Click() Dim i As Long For i = 0 To 8 With ListBox1 ListBox2.AddItem .List(.ListIndex, i) End With Next i データは追加されましたが、縦方向にデータが追加され、 横方向に追加されませんでした。 どうすれば複数列のデータをそのまま複数列のリストボックスに追加できるでしょうか。 よろしくお願いします。 End Sub

  • ユーザフォームのリストボックス

    お世話になります。 ユーザフォームのリストボックス内の下記2個のどちらかを選択し Private Sub UserForm_Initialize() ListBox1.AddItem ("印刷プレビュー") ListBox1.AddItem ("印刷") End Sub CommandButton1をクリックして Worksheets("Sheet1").PrintOut か Worksheets("Sheet1").PrintPreview を実行したいのですが どうやってリストボックスとコマンドボタンを 連動できるようにすればいいのでしょうか コマンドボタンのみだったら出来るのですが、 リストボックスを使うとうまくいきません。 ご教授よろしくお願いいたします。

  • リストボックス

    すいません以下の処理に困っております。 リストボックスで値を取得して他のリストボックスにその値を 出力したいのですがまったくできません。 <例> リストボックス1 a b c リストボックス2(上で選択した値を出力) a ちなみに構文は、 ------------------------------------------------------------ Private Sub btn選択_Click() ListBox2.Text = ListBox1.Text 'ListBox1.ListIndex + 1 & ": " & ListBox1.Text End Sub Private Sub CommandButton1_Click() End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) btn選択_Click End Sub Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean) btn選択_Click End Sub Private Sub UserForm_Initialize() With ListBox1 .AddItem "スケジューラ" .AddItem "データ変換" .AddItem "DWH Server" .AddItem "PPP Server" .AddItem "ファイヤーウォール" .AddItem "暗号オプション" End With End Sub ---------------------------------------------------- 初心者でまったくできません。 御教授をお願いします。

  • リストボックスで選択した項目を削除するには

    Excel2003を使用しています。 ユーザフォームのリストボックスには"Sheet1!A1:C10"が表示されるようになっています。 Private Sub UserForm_Initialize()  UserForm1.ListBox1.ColumnCount = 3  UserForm1.ListBox1.RowSource = "Sheet1!A1:C10" End Sub たとえばリストボックス上で3行目(A3:C3)を選択して、削除ボタンをクリックすれば選択された値が表示から消えて、セル上の値も削除されるようにしたいのです。 できれば削除されると同時に4行目(A4:C4)以降の値が上にスライドされるようにできればいいのですが、まだまだ理解できない部分が多くて自分では解決できませんでした。 ご存知の方がいらっしゃいましたらご教授頂けないでしょうか。 宜しくお願い致します。

  • リストボックスのリストを削除する

    リストボックスのリストを削除する アドバイスをお願いします。 下の構文でユーザーフォーム内のリストボックスに リストを表示させるようにしました。 Private Sub UserForm_Initialize()  With ListBox1 .RowSource = "データー!B3:B33" End With End Sub 表示されたリスト内で、不要になったリストをコマンドボタンの押下したときに データーシートのB3からB33の中から選択したリストと同じデーターを 探して削除する方法をお教えください。

  • リストボックスに追加

    リストボックスに項目を使う時にAddItemをつかいますよね。でも、AddItemをつかうと下に下にと追加されていってしまいます。これを上に上に追加していきたいのですがどうすればいいのでしょうか?

  • リストボックスから複数行を選択し、その複数のデータをセルに入力したい

    Excel2003でマクロをつくっています。シートのB列を右クリックすると、リストボックスが表示され 任意1行を選択するとシートのB列、C列、D列のセルにデーターが入力されます。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ’シートが保護されていたら保護を解除 If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If ActiveCell.Value = ListBox2.List(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.List(ListBox2.ListIndex, 1) ActiveCell.Offset(0, 2).Value = ListBox2.List(ListBox2.ListIndex, 2) ActiveSheet.Protect End If End With Unload UserForm3 End Sub このリストボックスから複数の行を選択し、シートのB列、C列、D列のセルにデーターを入力したいのですが、Multiselectプロパティを変更しても、一行のみしか入力できません。 上のコードをどうかえたらよろしいでしょうか。

  • Excel VBA リストボックスの複数列表示の方法について

    すいません、エクセルVBAのユーザーフォームのリストボックスの表示方法について質問があります。 シートのセルに    A列   D列   G列 1行 りんご  赤   120円 2行 みかん  黄   130円 3行 すいか  緑 110円 4行 りんご  赤 160円 . ・・・  ・   ・・・ . と、50行まで値を入れます。 VBAでユーザーフォームを挿入し、 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "りんご" .AddItem "みかん" .AddItem "すいか" End With End Sub でコンボボックスの値を設定し、次に Private Sub ComboBox1_Change() Dim i As Integer For i = 1 To 50 If Cells(i, 1).Value = ComboBox1.Value Then With ListBox1 .ColumnCount = 3 .AddItem Cells(i, 1) End With End If Next i End Sub このときコンボボックスと同じ値の行について、 リストボックスにA列、D列、G列を表示させるにはどうしたらいいのでしょうか。 例えばコンボボックスで「りんご」を選択したときに、 リストボックスを りんご 赤 120円 りんご 赤 160円 と表示させたいのですが、 .AddItem Cells(i, 1) では一列だけしか表示できません。 Rowsorceを使ってみたりしましたが、どうにもうまく出来ませんでした。 よろしくお願いいたします。

  • VBAで、リストボックスの内容をセルに

    VBA初心者です。よろしくお願いいたします。 既に項目がいくつか入っているListBox1から、「AddItem.」を用いて「追加」機能を作り、項目が入っていないListBox2にいくつか追加したとします。 この、ListBox2の内容をセルに反映させるには、どのようにすれば良いのでしょうか。 分かりにくい文章になってしまいましたが、ご存じの方、教えて下さいませんでしょうか。

  • リストボックスについてです。

    リストボックスについてです。 B列をダブルクリックするとリストボックスが立ち上がり、データを選択してB列に表示できるように設定されていますが、困った現象が起こっています。 例えば、sheet1のB10にダブルクリックでリストボックスを表示し、そこから「あいうえお」という名前を表示させて、sheer1編集が終わったとします。 次のsheet2でB1をダブルクリックしているのに、sheet2のB10に勝手に「あいうえお」と表示されてしまいます。 コードは以下になってます。 VBA初心者なのでエクセルのサイト等からコピペ等して作ったコードです。 どこかおかしな箇所があると思うのですが、何処がおかしいのかがわかりません。 お分かりになる方、教えていただければ助かります。 ' ◆Worksheetのコード◆ '---------------------------------------------------- '選択範囲を変更したときに実行される Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) UserForm1.ListBox1.RowSource = "データ!A1:A100"  '表示するデータ範囲 UserForm1.ListBox1.Font.Size = 12    'フォントサイズ If Target.Column = 2 Then 'B列なら 行 = Target.Row '行番号を取得する UserForm1.Show 'ユーザーフォームを表示する End If End Sub '=================================================================================== ' ◆UserForm1のコード◆ '-------------------------------------------------------------------------- Private Sub ListBox1_Click() 'クリックされたときに実行される If 行 <> 1 Then '1行目でなければ Cells(行, 2) = ListBox1.Value 'リストボックスの値をセルにセットする End If UserForm1.Hide 'ユーザーフォームを非表示にする End Sub Private Sub UserForm_Deactivate() '非アクティブになったときに実行される Unload Me 'ユーザーフォームをメモリから削除する End Sub '========================================================================================= '============================== ' ◆標準モジュールのコード◆ Option Explicit Public 行 As Variant '行番号 Sub auto_open() Load UserForm1 'ユーザーフォームをメモリに読み込む End Sub '==============================

専門家に質問してみよう