Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10594 / 13646 ツリー ←次へ | 前へ→

【20900】リストボックスの項目追加、削除 mickeypapa 04/12/23(木) 22:23 質問[未読]
【20907】Re:リストボックスの項目追加、削除 Jaka 04/12/24(金) 11:21 回答[未読]
【20908】Re:リストボックスの項目追加、削除 mickeypapa 04/12/24(金) 11:59 質問[未読]
【20909】Re:リストボックスの項目追加、削除 Jaka 04/12/24(金) 14:40 回答[未読]
【20915】Re:リストボックスの項目追加、削除 mickeypapa 04/12/24(金) 17:43 お礼[未読]
【20942】Re:リストボックスの項目追加、削除 Jaka 04/12/27(月) 9:30 発言[未読]
【20952】Re:リストボックスの項目追加、削除 mickeypapa 04/12/27(月) 20:56 お礼[未読]

【20900】リストボックスの項目追加、削除
質問  mickeypapa WEB  - 04/12/23(木) 22:23 -

引用なし
パスワード
   申し訳ありませんが、ユーザーフォームのリストボックスに項目を追加
削除する方法について教えて下さい。

ユーザーフォームにオプションボタンを2つ、リストボックスを1つ
テキストボックスを3つ、コマンドボタンを3つ(登録、削除、修正)配置しております。
動作は、
1,登録ボタンを押すとテキストボックスの内容をリストボックスとシートに項目  を追加する。TextBox1→リスト1列目、TextBox2→リスト2列目
  (重複するデータは1列目を調べて登録しない)
