|
素人じゅうすけ さん こんばんわ
最初に
>一つ問題があります。マクロを記入したのですが、「R=UsedRange.Rows.Count」のところで実行不能になります。「R=Rows.Count」と書き換えましたが、そのときに「Case DateValue(md1)」の部位にて実行不能になります。
>何がどのようにいけないのでしょうか?
R=Range("A1").CurrentRegion.Rows.Count
または
R=Range("A65536").End(xlUp).Row
にしてください
>Case DateValue(md1)」の部位にて実行不能になります。
InputBoxには 9/1 又は 9月1日 の日付形式で入力して下さい。
元のA列は日付形式で入力されていると思いますが。それで日付形式で入力された文字列をシリアル値にする必要があるためです。
------------------------------------
次に
>例えば、A氏が三件だとしますと、C列にその日付(縦に、つまりは1行目からスタートの場合は、
1行目から3行目まで)早いもの順にすべて表示させたいのです。
>その下、一行開けて次の人を表示させたいのです。次の人は5行目からのスタートと言うわけです。
そうすると並べ替えというのは何を基準にするのですか?
先に提示したコードでは
名前指定 A氏 A氏が3件あったら合計して2行目に表示
人名 数量 日付
A 600
次にC氏を指定 2件で 合計850なら A氏より大きいからC氏が上になる。
人名 数量 日付
C 850
A 600
と並べ替えていますが、
ご説明の通りだと並び替えは必要なくて
人名 数量 日付
A 250 8/12
A 50 8/20
A 300 9/1
1行空ける
C 400 8/15
C 450 8/30
ということですか?
そうでしたら下記コードで
Sub Test2()
Dim R As Long, R2 As Long '元データの行数と表示先の最終の行番号
Dim 人名 As String
'表示先Sheet4に項目が入っていなかったら実行しない
If Sheets("Sheet4").Range("A1") = "" Then Exit Sub
R = Range("A65536").End(xlUp).Row
人名 = InputBox("抽出する人")
'元データから拾い出してSheet4に表示
For Each Rng In Range(Range("C2"), Cells(R, 3))
If Rng.Value = 人名 Then
With Sheets("Sheet4")
.Activate
R2 = .Range("A65536").End(xlUp).Offset(1, 0).Row
.Cells(R2, 1) = 人名
.Cells(R2, 2) = Rng.Offset(0, 4) '数量
.Cells(R2, 3) = Rng.Offset(0, -2) '日付
End With
End If
Next
'人名が2つ以上あったら間に行を挿入する
Sheets("Sheet4").Activate
With ActiveSheet
If Range("A3") = "" Then Exit Sub
For i = 3 To .Range("A65536").End(xlUp).Row
If .Cells(i, 1) <> "" And .Cells(i - 1, 1) <> "" Then
If .Cells(i, 1) <> .Cells(i - 1, 1) Then
.Cells(i, 1).EntireRow.Insert
End If
End If
Next i
End With
End Sub
行挿入部分でエラー対策
1.A3が空白 詰まりデータが1件しか表示されていないので、行挿入は不要
2.iが3 詰まりA2とA3が空白でない時で人名が異なっている場合は 行を挿入
3 以下同様
と処理されます
-------------------------------------------------------
最初に並べ替えということでしたが、これからどこを基準にして並べ替えをしたらいいですか?
もしかして C氏の合計が大きいから
人名 数量 日付
C 400 8/15
C 450 8/30
1行空ける
A 250 8/12
A 50 8/20
A 300 9/1
ということですか?
これはかなり難しいと思います。人名毎にデータ件数がバラバラだから。
新たに質問を立てて、詳しい方にお願いされるほうが良いかと思います。
|
|