プロが教えるわが家の防犯対策術!

excel vbaについて質問です。

ユーザーフォームでのリストボックスの連動です。
画像のように業者をシートに登録して、
別のユーザーフォームで連動したリストとして表示させたいです。
※住所や連絡先は業者の区別のために使いたいです。
住所や連絡先が同じであれば追加できない仕様にしたいです。

リストには新しい業者が追加される度にデータが追加されるようにしたいのですが
知識がないため、教えていただきたいです。
よろしくお願いします。

「ユーザーフォームでのリストボックス連動(」の質問画像

A 回答 (3件)

こんにちは



登録もユーザーフォームから行うということで良いのですよね?

>住所や連絡先が同じであれば追加できない仕様にしたいです。
例えば、
・シートを直接編集できないように、保護をかけておきます
・フォームから登録の際(ボタンを押した際)にシート内の既登録データと
 照合して、同じものがあれば登録しない
・なければ、マクロからシートに登録する
ようにしておけばよろしいかと思います。

>別のユーザーフォームで連動したリストとして表示させたいです
シートの内容をそのままリスト表示させたいのであれば、こんな感じでしょうか。
https://kosapi.com/post-4023/
    • good
    • 0

#2の仮定で


例 UserForm1に書きます

Dim wsht As Worksheet
Dim r As Range
Private Sub CommandButton1_Click()
Dim Dic As Object
Set wsht = Worksheets("業者登録")
With UserForm2
'.ListBox1.AddItem ??
.ListBox2.AddItem Me.TextBox1.Value

Set Dic = CreateObject("Scripting.Dictionary")
For Each r In wsht.Range(wsht.Cells(2, 1), wsht.Cells(Rows.Count, 1).End(xlUp))
If Not Dic.exists(r.Value) Then
Dic.Add r.Value, 0
.ListBox1.AddItem r.Value '重複しない
.ListBox2.AddItem r.Offset(, 1).Value
Else
.ListBox2.AddItem r.Offset(, 1).Value '全リスト業者名
End If
Next
Set Dic = Nothing
.Show
End With
End Sub

UserForm2側は取敢えずコントロールの配置のみでOKのはず

>連絡先が同じであれば追加できない
例 TextBox2が連絡先
Dim wsht As Worksheet
Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Set wsht = Worksheets("業者登録")
If Application.CountIf(wsht.Range("D2", wsht.Cells(Rows.Count, 4).End(xlUp)), TextBox2.Value) > 0 Then
MsgBox "電話番号が重複しています"
Cancel = True
End If
End Sub
    • good
    • 0

こんばんは


文字オーバーみたいなので説明とコードを分けて

下のユーザーフォームに上のユーザーフォームの値を登録(シート書き出し)前に入れると言う事でしょうか?
何故リストボックスなのでしょう?ここでまた変更すると言う事でしょうか

仮定(該当コントロール)
上がUserForm1
ListBox1とTextBox1 CommandButton1
下がUserForm2
ListBox1、ListBox2、CommandButton1

考えてみるとUserForm1.ListBox1の値ってシートリストのような気がするのですけれど違うのかな・・(書き込みできませんよね)
A列は一意でないので
UserForm2.ListBox1 <==UserForm1.ListBox1の値は意味が無いかな
ListBoxでなければ良いけれど・・
UserForm2.ListBox1 は シートリスト
UserForm2.ListBox2 <== UserForm1.TextBox1の値+シートリスト

UserForm1のCommandButton1_Click()でUserForm2を呼ぶ
RowSourceだとシートに書き出さないといけないのでAddItemを使います

UserForm2をわざわざ作らなくとも入力チェックをもう少し考えて作れば使い易くなりそうですね
あとComboBoxの方が入力ができるので良さそうかな

次に例(参考コード)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています