|
▼ima さん:
こんにちは。
>こんにちは。ありがとうございます!ほぼ、ほぼ完成です。より理想に近づけるため、後は自力で修正しようとしたのですが…最後の1ステップ?で止まってしまいました。もう少しだけ診ていただけるでしょうか?
>'====================================================================
>Option Explicit
>'====================================================================
>Sub 統合2()
> Dim newshtnm()
> Dim oldshtnm()
> Dim idx As Long
> Dim 元ブック As Workbook
> Dim 集計ブック As Workbook
> Dim total_sht As Worksheet
> idx = 0
> Set 元ブック = ActiveWorkbook
> With 元ブック
> ReDim oldshtnm(1 To .Worksheets.Count, 1 To 1)
> For idx = 1 To Worksheets.Count
> oldshtnm(idx, 1) = .Worksheets(idx).Name
> Next
> End With
> newshtnm() = Range("a1", Cells(Rows.Count, 1).End(xlUp).Offset(-2, 0)).Value
>
>>ここで、Offset(-2,0)をOffset(-1,0)にする。
'これでよいと思います。
>
>Set 集計ブック = mk_book(newshtnm())
> With 集計ブック
> For idx = 1 To .Worksheets.Count
> With .Worksheets(idx)
> .Range("a1:c1").Value = Array("シート番号", "回答", "文字数")
> .Range("d2:d" & UBound(oldshtnm(), 1) + 1).Value = oldshtnm()
> .Range("a2:a" & UBound(oldshtnm(), 1) + 1).Formula = _
> "=row()-1"
> .Range("b2:b" & UBound(oldshtnm(), 1) + 1).Formula = _
> "=if(indirect(ADDRESS(" & idx & ",2,,,""[" & 元ブック.Name & "]""&d2))="""",""""," & _
> "indirect(ADDRESS(" & idx & ",2,,,""[" & 元ブック.Name & "]""&d2)))"
> .Range("c2:c" & UBound(oldshtnm(), 1) + 1).Formula = _
> "=len(b2)"
> .Cells(UBound(oldshtnm(), 1) + 2, 3).Formula = _
> "=sum(c2:c" & UBound(oldshtnm(), 1) + 1 & ")"
> With .Range("a2:b" & UBound(oldshtnm(), 1) + 1)
> .Value = .Value
> End With
> .Range("d2:d" & UBound(oldshtnm(), 1) + 1).Value = ""
> End With
> Next
> Set total_sht = .Worksheets.Add(after:=.Worksheets(.Worksheets.Count))
>' ↓ここから、トータルシートの作成
> With total_sht
> .Name = "トータルシート"
> .Range("a1:b1").Value = Array("シート名", "文字数小計")
> .Range("a2:a" & UBound(newshtnm(), 1) + 1).Value = newshtnm()
>
>>ここで .Range("a2:a" & UBound(newshtnm(), 1)).Value = newshtnm() とする。
' ↑これ、ナイス修正です。
>
> .Range("b2:b" & UBound(newshtnm(), 1) + 1).Value = _
> "=indirect(address(" & UBound(oldshtnm(), 1) + 2 & ",3,,,a2))"
>
>>ここで .Range("b2:b" & UBound(newshtnm(), 1)).Value = _
>> "=indirect(address(" & UBound(oldshtnm(), 1) & ",3,,,a2))"
>>とする。
'問題は、↑ここ。集計ブックの各シートの文字数の合計値の位置は変わっていないので
' .Range("b2:b" & UBound(newshtnm(), 1)).Value = _
"=indirect(address(" & UBound(oldshtnm(), 1)+2 & ",3,,,a2))"
' ↑の「+2」は消さない
> .Cells(UBound(newshtnm(), 1) + 2, 2).Formula = _
> "=sum(b2:b" & UBound(newshtnm(), 1) + 1 & ")"
>
>>ここで .Cells(UBound(newshtnm(), 1) + 1, 2).Formula = _
>> "=sum(b2:b" & UBound(newshtnm(), 1) & ")" とする。
'これでよいと思います。
>
> End With
> End With
>End Sub
>'====================================================================
>Function mk_book(shtnm()) As Workbook
> Dim idx As Long
> Set mk_book = Workbooks.Add
> With mk_book
> For idx = LBound(shtnm()) To UBound(shtnm())
> If idx > .Worksheets.Count Then
> .Worksheets.Add after:=.Worksheets(.Worksheets.Count)
> End If
> .Worksheets(idx).Name = shtnm(idx, 1)
> Next idx
> End With
>End Function
>
>この直し方が正しいのかどうか自信ないのですが、とりあえず、シートの形だけは希望通りになりました。問題は、「トータルシート」のB列の「文字数小計」の数値が正しくないということです。B列に入っている数式(B2の場合)
>=INDIRECT(ADDRESS(30,3,,,A2))
>がおかしいのではと思うのですが、ここから先がお手上げです。
>どうぞよろしくお願いします。
>PS 連日時間を割いてくださってありがとうございます。また、本当に親切にお答えくださって感謝しています。おっしゃるとおり、コードを比較するだけも大変勉強になります。
私が確認した限りでは、上記の一箇所の訂正でよいと思いますが・・・。
|
|