[[20071022164812]] 『データの積み重ね?』(らいんぢあ) >>BOT

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

 

『データの積み重ね?』(らいんぢあ)
 全文検索で、似たようなものを見かけたのですが、自分用にカスタマイズできず、皆様のお知恵を拝借に参りました。

 まず、シート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.