Excel VBA質問箱 IV

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

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


123 / 76612 ←次へ | 前へ→

【82158】グラフのコピー
質問  あおこ  - 23/6/12(月) 15:00 -

引用なし
パスワード
   いつも参考にさせていただきありがとうございます。


アンケートの集計結果を作成するマクロを組んでいます。

「クロス集計_割合」に、質問ごとにすべての学校分の集計があり、
指定した学校分のデータを抽出し、あらかじめ作成したグラフをコピーし、
「結果ひな形」の通知様式と組み合わせて作成しています。

指定校分のデータ抽出は、「クロス集計_割合」を複写後、指定校以外のデータ行を削除し行っています。
データ作成後、質問ごとに順に範囲を選択し「基本グラフ」にあるグラフをコピーし、データソースを変更し作成しています。
今回のアンケートは9問あるため、グラフは1シートに9個コピーされます。

下のようにコードを書いていますが、ブレークポイントを入れて少しずつ実行した場合、きちんと作成されるのですが、一気に処理すると、時々固まって落ちます。(3〜4回に1回応答なしになって落ちます。)


下記のうち、グラフをコピーする部分を丸ごと削除すると、数回試しても落ちることはなかったので、グラフのコピー箇所に問題があるのだろうと思いますが、改善方法がよくわかりません。
ご指摘、もしくはヒントでもいただけると幸いです。

よろしくお願いいたします。


