- ベストアンサー
excel vba DATAの日集計
- 「DATA」シートの「D2」の日付を変えると表の数値が変わるようにしています。その日毎のデータを「集計」シートの日別の表に飛ぶようにしていますが、1日分の転記するセル数が多く、効率的な書き方を知りたいです。
- 「集計」シートの1日分は9行で、それぞれ「DATA」シートからの転記です。具体的には、「DATA」シートのF5+F10,G5+G10~AC5+AC10までの値を「集計」シートのG5からAD5までに、F6+F12,G6+G12~AC6+AC12までの値を「集計」シートのG13からAD13までに転記しています。
- SELECT CASE文を使って31日分のコードを書いているため、プロシージャが大きくなってしまっています。より効率的な書き方があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
値でなく、式なら範囲に一気に設定出来ますから、その後コピー&値のみ貼り付けを行うようにすると簡潔になると思います。 日付が変わると合計する行がどう変わるのか提示がありませんでしたので、Select Caseで合計する行を1日毎に設定し、集計シートのG5:AD5、G13:AD13に式を設定し、直後に値で確定しています。 Sub Sample() Dim n1_1 As Long Dim n1_2 As Long Dim n2_1 As Long Dim n2_2 As Long Select Case Sheets("DATA").Range("D2").Value Case 1 '1日に、合計する行 n1_1 = 5 n1_2 = 10 n2_1 = 6 n2_2 = 12 Case 2 '2日に、合計する行 '(省略) Case Else '(省略) End Select '貼り付け行との差 n1_1 = n1_1 - 5 n1_2 = n1_2 - 5 n2_1 = n2_1 - 13 n2_2 = n2_2 - 13 With Sheets("集計") '式を貼り付け .Range("G5:AD5").FormulaR1C1 = "=DATA!R[" & n1_1 & "]C[-1]+DATA!R[" & n1_2 & "]C[-1]" .Range("G13:AD13").FormulaR1C1 = "=DATA!R[" & n2_1 & "]C[-1]+DATA!R[" & n1_1 & "]C[-1]" '値で確定 .Range("G5:AD5").Copy .Range("G5:AD5").PasteSpecial Paste:=xlPasteValues .Range("G13:AD13").Copy .Range("G13:AD13").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End With End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
質問をデータ実例を挙げて説明しないからわからないよ。 回答者に推測させるような質問の書き方はしないでほしい。 >DATA"シートのセル"D2"の日付を変えると表の数値が変わるようにしています D2の日付を変えると、データシートのデータが前日のは消えて、新しい日付のデータで、同じセルで置き換わるのか? 日付は1-月末まで毎日データがあるのか。日曜なども含めて毎日か? もしそうなら、今月の例で Sub test01() matu = DateSerial(2010, 7 + 1, 1) - 1 matubi = Day(matu): MsgBox matubi For i = 1 To matubi Range("D2") = i '処理1 Next i End Sub となるがこれで良いか。 または日別シートは別々のシートに出ていてそれらのシートのデータを読んでを集計するのか?? ーー シートが2つ出てくるので 骨子は Sub test01() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("データ") Set sh2 = Worksheets("集計") '--- matu = DateSerial(2010, 7 + 1, 1) - 1 matubi = Day(matu): MsgBox matubi For i = 1 To matubi sh1.Range("D2") = i '処理1 Next i End Sub のようになる。 ーーー >集計"シート1日分は、9行となります データシートにおいて 行的には F5+F10 F6+F12 ・・・ F12+F F13+F までかF10F12・・2つとびか? 同じセルを2箇所で足すことにならないか。 このへんもっと丁寧に書くこと。回答が具体的な答えにならなくても質問者はわかるレベルか? ーーー 列的には F,G,・・ACまで22列分集計が出来る。 集計シートで第2日分は、どこから何処までの行および列か?。 これらを説明のこと。 ーー まあ規則性はあるようだから、それは質問者が計算すれば、第X日のデータセル範囲は判るから、 データシートから集計シートに転記(代入)すれば良いのでは。 なお参考までに Sub test02() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") Dim x 'ヴァリアント変数 x = sh1.Range("b2:D9") sh2.Range("b3:D10") = x End Sub が可能のようなので、使えれば便利だと思う。 実際は Sub test03() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") Dim x x = sh1.Range(sh1.Cells(2, "B"), sh1.Cells(9, "D")) sh2.Range(sh2.Cells(3, "B"), sh2.Cells(10, "D")) = x End Sub の書き方の方がこの質問には役立ちそう。
お礼
説明不足によりご不便をお掛けしましたことをお詫びします。 imogasi様、ご回答の趣旨をよく理解いたしまして、今後に生かしてまいります。 有り難う御座いました。
お礼
遅くなりまして申し訳ございません。 説明が不十分の中、私が意図したことをご回答いただき誠に有り難う御座いました。 お陰様で、完成することが出来ました、本当に有り難う御座いました。