[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォームの内容を複数のシートに反映できますか?』(とーる)
Private Sub CommandButton1_Click()
n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.ComboBox1.Text Cells(n, 3) = UserForm1.ComboBox2.Text Cells(n, 4) = UserForm1.ComboBox3.Text Cells(n, 5) = UserForm1.ComboBox4.Text Cells(n, 6) = UserForm1.TextBox2.Text Cells(n, 7) = UserForm1.TextBox3.Text End Sub
上記のままクリックすると ユーザーフォームの内容がシート1に反映されます。
そこで、ComboBox1(リストから選ばれた顧客名)の顧客名のシートを作成して
クリックしたときシート1と顧客名シートの両方に反映することは可能でしょうか?
初心者なので、質問内容が思うように伝わるか心配です。
< 使用 Excel:Excel2007、使用 OS:WindowsXP >
できるかどうかといわれれば、できるでしょうという回答になりますが、 どうやるかはその新しいシートのどこに書くかの説明が必要かと思います。
基本的にユーザフォームの情報は、セルに書いても残っていますので、現在の処理の End Sub の前に希望の処理を追加すればできるとは思います。 (Mook) 2014/07/14(月) 14:59
新しいシート(仕入先名)は、シート1と同じで指定の仕入先だけが並ぶようにしたく
思ってます。
希望の処理をどうかいたら良いか分からず再度の質問です。
説明が下手ですいません。
(とーる) 2014/07/14(月) 15:52
内容の説明もあったほうがよいとは思いますが、ユーザフォームの項目がそれぞれ何なのか、 「顧客名のシートを作成して」というのがどのような内容なのかがわからないので、 具体的な回答に至りません。
新規シートの元となるシートを置き(例:仕入先原本)、これをコピーしてそれぞれの 場所に値を入れるのであれば、End Sub の前に
Worksheets("仕入先原本").Copy After:=Worksheets(Worksheets.Count) ActiveSheet.Name = "仕入先名" Worksheets("仕入先名").Range("A1").Value = UserForm1.TextBox1.Text Worksheets("仕入先名").Range("B1").Value = UserForm1.ComboBox1.Text
などとなります。
なお複数シートを処理する場合は、現行の Cells(n, 1) もきちんとシートを指定して WorkSheets("仕入台帳").Cells(n, 1).Value = ... のように書いたほうがよいかと思います。
(Mook) 2014/07/14(月) 17:28
すこし時間がかかりますので、結果は明日報告させていただきます。
忙しい中、本当にありがとうございました。
(とーる) 2014/07/14(月) 18:51
やりたい事は
1、見積りをするために、いままで納品された品物の単価を調べたい。
2、同じ品物でも、複数の仕入先が存在するためすべての仕入先の入った一覧シート
をつくり、オートフィルターで並び替えて比較したい。
3、個別の仕入先シートから、品物の単価を調べたい。
4、データーの入力は、ユーザーフォームから転記したい。
5、転記するときに、一覧シートと個別の仕入先シートにコマンドボタン1つで
同時に転記したい。
以上です。
そこで、MooK様のアドバイスも参考にして 下記のコードを書きました。
これで思いの動作はしますがコマンドボタンを2つ押さなければ2つのシートに
転記されません。
これをまとめて1つのボタンで転記したく質問しています。
Private Sub UserForm_Initialize()
Dim lRow As Long
With TextBox1 .Value = Format(Date, "ge/mm/dd") .SetFocus End With
With Worksheets("リスト") lRow = .Range("B" & Rows.Count).End(xlUp).Row End With
With ComboBox1 .RowSource = "リスト!A2:A20" & lRow End With
With Worksheets("リスト") lRow = .Range("C" & Rows.Count).End(xlUp).Row End With
With ComboBox2 .RowSource = "リスト!B2:B20" & lRow End With
With Worksheets("リスト") lRow = .Range("D" & Rows.Count).End(xlUp).Row End With
With ComboBox3 .RowSource = "リスト!C2:C20" & lRow End With
With Worksheets("リスト") lRow = .Range("E" & Rows.Count).End(xlUp).Row End With
With ComboBox4 .RowSource = "リスト!D2:D20" & lRow End With
End Sub
Private Sub CommandButton1_Click()
n = 1 Do n = n + 1 Loop While Worksheets("仕入台帳").Cells(n, 1).Value <> "" Worksheets("仕入台帳").Cells(n, 1).Value = UserForm1.TextBox1.Text Worksheets("仕入台帳").Cells(n, 2).Value = UserForm1.ComboBox1.Text Worksheets("仕入台帳").Cells(n, 3).Value = UserForm1.ComboBox2.Text Worksheets("仕入台帳").Cells(n, 4).Value = UserForm1.ComboBox3.Text Worksheets("仕入台帳").Cells(n, 5).Value = UserForm1.ComboBox4.Text Worksheets("仕入台帳").Cells(n, 6).Value = UserForm1.TextBox2.Text Worksheets("仕入台帳").Cells(n, 7).Value = UserForm1.TextBox3.Text End Sub
Private Sub CommandButton4_Click() n = 1 Do n = n + 1 Loop While Worksheets(UserForm1.ComboBox1.Text).Cells(n, 1).Value <> "" Worksheets(UserForm1.ComboBox1.Text).Cells(n, 1).Value = UserForm1.TextBox1.Text Worksheets(UserForm1.ComboBox1.Text).Cells(n, 2).Value = UserForm1.ComboBox1.Text Worksheets(UserForm1.ComboBox1.Text).Cells(n, 3).Value = UserForm1.ComboBox2.Text Worksheets(UserForm1.ComboBox1.Text).Cells(n, 4).Value = UserForm1.ComboBox3.Text Worksheets(UserForm1.ComboBox1.Text).Cells(n, 5).Value = UserForm1.ComboBox4.Text Worksheets(UserForm1.ComboBox1.Text).Cells(n, 6).Value = UserForm1.TextBox2.Text Worksheets(UserForm1.ComboBox1.Text).Cells(n, 7).Value = UserForm1.TextBox3.Text End Sub
Private Sub CommandButton2_Click()
Unload UserForm1 End Sub
Private Sub CommandButton3_Click()
ComboBox2.Value = "" ComboBox3.Value = "" ComboBox4.Value = "" TextBox2.Value = "" TextBox3.Value = "" End Sub
(とーる) 2014/07/15(火) 12:00
コードとしては間違いなく多大に不足でしょうが、使用しながら理解できる範囲で
追加していくつもりです。
無知な自分の質問に回答していただき、心より感謝いたします。
(とーる) 2014/07/15(火) 19:12
どうもシートの運用がうまく理解できなかった気がしますが、処理のつど新規でシートを 作成するのではなく、すでにある前提なのでしょうか。
同じ処理を繰り返す場合、違う部分をパラメータにして汎用処理にするという手があります。 今回対象シートがどちらも存在しているのであれば、
Private Sub CommandButton1_Click() 転記処理 Worksheets("仕入台帳") 転記処理 Worksheets(UserForm1.ComboBox1.Text) End Sub
Private Sub 転記処理(ws As Worksheet) Dim n As Long With ws n = 1 Do While .Cells(n, 1).Value <> "" n = n + 1 Loop
.Cells(n, 1).Value = UserForm1.TextBox1.Text .Cells(n, 2).Value = UserForm1.ComboBox1.Text .Cells(n, 3).Value = UserForm1.ComboBox2.Text .Cells(n, 4).Value = UserForm1.ComboBox3.Text .Cells(n, 5).Value = UserForm1.ComboBox4.Text .Cells(n, 6).Value = UserForm1.TextBox2.Text .Cells(n, 7).Value = UserForm1.TextBox3.Text End With End Sub
のようにもできるかと思います。 (Mook) 2014/07/15(火) 23:04
シートは、仕入先の数だけ先に作ってそこに転記するということです。
説明が下手ですいませんでした。
上記のコード、自宅で確認しました。
OS&エクセルのバージョンは会社で使ってるものと違いますが
問題なく希望の処理を行ってくれました。
最初に転記させるシートを指定するのですね。
いくつも方法があり、大変勉強になりました。
今度は表紙をつくって、そこから仕入台帳シートなり仕入先シートへと
移動できるように進化させるつもりです。
これですべて解決しました。
お付き合い有難うございました。
(とーる) 2014/07/16(水) 01:05
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.