###やりたいこと
データを入れてから、並び替えを名前を基準に並び替えます。
→ここの部分はできてます。
次に例えばなのですが、、、
1.テスト
2.テスト
3.テスト
4.テスター
5.テスター
このように並び替えられたとします。
名前が変わった所で一行増やし、値の入力と関数を入れたいと思っています。
【例】
1.テスト 10
2.テスト 10
3.テスト 10
4.合 計 30
5.テスター 20
6.テスター 30
7.合 計 50
上記のような感じです。
数字の合計に関してはsum関数(他の方法であればそれで構いません)で手入力の場合は行っております。
合計という入力の列は決まっております。
上記は例ですので、実際とは違いますが番号に関してはわかりやすく打っているだけで、実際は番号は無くてもいいです。
###やってみたこと
すみません。。。VBAがまだまだなので、このあたりできておりません。。。
丸投げのような質問になってしまい大変申し訳ありません。
一応、下記のようなやり方を見ました。
VBA
1Dim i As Long, imax As Long 2Dim j As Long 3Application.ScreenUpdating = False 4imax = Cells(Rows.Count, "A").End(xlup).Row 5For i = ??? To imax 6j = i 7Do Until Range("A" & j).Value = 2 Or j >= imax 8j = j + 1 9Loop 10// これは、この後罫線を引くようになっていました。
上記コードにおいて???の部分は"2"が入っており、どうも表の中で2の部分が区切りとして、、、という感じだったようです。
では、名前などの場合はどうなるのか?がわかりません。。。
###最後に
質問の仕方というか、どういった情報を提示していけばいいのかわからずこのような乱文になってしまい大変申し訳ございません。
よろしくお願い致します。
###追記(今までのをまとめて、修正しました)
最初から提示してれば良かったです。本当に申し訳ない。
こんな感じでいいですかね?
列と行番号はあえて打っただけです。実際は空白の部分ですね。
【回答で試したこと1】
sub Test() Dim i As Long, imax As Long Dim j As Long Dim tmp As String imax = Cells(Rows.Count, "A").End(xlUp).Row j = 1 For i = imax + 1 To 2 Step -1 If Range("A" & i).Value <> Range("A" & i - 1).Value Then Range("A" & i & ":B" & i).Insert Shift:=xlDown Range("A" & i).Value = "合計" Range("B" & i).Value = Application.WorksheetFunction.SumIf(Range("A1:A65536"), Range("A" & i - 1).Value, Range("B1:B65536")) End If Next i End Sub
【別で見つけた方法を試したこと】
Sub Test() Dim st As Worksheet: Set st = ActiveSheet Dim c As Long: c = 8 Dim r As Long: r = 11 Do While r <= st.UsedRange.Rows.Count Dim a As Variant: a = st.Cells(r - 1, c).Value Dim b As Variant: b = st.Cells(r, c).Value If a <> "" And b <> "" And Left(a, 3) <> Left(b, 3) Then st.Rows(r).Insert End If r = r + 1 Loop Set st = Nothing End Sub
これを試した結果
空白自体はこちらがしっくりは来た気がしましたが、ここからのコーディングが知識不足となっております。
【あと解決したい部分】
1.上記表のN列の空白部分に合 計と入れたい
2.O列の空白部分にそこから上の部分の合計を出したい
【とりあえず参考にしつつやってみた部分】
Sub Test() Dim st As Worksheet: Set st = ActiveSheet Dim c As Long: c = 8 Dim r As Long: r = 11 Dim tmp As String tmp = "合 計" Do While r <= st.UsedRange.Rows.Count Dim a As Variant: a = st.Cells(r - 1, c).Value Dim b As Variant: b = st.Cells(r, c).Value If a <> "" And b <> "" And Left(a, 3) <> Left(b, 3) And r <> 11 Then st.Rows(r).Insert st.Cells(r, 14).Value = tmp st.Cells(r, 15).Value = "=SUM(R[-2]C:R[-1]C)" End If r = r + 1 Loop st.Cells(r, 14).Value = tmp Set st = Nothing End Sub
1.N列に合計の文字が入りました
2.sumでやってみたらどうなるんだろう?と思って入れてみました、値としては大丈夫でした。範囲はとりあえずです。
↓
1.最後の行の下にはこれだと入ってきませんでした。
上で提示した表で言うと21行目には合計とかが表示されない。
2.sumの範囲選択をどうしてみたらいいか?なんですが、、、
この2点に対して、補足とさせてください。
###最終的なコード
最終的に下記のようにしてみました。
Sub ボタン_Click() Dim st As Worksheet: Set st = ActiveSheet Dim c As Long: c = 8 Dim r As Long: r = 11 Dim tmp As String tmp = "合 計" Dim cnt As Long cnt = r Do While r <= st.UsedRange.Rows.Count Dim a As Variant: a = st.Cells(r - 1, c).Value Dim b As Variant: b = st.Cells(r, c).Value If a <> "" And b <> "" And Left(a, 3) <> Left(b, 3) And r <> 11 Then st.Rows(r).Insert st.Cells(r, 14).Value = tmp st.Cells(r, 15).Value = "=sum(R[" & cnt - r & "]C:R[-1]C)" st.Cells(r, 15).NumberFormatLocal = "[h]:mm" cnt = r + 1 End If r = r + 1 Loop st.Cells(r, 14).Value = tmp st.Cells(r, 15).Value = "=sum(R[" & cnt - r & "]C:R[-1]C)" Set st = Nothing End Sub
回答いただいたコードでできました!
一点だけ、やはり時刻計算の部分が少し変でしたので、対応しました!
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/30 06:01