質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

3583閲覧

VBA ソート等をした後の処理(見出しと罫線)

Z-TALBO

総合スコア525

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/04/30 08:52

###現在できていること

Visual

1Sub Test() 2 3 'データの並び替え 4 Const topleft = "H11" 5 With ActiveSheet 6 .Range(topleft & ":R" & .Range(topleft).End(xlDown).Row).Sort key1:=Range(topleft) 7 End With 8 ' H列の値ごとに空白行を挿入、合計という値とsum関数を入れる 9 Dim st As Worksheet: Set st = ActiveSheet 10 Dim c As Long: c = 8 11 Dim r As Long: r = 11 12 13 Dim tmp As String 14 tmp = "合 計" 15 16 Dim cnt As Long 17 cnt = r 18 19 Do While r <= st.UsedRange.Rows.Count 20 Dim a As Variant: a = st.Cells(r - 1, c).Value 21 Dim b As Variant: b = st.Cells(r, c).Value 22 23 If a <> "" And b <> "" And Left(a, 3) <> Left(b, 3) And r <> 11 Then 24 st.Rows(r).Insert 25 st.Cells(r, 14).Value = tmp 26 st.Cells(r, 15).Value = "=sum(R[" & cnt - r & "]C:R[-1]C)" 27 st.Cells(r, 15).NumberFormatLocal = "[h]:mm" 28 cnt = r + 1 29 End If 30 31 r = r + 1 32 33 Loop 34 35 st.Cells(r, 14).Value = tmp 36 st.Cells(r, 15).Value = "=sum(R[" & cnt - r & "]C:R[-1]C)" 37 38 Set st = Nothing 39 40End Sub

現在、こちらのサイトのお陰もあり上記のようなコードによって、思っている動作をしております。
さらに、追加したい部分として、、、
0. H列(氏名)毎に空白行は空くが、そこに見出しを追加したい。
0. 1人分毎に罫線を引いて、表のようにしたい。
この2点になります。

###現在の表と、理想の形
現在上記のコードを行った後の状態です。
イメージ説明
※実際は値がO列までは確実に入っているのですが、とりあえずなので入れていません。
※行番号等はわかりやすくなるかと思って、打ち込んでいます。実際は空白です。
※データを打ち込むのにわかりやすいように、最初には見出しをすでに置いてあります。

次に、理想の形です。
イメージ説明
最初の見出しと同じものを入れていく。
線に関しては、これだと逆にみづらい気もしますが、とりあえずこのような感じになれば良いと思っています。

###やったこと
ほとんどVBAを勉強しはじめなので、わからないままやっております。
空白行を3行にするのはできたけど、見出しの部分のコピーの仕方?
コピーすればっていうのはあっても、それをコピー先の指定などがイマイチです。

すみません、やったことではないのですが、、、

現状のコードの中に組み込むよりは別にしたほうがいいならばそれでも全然構いません。
どうか、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

追加したのは3行だけです。
罫線をひく
[http://officetanaka.net/excel/vba/cell/cell07.htm]
前回に続き力ずくに対応していますので、項目の変更やセルの変更等があると手間がかかると思われます。

VBA

1Sub Test() 2 3 'データの並び替え 4 Const topleft = "H11" 5 With ActiveSheet 6 .Range(topleft & ":R" & .Range(topleft).End(xlDown).Row).Sort key1:=Range(topleft) 7 End With 8 ' H列の値ごとに空白行を挿入、合計という値とsum関数を入れる 9 Dim st As Worksheet: Set st = ActiveSheet 10 Dim c As Long: c = 8 11 Dim r As Long: r = 11 12 13 Dim tmp As String 14 tmp = "合 計" 15 16 Dim cnt As Long 17 cnt = r 18 19 Do While r <= st.UsedRange.Rows.Count 20 Dim a As Variant: a = st.Cells(r - 1, c).Value 21 Dim b As Variant: b = st.Cells(r, c).Value 22 23 If a <> "" And b <> "" And Left(a, 3) <> Left(b, 3) And r <> 11 Then 24 st.Rows(r).Insert 25 st.Cells(r, 14).Value = tmp 26 st.Cells(r, 15).Value = "=sum(R[" & cnt - r & "]C:R[-1]C)" 27 st.Cells(r, 15).NumberFormatLocal = "[h]:mm" 28 29 '見出しのコピー 30 st.Rows(r + 1 & ":" & r + 2).Insert xlShiftDown 31 st.Range("H9:R10").Copy Destination:=st.Range("H" & r + 1 & ":R" & r + 2) 32 33 cnt = r + 1 34 End If 35 36 r = r + 1 37 38 Loop 39 40 st.Cells(r, 14).Value = tmp 41 st.Cells(r, 15).Value = "=sum(R[" & cnt - r & "]C:R[-1]C)" 42 st.Cells(r, 15).NumberFormatLocal = "[h]:mm" 43 44 '全体に罫線を引く 45 Range("H9:R" & r).Borders.LineStyle = xlContinuous 46 47 Set st = Nothing 48 49End Sub

投稿2016/04/30 10:38

tomato-salada

総合スコア68

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Z-TALBO

2016/04/30 10:49

素早い回答と、前回の質問に続き大変参考になりました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問