Sub 指定校結果作成()

 Set wb_A = ThisWorkbook
 Set sh_A1 = wb_A.Worksheets("作業用")
 Set sh_A2 = wb_A.Worksheets("クロス集計_割合")
 Set sh_A3 = wb_A.Worksheets("基本グラフ")
 Set sh_A4 = wb_A.Worksheets("結果ひな形")
  gakko = sh_A1.Range("I14")
 
  MsgBox gakko & "分の結果を作成します", vbInformation
 
  Application.DisplayAlerts = False
  Application.ScreenUpdating = False
  gakko = Left(gakko, InStr(gakko, "中"))
 
 '’学校名シートがないか確認して追加、あれば削除するコードを記述(記載省略)
 ‘追加したシート名をgakkoに変更するコードを記述(記載省略)  
  
  Set sh_A5 = wb_A.Worksheets(gakko)
  With sh_A5
   sh_A2.UsedRange.Copy
   .Activate
   .Range("A2").Select
   Selection.PasteSpecial Paste:=xlPasteAll
   Selection.PasteSpecial Paste:=xlPasteColumnWidths '<書式(列幅)もコピーします。>
   Application.CutCopyMode = False
  
  ‘学校名からコードg_codeを参照する処理を記述(記載省略)

   lastRow1 = .Range("A" & Rows.Count).End(xlUp).Row
   '’不要行削除
   For GYO = lastRow1 To 2 Step -1
   If Left(.Cells(GYO, 1), 2) <> "質問" And .Cells(GYO, 1) <> "合計" And .Cells(GYO, 1) <> g_code Then ‘指定校・質問行・合計行以外のデータを削除
    .Range(GYO & ":" & GYO).Delete
   End If
   Next GYO
 
  
   lastRow1 = .Range("A" & Rows.Count).End(xlUp).Row
   '質問番号追加および0値クリア
   For GYO = 2 To lastRow1
    If Left(.Cells(GYO, 1), 2) = "質問" Then
      .Cells(GYO, 2) = Right(.Cells(GYO, 1), 1) & " " & .Cells(GYO, 2)
    Else
    '0値クリア
      lastcol1 = .Cells(GYO, Columns.Count).End(xlToLeft).Column '読み込み行の最終列を取得
      For RETSU = 3 To lastcol1
        If .Cells(GYO, RETSU) = 0 Then
          .Cells(GYO, RETSU) = ""
        End If
      Next RETSU
    End If
   Next GYO
  ''ここまででグラフ元データ完成
  '=========================================
  ''データを基にグラフを作成
  lastRow1 = .Range("A" & Rows.Count).End(xlUp).Row
  GYO = 2 '開始行
  G = 0
  Do While .Cells(GYO, 1).Value <> ""
   .Activate
  
  '=========================================
  '質問ごとのデータ範囲を選択
   GYO1 = GYO ' グループの先頭行→GYO1
   GYO = GYO + 1
    ' 次の行から同じグループでない行を見つける
    Do While .Cells(GYO, 1).Value <> "合計" '条件を満たしている間処理を繰り返す
      GYO = GYO + 1
    Loop
   GYO2 = GYO  ' 同じグループの最終行→GYO2
   GYO = GYO + 1
   G = G + 1 '設問数をカウント
   lastcol1 = .Cells(GYO1, Columns.Count).End(xlToLeft).Column '読み込み行の最終列を取得
   .Range(.Cells(GYO1, 2), .Cells(GYO2, lastcol1 - 1)).Select
    
   Set R = Selection.Item(1)
   Set S = Selection
  '=========================================

   If G = 1 Then '1つめのグラフの位置(行)
    G_GYO = 17
   Else
    G_GYO = .ChartObjects(.ChartObjects.Count).BottomRightCell.Row + 2 'グラフの右下のセルの行
   End If
    'sh_A3.ChartObjects(1).Copy.Range ("A1")
    sh_A3.ChartObjects(1).Copy
    DoEvents
    
    .Activate
    .Range("A1").Select
    .Paste
    Application.CutCopyMode = False
    .ChartObjects(.ChartObjects.Count).Left = .Range("K" & G_GYO).Left
    .ChartObjects(.ChartObjects.Count).Top = .Range("K" & G_GYO).Top
    .ChartObjects(.ChartObjects.Count).Chart.SetSourceData Source:=S '選択範囲をデータソースに
    .ChartObjects(.ChartObjects.Count).Chart.ChartTitle.Text = R.Value
    .ChartObjects(.ChartObjects.Count).Height = .Range("A1:A15").Height
    .ChartObjects(.ChartObjects.Count).Width = .Range("K1:S1").Width
   Loop
  
   G_GYO = .ChartObjects(.ChartObjects.Count).BottomRightCell.Row + 2 'グラフの右下のセルの行
  
   ''結果ひな形をコピー
   sh_A4.UsedRange.Copy
   .Activate
   .Range("K2").Select
   Selection.PasteSpecial Paste:=xlPasteAll
   'Selection.PasteSpecial Paste:=xlPasteColumnWidths '<書式(列幅)もコピーします。>
   Application.PrintCommunication = False '//プリンタとの接続を切断
   '印刷範囲設定 及び横1ページに収める
   .PageSetup.PrintArea = .Range(.Cells(1, 10), .Cells(G_GYO, 20)).Address
   .PageSetup.Zoom = False
   .PageSetup.FitToPagesWide = 1
   .PageSetup.FitToPagesTall = False
   Application.PrintCommunication = True '//プリンタと再接続
  End With 'sh_A5
  
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
  
  MsgBox gakko & "分を作成しました", vbInformation

End Sub

69 hits

【82158】グラフのコピー あおこ 23/6/12(月) 15:00 質問[未読]
【82159】Re:グラフのコピー マナ 23/6/12(月) 22:36 発言[未読]
【82160】Re:グラフのコピー あおこ 23/6/13(火) 10:08 発言[未読]
【82161】Re:グラフのコピー マナ 23/6/13(火) 23:21 発言[未読]
【82162】Re:グラフのコピー あおこ 23/6/14(水) 16:31 質問[未読]
【82163】Re:グラフのコピー あおこ 23/6/14(水) 18:32 質問[未読]
【82164】Re:グラフのコピー マナ 23/6/14(水) 21:25 発言[未読]
【82165】Re:グラフのコピー あおこ 23/6/15(木) 14:33 お礼[未読]
【82166】ディメンションが無効 あおこ 23/6/15(木) 17:56 質問[未読]
【82167】Re:ディメンションが無効 マナ 23/6/15(木) 21:13 発言[未読]
【82168】Re:ディメンションが無効 あおこ 23/6/16(金) 10:58 お礼[未読]
【82169】Re:ディメンションが無効 マナ 23/6/16(金) 21:24 発言[未読]
【82170】Re:ディメンションが無効 あおこ 23/6/20(火) 10:22 お礼[未読]

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