2,削除ボタンを押すとリストボックスの選択している行と、その行に該当する項  目をシートから削除する。(シートに出来る空白行を削除してリストボックス  の表示と同じ状態にする。
3,修正ボタンを押すと、リストボックスの選択している項目をテキストボックス  に表示する。
シートは非表示で使いたいと思っております。

一応コードは、ここまで書きましたが、リストが2列になった登録から行き詰まっております。
Option Explicit
Dim myRow

Private Sub OptionButton1_Click()
  TextBox3.Visible = False
  myRow = Sheets("sheet1").Range("B65536").End(xlUp).Row
  With ListBox1
    .ColumnCount = 2          '列数の設定
    .RowSource = "Sheet1!A2:B" & myRow 'リスト最終行
    .ColumnHeads = True         '列見出しを付ける
    .ColumnWidths = "60pt,60pt"     '列幅設定
    .ListIndex = 0           '1行目を選択状態にする
  End With
End Sub

Private Sub OptionButton2_Click()
  TextBox3.Visible = True
  myRow = Sheets("sheet1").Range("E65536").End(xlUp).Row
  With ListBox1
    .ColumnCount = 3          '列数の設定
    .RowSource = "Sheet1!C2:E" & myRow 'リスト最終行
    .ColumnHeads = True         '列見出しを付ける
    .ColumnWidths = "40pt,40pt,40pt"  '列幅設定
    .ListIndex = 0           '1行目を選択状態にする
  End With
End Sub


Private Sub UserForm_Initialize()
  OptionButton1.Value = True
  TextBox3.Visible = False
  
  myRow = Sheets("sheet1").Range("B65536").End(xlUp).Row
  With ListBox1
    .ColumnCount = 2          '列数の設定
    .RowSource = "Sheet1!A2:B" & myRow 'リスト最終行
    .ColumnHeads = True         '列見出しを付ける
    .ColumnWidths = "60pt,60pt"     '列幅設定
    .ListIndex = 0           '1行目を選択状態にする
  End With
  
End Sub
宜しくお願い致します。

【20907】Re:リストボックスの項目追加、削除
回答  Jaka  - 04/12/24(金) 11:21 -

引用なし
パスワード
   こんにちは。

いまいちよく解りませんでしたが、こう言ったようなことナもでしょうか?

MsgBox ListBox1.ListIndex + 2 & "行目"
TextBox1.Value = Cells(ListBox1.ListIndex + 2, 1) リストボックス1列目
TextBox2.Value = Cells(ListBox1.ListIndex + 2, 2) リストボックス2列目
TextBox3.Value = Cells(ListBox1.ListIndex + 2, 3) リストボックス3列目

【20908】Re:リストボックスの項目追加、削除
質問  mickeypapa WEB  - 04/12/24(金) 11:59 -

引用なし
パスワード
   ▼Jaka さん:
回答有り難うございます。
説明不足を補足致します。
例えば、Sheet1の
A列に業者コード
B列に業者名
C列に品名コード
D列に品名
E列に単価等が入力されているシートがあり、それを他のユーザーフォームで
コンボボックス、VLOOKUP関数などで利用していますが、そのシートの内容を変更するために、オプションボタンで選択(業者、品名)した内容をリストボックスに表示する。業者を選ぶとリストボックスにSheet1のAB列が表示され、登録ボタンを押すとTextBox1の内容が、シートのA列、TextBox2の内容がシートのB列に書き加わり、リストボックスにもその加わった内容が反映される。削除ボタンを押すとリストボックスで選択している項目と同じ項目をSheet1(AB列)から削除し、その削除されたデータ内容がリストボックスにも反映される。修正ボタンを押すと、リストボックスで選択している項目が、それぞれのテキストボックスに表示され、修正登録ボタンを押すと、その項目がリストボックス、Sheet1とも上書きされる。と言うような動作を考えています。何卒よろしくお願いいたします。

【20909】Re:リストボックスの項目追加、削除
回答  Jaka  - 04/12/24(金) 14:40 -

引用なし
パスワード
   一応、これで対象基準セルがわかると思います。
後は、列番を+1するなりして、テキストボックスの値を書き換えるなりしてください。
行番もわかりますから、削除も出来ます。

Private Sub CommandButton1_Click()
  mmc = Range(ListBox1.RowSource).Column
  mmr = Range(ListBox1.RowSource).Row
  TextBox1.Value = Cells(ListBox1.ListIndex + 2, mmc)
  TextBox2.Value = Cells(ListBox1.ListIndex + 2, mmc + 1)
  If ListBox1.ColumnCount > 2 Then
    TextBox3.Value = Cells(ListBox1.ListIndex + 2, mms + 2)
  End If
  Cells(ListBox1.ListIndex + 2, mmc).Select
  MsgBox "このデータは、" & vbLf & _
      "リストボックス" & ListBox1.ListIndex + 1 & "行目から" & vbLf & _
      "対象セル" & Cells(ListBox1.ListIndex + 2, mmc).Address
End Sub

【20915】Re:リストボックスの項目追加、削除
お礼  mickeypapa WEB  - 04/12/24(金) 17:43 -

引用なし
パスワード
   ▼Jaka さん:
>  mmc = Range(ListBox1.RowSource).Column
>  mmr = Range(ListBox1.RowSource).Row
>  TextBox1.Value = Cells(ListBox1.ListIndex + 2, mmc)
>  TextBox2.Value = Cells(ListBox1.ListIndex + 2, mmc + 1)
>  If ListBox1.ColumnCount > 2 Then
>    TextBox3.Value = Cells(ListBox1.ListIndex + 2, mms + 2)
>  End If

こんにちは、
回答有り難うございます。
TextBox3.Value = Cells(ListBox1.ListIndex + 2, mms + 2)
のところの"mms"は"mmc"のタイプミスかと思いますが、
"mmc"と"mmr"の変数を宣言して実行したところ(Dim mmc, mmr)
見事に対象のセルアドレスを取得できました。後はリストボックスへの追加と削除を考えたいと思います。アドバイス有り難うございました。ちなみに変数の宣言は、Variantで良かったのですよね?

【20942】Re:リストボックスの項目追加、削除
発言  Jaka  - 04/12/27(月) 9:30 -

引用なし
パスワード
   >TextBox3.Value = Cells(ListBox1.ListIndex + 2, mms + 2)
>のところの"mms"は"mmc"のタイプミスかと思いますが、
すみません。
直し忘れました。

>ちなみに変数の宣言は、Variantで良かったのですよね?
ええっと、ちゃんと宣言をする方なら、Longを使うと思います。
Dim mmc As long, mmr As long
でも、mmrの方は、最大でも256までの数値しか入りません。

【20952】Re:リストボックスの項目追加、削除
お礼  mickeypapa WEB  - 04/12/27(月) 20:56 -

引用なし
パスワード
   ▼Jaka さん:
>>ちなみに変数の宣言は、Variantで良かったのですよね?
>ええっと、ちゃんと宣言をする方なら、Longを使うと思います。
>Dim mmc As long, mmr As long
>でも、mmrの方は、最大でも256までの数値しか入りません。
こんにちは、返信有り難うございます。前回Longで宣言したら上手くいかなかったので、Variantにしたのですが、何が原因か解りませんが、今回は、Integerでも問題なく動作しております。お手数かけました。

10594 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free