- 締切済み
エクセルでこのようなことが出来るでしょうか?
A:エクセル2002のシート1で製品の価格算出用のフォームを作ります。 仕様などをいくつか選択すると価格が計算されます。 ↑ここまではできました。 B:一台価格を算出したらシート上のボタンをクリックすると、シート2の所定のセルに価格がコピーされる。 ↑ここまでも出来ます。 C:次の計算をした後、ボタンをクリックすると、作業Bで価格がコピーされたセルの一行下のセルにコピーされる。結果としてシート2は価格一覧表となる。 ↑これがしたいです。 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- sakenomo
- ベストアンサー率52% (35/67)
この例ではSheet1のA1の値を、Sheet2のA列の1行目から下へ空白のセルを探して入れます。 Sub test() Worksheets("Sheet2").Columns(1).Find("", After:=Range("A65536"), _ LookIn:=xlValues).Value = Range("A1").Value End Sub 上の例では、A列の空白のセルを探して作業Bの価格をコピーするわけですから、価格一覧表を10行目から作りたいなどという場合は使えません。 ですので、下の例のように変えてみてください。 参考になりますでしょうか。 Sub test2() Worksheets("Sheet2").Range("A10:A65536").Find("", _ After:=Range("A65536"), LookIn:=xlValues).Value = Range("A1").Value End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
VBAであれば、結構難しい問題を提起しているように思います。寡聞にして市販本の例題には出ていないように思います。 セルに値をセットするには行を指定しなければなりません(Cells(i,j)のi)。その初期値のセット及びイベントプロセジュアーへの引渡しに苦しみます。イベントプロシージュアーの中ではiの初期化は出来ないでしょう。 私は、Public変数を使いモジュールに Public i Sub test01() i = 1 End Sub を作り、前もって1回だけ実行してiに1をセットしました。 iはPublic変数にしたので、イベントプロセジュアーで使うとき、最初はiは1です。そこでセルに値をセット後にiに+1します。直ぐ下の行を指す為です。 そこでSheet1に貼りつけたボタンのイベントプロセジュアーとして、下記を作成しました。 Private Sub CommandButton1_Click() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") sh2.Cells(i, "C") = sh1.Cells(1, "A") i = i + 1 End Sub これでSheet1のA1セルに値を入れて、ボタンをクリック1行ずつ下行に値がセットされて行きます。 「Sheet1のA1セル」や「Sheet2のC1-->C2」は私が勝手に決めたもので、変えた場合、どこを変えれば良いかは すぐ判ると思います。項目が複数あれば、 sh2.Cells(i, "C") = sh1.Cells(1, "A") のCとAを変えて、行を増やせば済みます。 実行に先立ちtest01を実行してください。 -- 私の拙いコードが目に触れて、もっと良い解答を載せていただけたらと期待しています。あるいはこんな方法しか無いのかも知れませんが。
お礼
やはりVBAですか。 しかも難しいとのことで・・・。 本も買ってきたので一生懸命勉強します。 ありがとうございました。
- Futosi
- ベストアンサー率46% (23/50)
SettingWorkSheet.Cells(1,1) += SettingWorkSheet.Cells(1,1) ではなく SettingWorkSheet.Cells(1, 1) += 1 もしくは SettingWorkSheet.Cells(1,1) = SettingWorkSheet.Cells(1,1) + 1 ですね、失礼しました。
お礼
う~む、VBAですか。 ぜんぜんわからないんですけど、今日これから本を買いに行ってきます。 ありがとうございました。
- Futosi
- ベストアンサー率46% (23/50)
別のワークシートを追加して、そのシートを環境設定用に使ってみてはいかがでしょうか? 読み取るときは SettingWorkSheet.Cells(1,1) (A1のセルに次の場所を格納している場合) で次のセルが参照できますね。 ですから、コードとしては ●登録ボタンのコードに追加 Cells(SettingWorkSheet.Cells(1,1), "入力列数") = … SettingWorkSheet.Cells(1,1) += SettingWorkSheet.Cells(1,1) SettingsWorkSheet.Visible = False とすればマクロ管理者しか見れなくなるので、 もしも設定を触られたくないならこれでいかがでしょう? ※SettingWorkSheetは追加した3番目のシートを示します。 当方Excel2000しか所持していないので、コードの仕様が改変されているかもしれませんが、基本的には上記の考え方で大丈夫なはずです。
お礼
ありがとうございます。 本を買ってきて勉強しているのですが、いまだに皆様からいただいた回答を理解できるレベルまでたどり着いておりません。 幸いにして質問-回答の履歴は残るようですので、もっと勉強して後々参考にさせていただきたいと思います。