Excel VBA質問箱 IV

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

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


11892 / 13645 ツリー ←次へ | 前へ→

【13291】複数のセルの文字列を同じシート内の一つ... ima 04/4/30(金) 14:28 質問[未読]
【13297】Re:複数のセルの文字列を同じシート内の一... ichinose 04/4/30(金) 21:29 発言[未読]
【13298】訂正 ichinose 04/5/1(土) 8:31 発言[未読]
【13483】Re:訂正 ima 04/5/6(木) 14:39 お礼[未読]

【13291】複数のセルの文字列を同じシート内の一つ...
質問  ima  - 04/4/30(金) 14:28 -

引用なし
パスワード
   こんにちは。12802でお世話になったimaです。ichinoseさんに教えていだたいたコードをベースに、実際に使う体裁に整えていました。そこである大事なことを忘れていたことに気がつきました。

マクロの実行によりできた集計ブックは

    A列        B列        C列
1    シート番号    回答        文字数
2     1        ◎◎        2
・     2        ●●●●      4
・     ・         ・        ・
・     ・         ・        ・
・     X         \\\         3

のようになります。
最終目的のひとつは、B2以下の文字列をまとめて別のエクセルファイルのある一つのセル(結合セルで解除できない)に貼り付けること(これは手作業でします)なのですが、複数のセルを別の一つのセルにコピーできないですよね。そこで、

    A列        B列        C列
1    シート番号     回答        文字数
2     1        ◎◎        2
・     2        ●●●●      4
・     ・        ・        ・
・     ・        ・        ・
・     X        \\\         3
     
      X+2        

B(X+2)のセルにB2からBXまでの文字列をコピーしようと考えました。
イメージとしては、下記のように、セル内に上記B列各セルの内容が改行され、頭に「・」がついた形です。

セル B(X+2)

・◎◎
・●●●●
  ・
  ・
・\\\

私の力量では、単一(例えばB2)のセル内容をコピーすることしかできませんでした。
過去ログで、別途テキストファイルに書き出すというのを見たのですが、同じシート内ではどう応用していいのかわかりません。

今回の質問に関係ない箇所もありますが、下記にコード全体を載せます。
なお、会社のパソコンなので、連休中返事が遅れるかもしれませんが、よろしくお願いします。
'====================================================================
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(-1,  0)).Value '最後のシートを削除する

  Set 集計ブック = mk_book(newshtnm()) '作業ファイルの作成
  With 集計ブック
   For idx = 1 To .Worksheets.Count
     With .Worksheets(idx)
      .Range("a1:c1").Value = Array("研修生通し番号", "回答", "文字数") '1行目作成
      .Range("d2:d" & UBound(oldshtnm(), 1) + 1).Value = oldshtnm()
      .Range("a2:a" & UBound(oldshtnm(), 1) + 1).Formula = "=row()-1" 'A2から研修生通し番号を入れる
      .Range("b2:b" & UBound(oldshtnm(), 1) + 1).Formula = _
        "=if(indirect(ADDRESS(" & idx & ",2,,,""[" & 元ブック.Name & "]""&d2))="""",""""," & _
        "indirect(ADDRESS(" & idx & ",2,,,""[" & 元ブック.Name & "]""&d2)))" 'B列に回答を入れる
      .Range("c2:c" & UBound(oldshtnm(), 1) + 1).Formula = "=len(b2)" 'C列にカウントした文字数を入れる
      .Cells(UBound(oldshtnm(), 1) + 2, 3).Formula = _
         "=sum(c2:c" & UBound(oldshtnm(), 1) + 1 & ")" 'C列の最終行に各シートの文字数小計を入れる
      .Columns("b:b").ColumnWidth = 95 '列幅設定
      .Columns("a:a").ColumnWidth = 7.25
      .Rows("1").RowHeight = 27 '行幅設定
      .Range("A1").WrapText = True 'セル折り返し設定
     
With .Range("a2:b" & UBound(oldshtnm(), 1) + 1)
        .Value = .Value
      End With
      .Range("d2:d" & UBound(oldshtnm(), 1) + 1).Value = ""
    End With
   
      If Worksheets(idx).Name = "翻訳者注記(あれば)" Then Columns("c").EntireColumn.Hidden = True 'C列の非表示
   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)).Value = newshtnm()
  End With
  With Range("b2:b" & UBound(newshtnm(), 1) + 1) '小計の設定
     .Value = "=indirect(address(" & UBound(oldshtnm(), 1) + 2 & ",3,,,a2))"
     .NumberFormat = "###,##0" 'B列桁数区切り
  End With
  With Cells(UBound(newshtnm(), 1) + 1, 2) '合計値の設定
     .Formula = "=sum(b2:b" & UBound(newshtnm(), 1) & ")"
     .Font.Bold = True
     .Font.ColorIndex = 5
  End With
  With Cells(UBound(newshtnm(), 1) + 1, 3) '枚数換算設定
     .Formula = "(" & (Cells(UBound(newshtnm(), 1) + 1, 2)) / 400 & "枚相当)"
     Range(Cells(UBound(newshtnm(), 1) + 1, 1), Cells(UBound(newshtnm(), 1) + 1, 4)).Borders(xlTop).LineStyle = xlContinuous '罫線
  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

【13297】Re:複数のセルの文字列を同じシート内の...
発言  ichinose  - 04/4/30(金) 21:29 -

引用なし
パスワード
   ▼ima さん、こんばんは。
例えば、シート(Sheet1)のB列に以下のようなデータが入っていたとします。

       B
 1     回答
 2     ◎◎
 3     ●●●●
 4     ×××
 5     ○○○○○○○○
 6     △△△△
 7     ■■■■■■■■■■■■■■■■
 8     □□□□□□□□□□
 9     ???????????????
 10     ∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴
 11     \\\

これで以下のコードを実行すると、
'==============================================================
Sub test()
  With Worksheets("sheet1")
   .Cells(13, 2).Value = "・" & Join(Application.Transpose(.Range("b2:b11")), vbLf & "・")
   .Cells(13, 2).Columns.AutoFit
   End With
End Sub


セルB13に

・◎◎
・●●●●
・×××
・○○○○○○○○
・△△△△
・■■■■■■■■■■■■■■■■
・□□□□□□□□□□
・???????????????
・∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴
・\\\

に上記のように表示されます。

後は、ima さんのコードにこれを応用してみて下さい。

【13298】訂正
発言  ichinose  - 04/5/1(土) 8:31 -

引用なし
パスワード
   ▼ima さん、おはようございます。
'=======================================================
Sub test()
  With Worksheets("sheet1")
   .Cells(13, 2).Value = "・" & Join(Application.Transpose(.Range("b2:b11")), vbLf & "・")
   .Cells(13, 2).EntireColumn.AutoFit
   .Cells(13, 2).EntireRow.AutoFit
   End With
End Sub

行の幅も調整しないと・・・。

【13483】Re:訂正
お礼  ima  - 04/5/6(木) 14:39 -

引用なし
パスワード
   ▼ichinose さん:
再度お世話になりました。既存のコードに組み入れたら、
思い通りの結果を得ることができました。

おかげさまでこれまでの作業時間がものすごく縮小されました。
ありがとうございました!

これからもVBAの勉強を続けていきますのでよろしくお願いします。

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