[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日付ごとに、複数件を横に転記していくマクロ』(まーた)
はじめまして。
なかなか方法が見つからず行き詰っております。
sheet1の表に、sheet2から日付(A列)ごと、且つ積載効率(C列)の大きい順に、左詰めで物量(B列)を転記するマクロを組みたいです。
問題点が、同日に複数の物量転記が発生した場合、右側にどんどん転記させるという方法です。
積載効率順にという条件は、sheet2を降順に並び替えてから、vlookupで日付ごとに転記させようと思っているのですが、どうしても複数転記が発生した際の、転記場所の指定方法がわかりません。
言葉足らずな部分や分かりにくい箇所があるかと思いますが、
お力をしていただけますでしょうか。どうぞよろしくお願いいたします。
【sheet1】
A B C D E F G H I
1 1/1 金
2 1/2 土 36
3 1/3 日 33 37 39
4 1/4 月 27
・ ・ ・ 31 1/31 日 ※発生がない場合は、空欄のままにしたいです。
【sheet2】
A B C 1 日付 物量 積載効率 2 1/2 36 68 3 1/3 37 70 4 1/3 33 74 5 1/3 39 61 6 1/4 27 89 ・ ・ 全体件数は月によって変動。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
いろんなやりかたがありますが、素直に、ループさせて転記していく案です。
(ここでアップしたコード、要件不足でしたので、削除します。)
(β) 2016/02/12(金) 13:35
↑ 積載効率順をまったく無視してました。 その部分を追加して再掲します。
17:38 Sheet1 と Sheet2 を取り違えていたので訂正して再掲します。
Sub Test() Dim shT As Worksheet Dim c As Range Dim i As Long Dim stDate As Date Dim days As Long Dim sv As Variant
Application.ScreenUpdating = False
Set shT = Sheets("Sheet1") shT.Cells.ClearContents
With Sheets("Sheet2").Range("A1").CurrentRegion sv = .Formula
.Sort Key1:=.Range("A1"), Order1:=xlAscending, Key2:=.Range("C1"), Order2:=xlDescending, Header:=xlYes
stDate = .Range("A2").Value stDate = DateSerial(Year(stDate), Month(stDate), 1) days = Day(DateAdd("m", 1, stDate) - 1)
shT.Range("A1").Value = stDate shT.Range("A1").Resize(days).DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:=xlDay, Step:=1, Trend:=False shT.Range("B1").Resize(days).Formula = "=TEXT(A1,""aaa"")"
For Each c In .Range("A2", .Range("A" & Rows.Count).End(xlUp)) i = Day(c.Value) shT.Cells(i, Columns.Count).End(xlToLeft).Offset(, 1).Value = c.Offset(, 1).Value Next
.Value = sv
End With
End Sub
(β) 2016/02/12(金) 14:00
データ量が膨大で、特に同じ日のデータが数多く登場するなら以下のほうが、ほんのちょびっと効率的かも。
Sub Test2() Dim dic As Object Dim c As Object Dim d As Variant Dim x As Long Dim shT As Worksheet Dim stDate As Date Dim days As Long
Application.ScreenUpdating = False
Set shT = Sheets("Sheet1") Set dic = CreateObject("Scripting.Dictionary") shT.Cells.ClearContents
With Sheets("Sheet2")
stDate = .Range("A2").Value stDate = DateSerial(Year(stDate), Month(stDate), 1) days = Day(DateAdd("m", 1, stDate) - 1)
shT.Range("A1").Value = stDate shT.Range("A1").Resize(days).DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:=xlDay, Step:=1, Trend:=False shT.Range("B1").Resize(days).Formula = "=TEXT(A1,""aaa"")"
For Each c In .Range("A2", .Range("A" & Rows.Count).End(xlUp)) d = Day(c) If Not dic.exists(d) Then Set dic(d) = CreateObject("System.Collections.ArrayList") dic(d).Add CDbl(c.Offset(, 2).Value & "." & c.Offset(, 1).Value) Next
For Each d In dic dic(d).Sort dic(d).Reverse For x = 0 To dic(d).Count - 1 dic(d)(x) = Split(CStr(dic(d)(x)), ".")(1) Next shT.Cells(d, "C").Resize(, dic(d).Count).Value = dic(d).toarray Next End With
End Sub
(β) 2016/02/12(金) 20:17
(まーた) 2016/02/15(月) 08:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.