アプリ版:「スタンプのみでお礼する」機能のリリースについて

データー用のブックに、リストボックスを作り、リストボックスのデーターを
複数選び(複数選べる)、別ブロックのセルに転記するVBAが可能であれば、ご教授願います。
※リストボックスを表示させることはできたのですが、別ブックへの転記させる
VBAコードが分からず困っております。

<実施内容>

1、データー専用ブック(ブック名:データー)に、リストボックスを作成し、
そのリストボックスのデーターの中で、データを選んで、選んだデーターを
別ブックのカソールのある行のセルに転記する。
※カソールの移動先は,決まっていません。(転記先の伝票の転記先の位置がまちまちの為)


添付画像参照
画像左側が、データー用のブックです。
並びは ⇒ 部品コード  部品名称 個数 在庫 依頼数 出庫 備考

画像右側が別ブック(転記先)です。
転記対象のブックは、複数あります。


下が、リストボックス表示です

Private Sub UserForm_Initialize()
With Me.ListBox1
.MultiSelect = 1
.List = Range("A1").CurrentRegion.Value
.ColumnCount = 9
.ColumnWidths = "50;110;50;50;50;50;50;50;50"

End With
End Sub

ご教授願います

「Excel にて、 リストボックスのデー」の質問画像

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

  • 対応して頂き誠にありがとうございました。
    練習問題ではなく、伝票発行に使用したいと思っております。

    希望としては、可能であれば、カソールのあるセルに転記していけたらと考えて
    いました。

    説明不足で済みません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/02/18 16:17

A 回答 (2件)

リストボックスのリストがシートのセルを順に与えているのなら、



For i = 0 To ListBox1.ListCount - 1

If ListBox1.Selected(i) Then '★ここ
r.Value = ListBox1.List(i)
Set r = r.Offset(1)
End If

選択したリストはA1を基準としたOffsetで行列は求められますよね。
https://www.moug.net/tech/exvba/0050057.html
同じものであるなら何もリストボックスの値に拘らず、セルをコピペすれば良いのでは?
その行の求め方は
workbooks("~").worksheets("~~").range("A1").offset(i).resize(1,7).copy ~コピー先のセル~
で良いのでは?
ただコピー先については情報が不足している感じはしますので割愛させてもらいますけど。

目の前にあって対処法を考えるならまだしも、ブック名等が1つ固定なのか複数不特定なのか良くわかりませんし。
私は老眼だから画像も良く見えなくて手の打ちようがないけど、常連さんでも見えても難しいから回答が厳しいのかもね。
    • good
    • 0
この回答へのお礼

親切に、いろいろと教えていただきありがとうございます。
少しづつ勉強していきたいと思います。

お礼日時:2020/02/20 05:20

ちょ~簡単に書けば(あくまで練習問題)、



Private Sub UserForm_Initialize()
Dim i As Integer

For i = 1 To 10
ListBox1.AddItem i
Next

ListBox1.MultiSelect = fmMultiSelectMulti

End Sub


Private Sub CommandButton1_Click()
Dim i As Integer
Dim r As Range

Set r = Workbooks("test.xlsx").Worksheets("Sheet1").Range("A1")

For i = 0 To ListBox1.ListCount - 1

If ListBox1.Selected(i) Then
r.Value = ListBox1.List(i)
Set r = r.Offset(1)
End If

Next

Set r = Nothing

End Sub

ListBoxの値が選択されているかをリストから順に調べて、Trueなら別のブックのシートのセルに書き出す。
→今回は Workbooks("test.xlsx").Worksheets("Sheet1").Range("A1") ここがスタート位置。

ListBoxの列については多分ググれば例題は見つかるんじゃないかな?
http://officetanaka.net/excel/vba/tips/tips158.htm
これとか?

あとは基準としていた書き込みセルから右にOFFSETして順次書いたらいけるのかも。(その分のループは必要かもですが)
この回答への補足あり
    • good
    • 0

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

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


このQ&Aを見た人がよく見るQ&A