ここから本文です

VBAについての質問です. 仕事でこれまで手作業で行っていた作業があり, 自動化...

アバター

ID非公開さん

2019/1/2219:58:55

VBAについての質問です.
仕事でこれまで手作業で行っていた作業があり,
自動化できないものかとマクロを作成してみました.
行いたい処理は,転記元と転記先の2つのブックについて
転記先ブック内のシート(2)に転記元

の表を貼り付け、
転記元の1行目が空欄になるまで、転記元の35列目が
350の時のみ①~⑩までの動作を行う。というものです.

上記の処理内容のつもりで以下のマクロを作成しましたが、
実行すると処理がなされず、フリーズしてしまう状態です。
IF文(35列目が350の時のみ転記の部分)をつける前は
問題無く動作していたため、この部分が原因かと思うのですが、
原因が分かる方、ご教示頂ければと思います。

初心者のため、基本的な部分が間違っているかもしれませんが
何卒よろしくお願い致します。



Sub 返信表取込マクロ()

'wsは転記元
'wsDATAは転記先

Application.Calculation = xlCalculationManual'自動計算オフ
Application.ScreenUpdating = False'画面更新オフ



Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(2)
Dim i As Long: i = 8
Dim j As Long: j = 8


Do While ws.Cells(i, 1).Value <> "" '転記先のセル(i, 1)が空欄になるまで

If wsDATA.Cells(i, 35).Value = "350" Then '転記先35列目が"350"の時に転記

wsDATA.Cells(i, 36).Value = ws.Cells(j, 36).Value '転記①
wsDATA.Cells(i, 59).Value = ws.Cells(j, 59).Value '転記②
wsDATA.Cells(i, 61).Value = ws.Cells(j, 61).Value '転記③
wsDATA.Cells(i, 63).Value = ws.Cells(j, 63).Value '転記④
wsDATA.Cells(i, 65).Value = ws.Cells(j, 65).Value '転記⑤
wsDATA.Cells(i, 67).Value = ws.Cells(j, 67).Value '転記⑥
wsDATA.Cells(i, 69).Value = ws.Cells(j, 69).Value '転記⑦
wsDATA.Cells(i, 71).Value = ws.Cells(j, 71).Value '転記⑧
wsDATA.Cells(i, 73).Value = ws.Cells(j, 73).Value '転記⑨
wsDATA.Cells(i, 75).Value = ws.Cells(j, 75).Value '転記⑩

Application.StatusBar = i & "行目まで完了..."
DoEvents
If i Mod 25 = 0 Then '25ループに1回実行(フリーズ防止)
DoEvents 'エクセルのイベント処理
End If

i = i + 1: j = j + 1
End If

Loop

Application.StatusBar = False'ステータスバーオフ
Application.Calculation = xlCalculationAutomatic'自動計算オフ
Application.ScreenUpdating = True'画面更新オフ

End Sub

閲覧数:
52
回答数:
3

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tra********さん

2019/1/2322:55:23

>実行すると処理がなされず、フリーズしてしまう状態
というのであれば、↓の変更を試してください。

If i Mod 25 = 0 Then '25ループに1回実行(フリーズ防止)
DoEvents 'エクセルのイベント処理
End If

i = i + 1: j = j + 1
End If

Loop




j = j + 1
End If
If i Mod 25 = 0 Then '25ループに1回実行(フリーズ防止)
DoEvents 'エクセルのイベント処理
End If
i = i + 1
Loop

  • アバター

    質問者

    ID非公開さん

    2019/1/2421:55:15

    ご回答ありがとうございます.
    修正しましたところ,最後まで処理が実行
    されました.
    おかげ様で状況は改善されましたが,フリーズの
    原因は何だったのでしょうか.
    お手数ですが今後のためご教示頂ければ幸いです.

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

アバター

質問した人からのコメント

2019/1/28 21:04:53

みなさん丁寧に教えて頂きありがとうございました.
ベストアンサーは悩みましたが,traさんにさせて頂きました.
また機会がありましたら何卒よろしくお願い致します.

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

tac********さん

2019/1/2220:14:17

'wsは転記元

として

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(2)

のように定義されていますが、

'wsDATAは転記先

は何処で定義しているのですか?

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

por********さん

2019/1/2220:11:50

こんにちは。
文章では「転記元が、空白ではない、転記元が350」となっているのに、
コードの部分のコメントは「転記先が、」となってますよね。

さらに、コードが転記元なのに、コメントが転記先。 不一致。

問題が複数あります。 まず、コメントを正しくしてください。

次に、コメントに従ったシート変数なのか、です。

あと、セルにある350は、文字列?数値? それは、確認してください。

コードでは文字列比較してますよね、 そのことです

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる