[[20080708091503]] 『別々のシートに集計したい』(らいんぢあ) >>BOT

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

 

『別々のシートに集計したい』(らいんぢあ)

 いつも大変お世話になっております。
 今回は、以前質問させていただいた

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

 の質問の続きをさせてください。

 前回は、二つのマクロの結果を一つのシートに集計していましたが、
 今回は、其々の「品種」毎に集計シートを分けたいのです。

 集計先シートの指定は以前教えて頂いたマクロを変更すれば
 できますか?
 また、何処をどのように変えればよいのでしょうか?

 よろしくご指導の程、お願い致します。

 >集計先シートの指定は以前教えて頂いたマクロを変更すれば
 >できますか?
 教えてもらったコードが理解できていれば、わかるはず?

 回答ありがとうございます。

 すみません
 大体何をやっているのか、は判るのですが
 ここに更に「入力内容毎に転記先を変える作業」
 の指示をどうやって入れればいいのかが判りません。

 というか、入力内容によって転記先シートを変える、という指示が
 どういった物になるのか見当が付きません・・・

 似たような作業をしている過去ログなどありましたら教えてください。
 勉強して出直してきます。

 (らいんぢあ)

[[20070730174656]] 『VBA-データ抽出、転送方法』
 抽出したい項目毎にシートを作成しデータを移す方法の参考に、提案した事のある物です。
 ご参考になれば。
 或いは、既にシートが作成されていると消してしまいますので注意願います。
 既存の項目別シートにデータを追加していくというのならば、データサンプル等の提示をお願いします。
 (じゅんじゅん)

 じゅんじゅんさんからコメントが付いていますが・・・
 現在使っているコードを載せてみるのが良いでしょう。
 また、どの様な物をどの様にしたいのか の説明も。
 「今回の必要部分は文章で書いたので、後は過去ログみて下さい」
 って省略するのではなく。

 (HANA)

 よくよく過去の質問を見てみると、Sheet1のデータをSheet2にため込むのではなく
 品種毎にSheetを分けてあり、データをその都度該当するSheetにため込みたい
 と言うように思えて来ちゃいました。

 ので、先ほどの過去ログはちょっと的はずれかなと、自信喪失。。。
 (じゅんじゅん)

 衝突しました。 が、取りあえずそのまま載せます。(らいんぢあ)

 じゅんじゅん様、HANA様 回答ありがとうございます。

 すみません、今仕事の傍らにここに伺っておりまして、
 ちょっと忙しくて不愛想になってしまっていました。お許しください。

 現在の表とコードはこうなっています。

 ・入力シート
    A         B
 1    1号機			   	
 2   水分測定計算			   (B列の入力方法)	
 3 作業日	        2008/7/4      手入力
 4 品種	        ああああ-01     ドロップダウンリスト
 5 規格	        145o×100m  ドロップダウンリスト
 6 ロット	   8526-04       手入力
 7 実験室測定結果(%)            手入力
 8 重量(g)	   286        数式=SUMPURODUCT(((Sheet3!E2:E50=B4)*(Sheet3!F2:F50=B5)),Sheet3!H2:H50)
 9 ダンピング前重量(g)                      手入力
 10ダンピング後重量(g)            手入力
 11水分値(%)	   0.0        数式=B7+(B10-B9)/(B9-B8)*100

 * データの入力は一回に一つずつ。必要項目が埋まる毎に
   「結果転送」ボタン(フォームボタン)を押してデータを「結果リスト」Sheetに転記。

 ・結果リスト
    A      B        C        D     E
 1 計算結果リスト				
 2 作業日	     品種	   規格	ロット	 水分値(%)
 3 2008/05/01  ああああ-01	226o×300m	8201-02	 3.3 
 4 2008/05/02  いいいい-01	226o×300m	8201-11	 3.2 
 5 2008/05/02  ああああ-01	226o×300m	8201-03	 3.2 

 ・Sheet3
  A2〜A5  :品種リスト(ドロップダウンリスト用)
  C2〜C38 :規格リスト(ドロップダウンリスト用)
  E2〜E50 :品種
  F2〜F50 :規格
  H2〜H50 :重量

 ・VBAコード

 Sub macro1()
     Dim ws1 As Worksheet
     Dim ws2 As Worksheet
     Set ws1 = ThisWorkbook.Sheets("入力シート")
     Set ws2 = ThisWorkbook.Sheets("結果リスト")
     If ws1.Range("B11") = "" Then Exit Sub
     ws2.Range("A1").End(xlDown).Offset(1, 0) = ws1.Range("B3")
     ws2.Range("A1").End(xlDown).Offset(0, 1) = ws1.Range("B4")
     ws2.Range("A1").End(xlDown).Offset(0, 2) = ws1.Range("B5")
     ws2.Range("A1").End(xlDown).Offset(0, 3) = ws1.Range("B6")
     ws2.Range("A1").End(xlDown).Offset(0, 4) = ws1.Range("B11")
     ws1.Range("B7").ClearContents
     ws1.Range("B9:B10").ClearContents
     Set ws1 = Nothing
     Set ws2 = Nothing
     Range("B7").Select
     ActiveWorkbook.Save
 End Sub

 以上

 この内、結果リストを品種毎の別Sheetにして蓄積していきたいのですが、
 じゅんじゅん様に提示していただいた過去ログだと、
 そもそもの出だしの入力Sheetの形式が違う上に、
 毎回新規にデータを送り込むSheetができてしまう
 (以前のデータ(のSheet)が消える)様になっているんですよね。
 ではなくて、仰るとおりお尻にどんどん付け足していく形が理想です。
 しかし、付け足して行きたいデータが一時に複数存在せずに
 一個ずつなところが違っていて、そこが解らない所です。

 つまり、今の状況ならば、三回入力してはボタンを押した結果、
 Sheet「ああああ-01」にデータが二つ。 Sheet「いいいい-01」に一つ、
 そして集計Sheetには前のデータがずっと残っている、という状況になりたいです。

 すみません、完全に他力本願になってしまっていますが、
 何をすればいいのかサッパリ解りません。

 拙い説明で申し訳ありませんが、宜しくご教授ください。

 (らいんぢあ)

 じゅんじゅん様、回答ありがとうございます。
 そうです、今まで長々と書いてきましたが、そういう事なんです。
 どうしたらよいのでしょうか? 
 それと、私の説明が解りづらくぶっきら棒だったせいで
 上手く伝わらなかったみたいで、申し訳ありませんでした。(らいんぢあ)

 元のコードを参考に改良してみました。
 テスト環境を作成してないので、ダメだったらスルーして下さい。

 Sub macro2()
     Dim ws1 As Worksheet
     Dim ws2 As Worksheet
     Dim ws As Worksheet

     Set ws1 = ThisWorkbook.Sheets("入力シート")
     Set ws2 = ThisWorkbook.Sheets("結果リスト")

     If ws1.Range("B11").Value = "" Then Exit Sub

     For Each ws In ThisWorkbook.Worksheets
         If ws.Name = ws2.Name Or _
            InStr(ws.Name, ws1.Range("B4").Value) > 0 Then

            With ws.Range("A1").End(xlDown)
                 .Offset(1, 0).Value = ws1.Range("B3").Value
                 .Offset(0, 1).Value = ws1.Range("B4").Value
                 .Offset(0, 2).Value = ws1.Range("B5").Value
                 .Offset(0, 3).Value = ws1.Range("B6").Value
                 .Offset(0, 4).Value = ws1.Range("B11").Value
            End With
         End If
     Next

     ws1.Range("B7").ClearContents
     ws1.Range("B9:B10").ClearContents
     Set ws1 = Nothing
     Set ws2 = Nothing
     Range("B7").Select
     ActiveWorkbook.Save
 End Sub
 こうゆう事でいいのかな?
 (じゅんじゅん)

 じゅんじゅん様、回答ありがとうございます。

 そうです、こういう感じにしたかったのです!
 どうもありがとうございます。

 ですが、一つだけ質問が・・・
 集計Sheetなんですが、3行目からデータを載せたいのですが
 何故か、作業日以外のデータが2行目から転記されてしまいます。

 すみません、これって

 >      .Offset(0, 1).Value = ws1.Range("B4").Value
 >      .Offset(0, 2).Value = ws1.Range("B5").Value
 >      .Offset(0, 3).Value = ws1.Range("B6").Value
 >      .Offset(0, 4).Value = ws1.Range("B11").Value

 の、1234の数字を変える・・・で良いのでしょうか?
 ・・・・いや、何か違う気がします・・・というか、これは変えてはいけない気がします。
 すみません、どこを変えればよいのでしょうか?

 (らいんぢあ)

 元コードをそのままで意識してませんでした。
 >      .Offset(0, 1).Value = ws1.Range("B4").Value
 >      .Offset(0, 2).Value = ws1.Range("B5").Value
 >      .Offset(0, 3).Value = ws1.Range("B6").Value
 >      .Offset(0, 4).Value = ws1.Range("B11").Value

       .Offset(1, 1).Value = ws1.Range("B4").Value
               ^
 0を1に変更して下さい。(4行全て)
 1234はそのままです。
 (じゅんじゅん)

 じゅんじゅん様、早速ありがとうございます。

 無事、転記されるようになりました。

 やはり、1234の部分は違ったんですね
 これは、確かデータが入っているセルから数えてどこにあたるか
 という部分ですよね。
 そのことは以前教わりました。
 しかし、どの数字が(部分が)、何に対応しているのか解っていない・・・
 ・・・もう少し勉強して出直してきます・・・。

 どうもありがとうございました。

 (らいんぢあ)

 おはようございます。
 今日になって、気が付いた事がありましたので質問させてください。

 今回じゅんじゅん様に考えていただいたマクロなのですが、
 眺めているうちに気になりました。

 >    For Each ws In ThisWorkbook.Worksheets
 >        If ws.Name = ws2.Name Or _
 >           InStr(ws.Name, ws1.Range("B4").Value) > 0 Then

 ここの部分ですが、「結果リスト」Sheetと各品種毎のSheet名とを比べていますか?
 で、比べた後に各品種毎のSheetにデータを転記している様な気がします。

 さらに、「結果リスト」内にも今までと同じようにデータの転記がされてます。

 これは、私が以前書いた

 >つまり、今の状況ならば、三回入力してはボタンを押した結果、
 >Sheet「ああああ-01」にデータが二つ。 Sheet「いいいい-01」に一つ、
 >そして集計Sheetには前のデータがずっと残っている、という状況になりたいです。

 の3行目を考慮していただいてあるという事でよろしいのでしょうか?

 更に申し訳ありませんが、「結果リスト」のSheetを無くしたい場合には、
 どこを変えればいいのでしょうか?

 よろしくご教授お願い致します。(らいんぢあ)

 >さらに、「結果リスト」内にも今までと同じようにデータの転記がされてます。

 >これは、私が以前書いた

 >>つまり、今の状況ならば、三回入力してはボタンを押した結果、
 >>Sheet「ああああ-01」にデータが二つ。 Sheet「いいいい-01」に一つ、
 >>そして集計Sheetには前のデータがずっと残っている、という状況になりたいです。
 >の3行目を考慮していただいてあるという事でよろしいのでしょうか?
 はい、その通りです。
 今までの作業を残して、新たな作業を追加しました。

 >更に申し訳ありませんが、「結果リスト」のSheetを無くしたい場合には、
 >どこを変えればいいのでしょうか?

 Sub macro3()
     Dim ws1 As Worksheet
     Dim ws2 As Worksheet

     Set ws1 = ThisWorkbook.Sheets("入力シート")
     Set ws2 = Worksheets(ws1.Range("B4").Value)

     If ws1.Range("B11").Value = "" Then Exit Sub

        With ws2.Range("A1").End(xlDown)
                .Offset(1, 0).Value = ws1.Range("B3").Value
                .Offset(1, 1).Value = ws1.Range("B4").Value
                .Offset(1, 2).Value = ws1.Range("B5").Value
                .Offset(1, 3).Value = ws1.Range("B6").Value
                .Offset(1, 4).Value = ws1.Range("B11").Value
        End With

     ws1.Range("B7").ClearContents
     ws1.Range("B9:B10").ClearContents
     Set ws1 = Nothing
     Set ws2 = Nothing
     Range("B7").Select
     ActiveWorkbook.Save
 End Sub
 こんな感じになるでしょうか。
 (じゅんじゅん)

 じゅんじゅん様 ありがとうございます。

 おお、そこの部分を削るだけで
 他はほとんど変わらないのですか。

 今回お聞きしたようなデータ集計をする時の基本の形と言えるでしょうか。
 勉強になりました。

 どうもありがとうございました。

 (らいんぢあ)

コメント返信:

[ 一覧(最新更新順) ]


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