Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


68457 / 76734 ←次へ | 前へ→

【12814】Re:VBAで文字数カウントしたいのですが(...
回答  ichinose  - 04/4/15(木) 21:32 -

引用なし
パスワード
   ▼ima さん:
こんばんは。
一応、imaさんのご希望に沿うようなコードにしたつもりです。
前回のコードと比較して下さい。変更点は、ちょっとしたところですから・・。
'====================================================================
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
  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("b2:b" & UBound(newshtnm(), 1) + 1).Value = _
        "=indirect(address(" & UBound(oldshtnm(), 1) + 2 & ",3,,,a2))"
     .Cells(UBound(newshtnm(), 1) + 2, 2).Formula = _
        "=sum(b2:b" & UBound(newshtnm(), 1) + 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

マクロ実行は前回と同様に元ブックをアクティブにして実行して下さい。

>集計ブック-Sheet1(Q1のシート)
>  A列        B列      C列
>1 シート番号    回答      文字数
>2   1       ○○○      3
>・  2       ●●●●     4
>・  ・       ・       ・
>・  ・       ・       ・
>・  X       \\\       3
>
>集計ブック-最後のSheet(回答者)
>  A列        B列      C列
>1 シート番号    回答      文字数
>2  1        AAAA      4
>・  2        BBBB      4
>・  ・        ・      ・
>・  ・        ・      ・
>・  X         YYYY     4
>
>もうひとつは、最終目的である、各回答の文字数の総計を新しいシートに出したいのです。イメージとしては、集計ブックの新しいシートに下記のようなものができればよいのですが・・(レイアウトは問いません)
>
>    A列        B列        
>1    シート名     文字数小計
>2    Q1       (上記集計ブック-Sheet1のC列の合計値)
>3    Q2       (Sheet2のC列の合計値)
>・    ・          ・
>・    ・          ・    
>z    QX       (最後の質問のSheetのC列の合計値)
>z+1           (B2:Bzの総計)  

ほぼ、↑のように集計されるはずです。
数式をそのまま残しておきましたので、
例えば、集計ブックのQ1のB列(回答)を修正した場合、
C列の文字数に反映しますし、トータルシートの合計値も変更されるように
してあります。


>説明不足ですみません。
いいえ、これだけの仕様を提示して頂きました。
わかりやすかったですよ!!(まっ、これで仕様と違ったら、私の読解力不足です)

私が書いたコードは、せいぜい60ステップ程度ですが、
そのための仕様書となったら、最初の投稿と合わせてこれだけ書かなければならないということですよね?

この手の質問は、「仕様書を書く」勉強になるかも?

何はともあれ、確認して下さい。

0 hits

【12739】VBAで文字数カウントしたいのですが(長... ima 04/4/13(火) 17:04 質問
【12744】Re:VBAで文字数カウントしたいのですが(長... ichinose 04/4/13(火) 19:11 回答
【12755】Re:VBAで文字数カウントしたいのですが(... ima 04/4/14(水) 11:23 質問
【12784】Re:VBAで文字数カウントしたいのですが(... ichinose 04/4/14(水) 19:09 発言
【12802】Re:VBAで文字数カウントしたいのですが(... ima 04/4/15(木) 13:42 質問
【12814】Re:VBAで文字数カウントしたいのですが(... ichinose 04/4/15(木) 21:32 回答
【12839】Re:VBAで文字数カウントしたいのですが(... ima 04/4/16(金) 17:29 質問
【12861】Re:VBAで文字数カウントしたいのですが(... ichinose 04/4/17(土) 11:50 発言
【12910】Re:VBAで文字数カウントしたいのですが(... ima 04/4/19(月) 16:23 お礼
【12840】Re:VBAで文字数カウントしたいのですが(... ima 04/4/16(金) 17:33 発言

68457 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free