[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データの積み重ね?』(らいんぢあ)
全文検索で、似たようなものを見かけたのですが、自分用にカスタマイズできず、皆様のお知恵を拝借に参りました。
まず、シート1に A B C D E F G H 1 作業日 品種 規格 値A 値B 値C 値D 計算結果 2 071022 ○○○ 10×10 …… …… …… …… 3.5
のような感じで入力をします。これを、
シート2に A B C D 1 作業日 品種 規格 計算結果 2 071022 ○○○ 10×10 3.5 3 071022 ▼▼▼ 10×10 2.8 4 071022 ▼▼▼ 15×10 2.6 5 071023 ○○○ 15×20 3.2 ・ ・ ・ のような感じでどんどん貯めて行きたいのです。
シート1にボタンを設置して、計算結果ごとに押しては データをシート2に送るような形が理想です。 よろしくご指導の程、お願いします。
なんか変なコードになりましたが、一応作動すると思います。 標準モジュールに貼り付けて実行して下さい。 (フォームのボタンにでも登録して下さい)
Sub macro() Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = ThisWorkbook.Sheets("Sheet1") Set ws2 = ThisWorkbook.Sheets("Sheet2") ws2.Range("A1").End(xlDown).Offset(1, 0) = ws1.Range("A2") ws2.Range("A1").End(xlDown).Offset(0, 1) = ws1.Range("B2") ws2.Range("A1").End(xlDown).Offset(0, 2) = ws1.Range("C2") ws2.Range("A1").End(xlDown).Offset(0, 3) = ws1.Range("H2") Set ws1 = Nothing Set ws2 = Nothing End Sub
(1or8)
1or8様、回答ありがとうございます。
せっかく作って頂いたのに申し訳ありませんが、変更したい点が出来てしまいました。
・各シートに標題が入ったので、最初に載せた座標が1行下にずれました。 (「作業日」と入力されたセル、A1→A2 のように)
・ボタンを押してデータをシート2に送信すると、シート1の値A〜Dと計算結果が消えるようにしたい。 (結果を確実に送ったか確認するため & 二度送り防止)
宜しくお願いします。
(らいんぢあ)
計算結果が入力されていない時は、マクロが終了するようにもしました。
Sub macro() Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = ThisWorkbook.Sheets("Sheet1") Set ws2 = ThisWorkbook.Sheets("Sheet2") If ws1.Range("H3") = "" then Exit Sub ws2.Range("A1").End(xlDown).Offset(1, 0) = ws1.Range("A3") ws2.Range("A1").End(xlDown).Offset(0, 1) = ws1.Range("B3") ws2.Range("A1").End(xlDown).Offset(0, 2) = ws1.Range("C3") ws2.Range("A1").End(xlDown).Offset(0, 3) = ws1.Range("H3") ws1.Range("A3:D3","H3").ClearContents Set ws1 = Nothing Set ws2 = Nothing End Sub
そうそう、一応誤解がないように... (いらぬことで申し訳ないですが) 上記のコードは データをシート2に送信 ではなく データをシート2に代入させています。
(1or8)
1or8様、ありがとうございます。
>そうそう、一応誤解がないように... (いらぬことで申し訳ないですが) >上記のコードは >データをシート2に送信 ではなく >データをシート2に代入させています。
すみません、エクセルの仕組みがトンと判っていないので、変な言葉を使ってしまったのですね。 AにあるものをBに「送る」と考えていました。
ところで、教えて頂いたマクロですが、シート1に貼り付けて、フォームボタンを設置して、 ボタンを押しましたら・・・全項目が入力欄から消えてしまいました。 作業日・品種・規格の三項目は消さない様にしたいのですが、どうすればよろしいのでしょうか?
後一つ、質問なのですが、 もしシート1の入力するセルを今のように横型でなく縦型、つまり
A B 1 2 作業日 071022 3 品種 ○○○ 4 ・ ・ 5 ・ ・
のような形に変更することになったら、その場合はマクロの ws1.Range("A3") の"A3"の部分等を変更すればそのまま使えるのでしょうか?
(らいんぢあ)
>値A〜Dと計算結果 でしたね! A3〜D3と勘違いしていました。m(__)m 下記のように変更して下さい。 【旧】ws1.Range("A3:D3","H3").ClearContents 【新】ws1.Range("D3:H3").ClearContents
>横型でなく縦型 A3 → B2 B3 → B3 C3 → B4 H3 → B9 と変更するとOKです。
(1or8)
1or8様、回答ありがとうございます。
お蔭様で縦型でも、横型でも両方出来る様になりました! ありがとうございました。
と・・・喜んでいたら自分が掘った落とし穴に嵌ってしまいました・・・。
「計算結果」の値を出すために、値A〜Dに入力した数値を使った数式が H3のセルに入力してあるのですが、 マクロで値が消えると、数式まで消えてしまうっ‼
これは、今のままだとどうしようもないですよね? 別の所(例えばH4)に数式を入れて置いて、計算結果をH3に持ってくるように「=H4」 とかしても、結果は同じですよね・・・。 事前にH3に数式が入ることを説明し忘れた、自分が憎いです。 こういう時は、どうすれば良いのでしょうか?
お手間を取らせて申し訳ありません。(らいんぢあ)
単純に H3 = IF(D3="","",数式) として、マクロではD3〜G3のみを消すことにしては? マクロでD3〜G3を消せば、見ため的にはH3も消えているように見えますよ! (1or8)
1or8様、回答ありがとうございました。 無事、見えなくなりました。完成しました!
と思ったら済みません、質問の続きが出来てしまいました。
マクロを増やす時はどのようにすれば良いのでしょうか?
入力欄を、同シート上にまったく同じ形式でもう一つ作りたいのですが、
A B C D E F 1 測定器@ 測定器A 2 作業日 071022 作業日 071022 3 品種 ○○○ 品種 ○○○ 4 ・ ・ ・ ・ 5 ・ ・ ・ ・ 6 計算結果 ・ 結果送信@ 計算結果 ・ 結果送信A ←※ボタン
結果の蓄積をするシート2は測定器@とAで分けず、 同一の表の中に蓄積させていく形にしたいのです。
つまり、「(同時に二台の機械を動かして)測定している結果(をまとめた)リスト」 を作りたいのです。 その為、測定器@とAのそれぞれで「結果送信」が出来、なおかつ蓄積先は一つのリストを作りたいです。
無い頭をひねって、元々教えて頂いたマクロをコピーして増やして参照セルだけ変えて、 もう一つ作ったボタンに登録すれば、いいのかなぁと思ったのですが、 ただ単に「コピーして今あるマクロの下に貼り付ける」という方法で良いのでしょうか?
マクロって、シート名を右クリックすると出る画面では 一つの命令ごとに線で区切られてたり、名前を付けたりしてあるんですけど、 そういう事もしないと駄目なんでしょうか?
>元々教えて頂いたマクロをコピーして増やして参照セルだけ変えて、 >もう一つ作ったボタンに登録すれば、いいのかなぁと思ったのですが、 >ただ単に「コピーして今あるマクロの下に貼り付ける」という方法で良いのでしょうか?
はい。それで大丈夫です。 @のコードを「コピーして今あるマクロの下に貼り付ける」を行い、 (例えば Sub macro() → Sub macro2())と名前変更した後 B2, B3, ・・・ → E2, E3, ・・・ と変更すればOKです。
>マクロって、シート名を右クリックすると出る画面では >一つの命令ごとに線で区切られてたり、名前を付けたりしてあるんですけど、 >そういう事もしないと駄目なんでしょうか?
はい。ダメです。 上記で説明したように macro2() のように適当な重複しない適当な名前を付けてください。
(1or8)
ありがとうございました<(__)> (らいんぢあ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.