家の中でのこだわりスペースはどこですか?

はじめましてVBA初心者です。
添付画像のようにリストボックスに表示している名前を選択し単価、個数を入力し
Sheet1の表に転記したいです。
Sheet1の表には名前が既に入っています。
リストボックスで名前を選択するのですがA→B→C→D→Eと順番は決まっていません。
添付画像のように既に単価、個数が入っている場合があります。
ご教示のほどよろしくお願いいたします。

「VBAリストボックスで選択した後」の質問画像

質問者からの補足コメント

  • ご連絡ありがとうございます。
    初心者で本当に申し訳ございません。
    A1.名前は本来Labelでした。申し訳ございません。
    A2.その単価、個数を無視して、リストボックスの単価、個数を設定したいです。
    A3.名前のオブジェクト名はLabel1です。
    単価のオブジェクト名はLabel2です。
    個数のオブジェクト名はLabel3です。
    単価のオブジェクト名Label2の右側の青い箇所はオブジェクト名TextBox1です。単価の数値を入力したいです。
    個数のオブジェクト名Label3の右側の青い箇所はオブジェクト名TextBox2です。個数の数値を入力したいです。
    転記のオブジェクト名はCommandButton1です。

    No.4の回答に寄せられた補足コメントです。 補足日時:2022/11/08 21:40

A 回答 (5件)

転記ボタンがクリックされた時の処理です。


いかのようにしてください。

Private Sub CommandButton1_Click()
Dim name As String
Dim ws As Worksheet
Dim maxrow As Long
Dim flag As Boolean
Dim wrow As Long
Set ws = Worksheets("Sheet1")
If TextBox1.Value = "" Then
MsgBox ("単価未登録")
Exit Sub
End If
If TextBox2.Value = "" Then
MsgBox ("個数未登録")
Exit Sub
End If
maxrow = ws.Cells(Rows.Count, "A").End(xlUp).Row '最大行取得
name = ListBox1.Value
flag = False
For wrow = 2 To maxrow
If ws.Cells(wrow, "A").Value = name Then
ws.Cells(wrow, "B").Value = TextBox1.Value '単価
ws.Cells(wrow, "C").Value = TextBox2.Value '個数
flag = True
Exit For
End If
Next
If flag = False Then
MsgBox ("該当商品がSheet1になし")
Exit Sub
End If
End Sub
    • good
    • 2
この回答へのお礼

早々にありがとうございました。
これからも勉強いたします。

お礼日時:2022/11/08 22:38

補足要求です。


1.名前のテキストボックスは、どのように使うのでしょうか。
リストボックスで名前を選択するので、不要かと思うのですが。

2.既に、単価、個数が入っている場合は、どのようにするのでしょうか。
案1.その単価を、個数を無視して、リストボックスの単価、個数を設定する。
案2.その単価を、個数をそのまま採用する。リストボックスの単価、個数を無視する。
等が考えられます。

3.フォーム内の各オブジェクト名が判りません。
特に、添付図の赤線で囲んだコントロールのオブジェクト名を教えてください。オブジェクト名が判らないとマクロが記述できません。

4.添付図の青線で囲んだコントロールは、今回の質問では使わないと理解しましたが、それでよろしいでしょうか。
「VBAリストボックスで選択した後」の回答画像4
この回答への補足あり
    • good
    • 0

>リストボックスで名前を選択するのですがA→B→C→D→Eと順番は決まっていません。



で、Sheet1のA列の順番とは一致しているのですか?
ようはユーザーフォームを開く際にA列の名前を取得しListBoxに追加しているのか、或いはコードのみで追加しているのか?

A列とListBoxの値の順序が同じか否かでもコードは変わるように感じる初級者ジジィです。
    • good
    • 1

何がしたいのかも、どこが知りたいのかも分からん。

    • good
    • 2

こんばんは



>既に単価、個数が入っている場合があります。
その際にどうするのかも不明ですけれど・・・

概ね、以下のような手順で処理すれば良いのでは?
1)リストボックスの選択値を取得
2)Sheet1のA列から、選択値と同じものを検索
 (Findメソッドでも良いですし、ループして検索しても良い)
3)一致するものがあれば、単価、個数の欄(B,C列)を確認
 3-1)両方とも値がある場合 → 対応する処理を行う
 3-2)片方だけ値がある場合 → 対応する処理を行う
 3-3)値が入力されていない場合 → 対応する処理を行う
4)一致するものがない場合 → 対応する処理を行う

「対応する処理」がどうなるのかは、記載が無いのでわかりかねます。

わからない部分があれば、その部分について(必要な情報とともに)補足説明をなされば、具体的な回答がつきやすいと思います。
(私が回答できるかは不明です)
    • good
    • 4
この回答へのお礼

早々にアドバイスをいただきありがとうございました。

お礼日時:2022/11/08 15:53

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

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


おすすめ情報