[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日付ごとにセルを結合または日付を一行だけ表示』(ゆき)
Excel2010で、ユーザーフォームから出荷予定リストを作っています。
元のシートに
A B C D 1 全物件リスト 2 出荷日 納品日 管理番号 物件 3 2013/2/1 2013/2/2 AA1302-01 ABCビル 4 2013/2/4 2013/2/5 AA1302-02 いろは公園 5 2013/2/12 2013/2/12 AB1302-01 ABCビル
このような感じでV列までデータが入っています。
この中から、「2013/2/19〜2013/2/22」のように期間を指定して、出荷予定一覧を作っています。
やり方はTextBox1に期間の開始日、TextBox2に期間の終了日を入れ、「出荷予定_雛形2」 というシートをコピーして下記のようなレイアウトのシートを作ります。
A B C D E F G H 1 出荷予定一覧 2 出荷日 管理番号 物件 品種 数量 担当 配送方法 備考 3 2013/2/19 AB1302-10 ホテル○○ AA 10 田中 自社便 4 2013/2/20 CC1302-01 東京AAビル CC 3 鈴木 佐川急便 2個口 5 2013/2/20 DD1302-03 ○○社新築工事 AD 1 鈴木 福山通運 6 2013/2/20 BB1302-02 ○○社新築工事 BB 1 鈴木 福山通運 DD1302-03と同梱 7 2013/2/21 AB1302-09 朝日公園 AB 20 田中 チャーター 8 2013/2/21 CC1302-02 ○○大学 CC 14 田中 自社便
上記のようになったシートに、格子罫線を引いて一覧表として印刷しています。 やりたいのは、現在は出荷予定日が同じものがずらっと並んでいるので、同じ出荷日で ひとかたまりにするために ・A列の同じ出荷予定日のセルを結合して一つのセルにする または ・A列で、同じ出荷予定日の日付は一行しか表示せず、
4 2013/2/20 CC1302-01 東京AAビル CC 3 鈴木 佐川急便 2個口 5 DD1302-03 ○○社新築工事 AD 1 鈴木 福山通運 6 BB1302-02 ○○社新築工事 BB 1 鈴木 福山通運 DD1302-03と同梱
このようにして4行目・5行目の下線はひかない
このどちらかで、「この塊が出荷日が同じもの」と分かりやすくしたいのですが、どのようにすればよいか行き詰りました。
今、元のデータシートから該当データを抜き出し、雛形をコピーしたシートにデータを羅列、 日付と物件でソートしたのが下記のコードです。
Private Sub CommandButton1_Click()
Dim i As Long Dim j As Long Dim z As Long Dim lRow As Long Dim sDate As Variant Dim eDate As Variant Dim myRow As Long Dim cnt As Long Dim shName As String Dim bName As String Dim DataCnt As Long
If IsDate(TextBox1.Value) Then sDate = CDate(TextBox1.Value) Else MsgBox "正しい日付を入力してください" Exit Sub End If
If IsDate(TextBox2.Value) Then eDate = CDate(TextBox2.Value) Else MsgBox "正しい日付を入力してください" Exit Sub End If
Set ws1 = ThisWorkbook.Worksheets("全物件データ") z = ws1.Range("C" & ws1.Rows.Count).End(xlUp).Row
DataCnt = 0 cnt = 1 bName = "出荷予定_" & Format(sDate, "mmdd") & "_" & Format(eDate, "mmdd") ThisWorkbook.Sheets("出荷予定_雛形2").Copy After:=Sheets(Sheets.Count)
shName = bName
Do If Not IsObject(Evaluate("'" & shName & "'!A1")) Then Exit Do cnt = cnt + 1 shName = bName & "(" & cnt & ")" Loop
ActiveSheet.Name = shName Set lsh = ThisWorkbook.Sheets(Sheets.Count)
For i = 3 To z
lRow = lsh.Range("B" & lsh.Rows.Count).End(xlUp).Row
j = lRow + 1
If ws1.Cells(i, 1).Value >= sDate And ws1.Cells(i, 1).Value <= eDate Then lsh.Cells(j, 1).Value = ws1.Cells(i, 1).Value lsh.Cells(j, 2).Value = ws1.Cells(i, 3).Value lsh.Cells(j, 3).Value = ws1.Cells(i, 4).Value lsh.Cells(j, 4).Value = ws1.Cells(i, 7).Value lsh.Cells(j, 5).Value = ws1.Cells(i, 8).Value lsh.Cells(j, 6).Value = ws1.Cells(i, 10).Value lsh.Cells(j, 7).Value = ws1.Cells(i, 11).Value lsh.Cells(j, 8).Value = ws1.Cells(i, 22).Value
DataCnt = DataCnt + 1
End If Next i
myRow = lsh.Range("B" & lsh.Rows.Count).End(xlUp).Row
lsh.Range("A3:H" & myRow) _ .Sort key1:=lsh.Cells(3, 1), order1:=xlAscending, _ key2:=lsh.Cells(3, 3), order2:=xlAscending
With lsh.Range("A2:H" & myRow).Borders .LineStyle = xlContinuous .Weight = xlThin End With
End Sub
よろしくお願いいたします。
日付の後に物件名でソートしているので、必ず日付順に並んでいるわけではないんですよね? 結合は好きじゃないので、とりあえず後者の案でサンプルを書いてみました。 Sub sample() Dim s As Long, a As Range s = 3 For Each a In Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row) If a.Value <> a.Offset(1, 0).Value Then a.Resize(, 8).Borders(xlEdgeBottom).LineStyle = xlContinuous If a.Row <> s Then a.Offset(s - a.Row + 1).Resize(a.Row - s).ClearContents End If s = a.Row + 1 End If Next a End Sub (Jera)
1) 実際にMergeする
Sub DoMerge() Dim i As Long, myDate, temp Application.DisplayAlerts = False With Range("a1").CurrentRegion .Offset(1).Resize(.Rows.Count - 1).Borders.Weight = 2 temp = 3: myDate = .Cells(3, 1).Value For i = 3 To .Rows.Count + 1 If myDate <> .Cells(i, 1).Value Then .Rows(temp & ":" & i - 1).Columns(1).Merge myDate = .Cells(i, 1).Value temp = i End If Next End With Application.DisplayAlerts = True End Sub
2) 罫線だけ
Sub BordersOnly() Dim i As Long, myDate, temp With Range("a1").CurrentRegion .Offset(1).Resize(.Rows.Count - 1).Borders.Weight = 2 temp = 3: myDate = .Cells(3, 1).Value For i = 3 To .Rows.Count + 1 If myDate <> .Cells(i, 1).Value Then With .Rows(temp & ":" & i - 1).Columns(1) .Borders(12).LineStyle = xlNone .ClearContents .Cells(1).Value = myDate End With myDate = .Cells(i, 1).Value temp = i End If Next End With End Sub (seiya)
(Jera)様、すみません、説明不足でした(汗)
>このようにして4行目・5行目の下線はひかない これはA列の4行目・5行目だけ下線をひかない、というつもりでした…言葉足らずですみません…
>必ず日付順に並んでいるわけではないんですよね はい、そうです。
(seiya)様 ありがとうございます。 どちらの案でもうまくいきました!
(ゆき)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.