[[20140714133127]] 『ユーザーフォームの内容を複数のシートに反映でき』(とーる) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォームの内容を複数のシートに反映できますか?』(とーる)

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

Mook様、早々の回答ありがとうございます。
仕入台帳のようなものを作っています。
シート1には、すべての仕入先から仕入れた品物の単価等の情報が入ってます。
フィルタを使って並べ替えすると、指定の仕入先だけ表示できますがもっと分かり易く
仕入先名のシートも追加しようとしています。

新しいシート(仕入先名)は、シート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


Mook様、回答有難うございます。
内容をすべて出さなければ具体的な回答にならない事、たしかにその通りです。
それでも、想像できる限りでの回答に感謝してます。
コピーという方法で頑張ってみたいと思います。

すこし時間がかかりますので、結果は明日報告させていただきます。
忙しい中、本当にありがとうございました。

(とーる) 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


自分なりに、あちこち調べて試してみて
やっと With のコマンド?で、2つのシートにCommandButton1一つで転記されました。

コードとしては間違いなく多大に不足でしょうが、使用しながら理解できる範囲で
追加していくつもりです。

無知な自分の質問に回答していただき、心より感謝いたします。
(とーる) 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

MooK様、いつも回答頂き感謝してます。

シートは、仕入先の数だけ先に作ってそこに転記するということです。
説明が下手ですいませんでした。

上記のコード、自宅で確認しました。
OS&エクセルのバージョンは会社で使ってるものと違いますが
問題なく希望の処理を行ってくれました。
最初に転記させるシートを指定するのですね。
いくつも方法があり、大変勉強になりました。
今度は表紙をつくって、そこから仕入台帳シートなり仕入先シートへと
移動できるように進化させるつもりです。

これですべて解決しました。
お付き合い有難うございました。

(とーる) 2014/07/16(水) 01:05


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.