|
下記「ファイル1」のように、回答用シート(B列はブランク)を作成しました。ファイル1には同じシートが10人分=10シートあります。
次にB列に回答してもらった後、マクロを使って「ファイル2」のように各質問ごとのシートに変えました。つまり、1人目から10人目までの回答の入った質問のシートが質問数分あります。(質問数はそのときによって変わります)
今回行いたいのは、1.このファイル2の各シートのC列にB列の文字数を入れ、2.各シートあるいはいずれかのシートに文字数の合計を入れる ということです。(2.はできれば)
LEN関数を使うことを考えましたが、シート数が多いので、また、ファイル1からファイル2を作る際のマクロにつなげて一連の作業でしたいのです。過去ログを見ましたが、類似のものが見当たらず、行き詰っています。どうかご教授ください。
ファイル2を作る際のコードは一番下に載せています。
ファイル1-Sheet1(一人目) ファイル1-Sheet2(二人目)…Sheet10まである
A B A B
1 Q1 ○○○(文字列) 1 Q1 ●●●●
2 Q2 △△△△ 2 Q2 ■■
3 Q3 ◇◇ 3 Q3 ▲▲▲
・ ・ ・ ・
・ ・ ・ ・
・ QX ××× QX ???
ファイル2-Sheet1(Q1のシート)…QXのシートまである
A B
1 シート番号 回答
2 1 ○○○
・ 2 ●●●●
・ ・
・ ・
11 10 \\\
Option Explicit
Sub 統合2()
集約2
分割2
End Sub
Private Sub 集約2()
Dim shSource As Worksheet, rngSource As Range
Dim bookSource As Workbook: Set bookSource = ActiveWorkbook
Dim rngDestination As Range
Set rngDestination = Workbooks.Add(xlWBATWorksheet).Sheets(1).Range("B2")
rngDestination.Offset(-1, -1).FormulaR1C1 = "シート番号"
rngDestination.Offset(-1, 0).FormulaR1C1 = "質問番号"
rngDestination.Offset(-1, 1).FormulaR1C1 = "回答"
For Each shSource In bookSource.Worksheets
If True Then
Set rngSource = shSource.UsedRange
rngSource.Copy rngDestination
rngDestination.Resize(rngSource.Rows.Count).Offset(, -1).Formula = shSource.Name
Set rngDestination = rngDestination.Offset(rngSource.Rows.Count)
End If
Next
End Sub
Private Sub 分割2()
Dim shDestination As Worksheet
Dim shSource As Worksheet: Set shSource = ActiveSheet
Dim vnt質問番号s As Variant, vnt質問番号 As Variant
vnt質問番号s = Array("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9")
For Each vnt質問番号 In vnt質問番号s
Set shDestination = Sheets.Add
shDestination.Name = vnt質問番号
shSource.Range("A1").AutoFilter Field:=2, Criteria1:=vnt質問番号
shSource.Range("A:A,C:D").Copy shDestination.Range("A1")
Next
Sheets(vnt質問番号s).Select
End Sub
|
|