質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

3回答

22280閲覧

実行時エラー´-2147417848(80010108)について

21215

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

2クリップ

投稿2020/03/18 02:19

編集2020/03/18 02:49

前提・実現したいこと

基データを別シートに反映させて並べ替えと文字の置き換えを行うマクロを組んだのですが、
同じシートで作業しているのに何人かのPCではマクロが正常に動かずエラーが出てしまいます。
反映の別シートにマクロボタン設置

VBAは全くの初心者で分かりづらいかと思いますが、ご教示お願いいたします。

発生している問題・エラーメッセージ

実行時エラー´-2147417848(80010108)
オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。

該当のソースコード

Application.ScreenUpdating = False Range("A2:G2").Select Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Rows("7:7").Select Application.CutCopyMode = False Selection.Copy Rows("8:797").Select ActiveSheet.Paste Range("B7").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.Replace What:="delete", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Columns("V:V").Select Application.CutCopyMode = False Selection.Insert Shift:=xlToRight Range("V7").Select ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",""F"",RC[-1])" Range("V7").Select Selection.AutoFill Destination:=Range("V7:V797"), Type:=xlFillDefault Range("V7:V797").Select Rows("7:7").Select Range(Selection, Selection.End(xlDown)).Select ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Clear ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("N7:N797"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("V7:V797"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("J7:J797"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("L7:L797"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("F7:F797"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("【F】").Sort .SetRange Range("A7:HN797") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Application.ScreenUpdating = False ActiveSheet.Range("$A$6:$HK$797").AutoFilter Field:=14, Criteria1:="ヨコ" ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Clear ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("N7:N797"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("V7:V797"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("L7:L797"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("J7:J797"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("F7:F797"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("【F】").Sort .SetRange Range("A144:HN797") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Application.ScreenUpdating = False ActiveSheet.ShowAllData Columns("V:V").Select Selection.Delete Shift:=xlToLeft Range("B3:B6").Select Selection.Replace What:="部受付", Replacement:="済", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="事前", Replacement:="前", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="事後", Replacement:="後", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="いる", Replacement:="有", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="いない", Replacement:="無", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Range("K7").Select

試したこと

・アドイン設定確認→分析ツールのみチェック→同じように設定したところエラー出ていた数名のうち1人だけ問題解決
・新しいブックに作り直して、同じマクロを入れる→4回動作確認成功したが、その後はエラーが出て使用できず。(エラーが出ないで途中で動作が止まってしまう不具合も発生)

補足情報(FW/ツールのバージョンなど)

Excel2016

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/03/18 02:38

コードはマークダウンのcode機能を利用してご提示ください
y_waiwai

2020/03/18 02:38

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
DreamTheater

2020/03/18 03:35

エラーはどのセンテンスで発生するのですか?
21215

2020/03/18 04:17

大体、 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False でエラーになっています。
yureighost

2020/03/18 04:22

シート名だけ【F】にしてセルに何も入力しない分には処理は通りますね。 使っている人全員で発生しているわけではないこと。 オートメーションエラーという点で処理自体が不正なわけではなくて負荷等の問題だと思うんですが。 完全に記録したマクロを編集して作ったようなソースなので効率よく書き直せというのも厳しそうな気がします。
yureighost

2020/03/18 05:18

その Selection.PasteSpecial Paste~ のところですが、その処理が出ている部分二つとも Selection.Copy Selection.PasteSpecial Paste~ とコピーから貼り付け処理の間に、別のセルをSelectする処理を入れていないので、 同じ選択範囲で「コピー→形式を選択して貼り付ける」の動作をやっていることになります。 この部分いらない気がするのですが、一体何をやっている処理なのでしょうか。
21215

2020/03/18 05:19

マクロはやり始めたばかりで、マクロを記録するから大体の動きを入れてから行数などを修正するやり方しか出来ず…勉強不足で申し訳ございません。
21215

2020/03/18 05:56

一番初めの Range("A2:G2").Select Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False は、セル内に作成日時を記録するために =TEXT(FLOOR(NOW(),"0:30:0"),"yyyy/mm/dd/h:mm") の関数が入っています。 作成日時が進まないようにこのセルをコピーしてそのまま値貼り付けをしています。
yureighost

2020/03/18 06:11

理解しました。 数式を値で上書きしてるってことですね。
guest

回答3

0

ベストアンサー

コメントで伺いましたが、
数式を値で上書きする処理はセルのValueに値を代入することでコピー&ペーストより高速にできますので修正してみました。
この部分とV列のところで列を挿入する処理を選択処理なしで直接行うようにしました。
ただV列より右列にデータが非常に多いなどするとどうしようもないかも知れないですが、試してみてください。

VBA

1 Application.ScreenUpdating = False 2 3 '数式を値で上書き 4 Range("A2:G2").Value = Range("A2:G2").Value 5 'Range("A2:G2").Select 6 'Application.CutCopyMode = False 7 'Selection.Copy 8 'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 9 ' :=False, Transpose:=False 10 Rows("7:7").Select 11 Application.CutCopyMode = False 12 Selection.Copy 13 Rows("8:797").Select 14 ActiveSheet.Paste 15 '数式を値で上書き 16 Range("B7", Range("B7").SpecialCells(xlLastCell)).Value = Range("B7", Range("B7").SpecialCells(xlLastCell)).Value 17 Range("B7", Range("B7").SpecialCells(xlLastCell)).Replace What:="delete", Replacement:="", LookAt:=xlPart, _ 18 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 19 ReplaceFormat:=False 20 'Range("B7").Select 21 'Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 22 'Application.CutCopyMode = False 23 'Selection.Copy 24 'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 25 ' :=False, Transpose:=False 26 'Selection.Replace What:="delete", Replacement:="", LookAt:=xlPart, _ 27 ' SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 28 ' ReplaceFormat:=False 29 '選択なしで列を挿入 30 Columns("V:V").Insert Shift:=xlToRight 31 'Columns("V:V").Select 32 'Application.CutCopyMode = False 33 'Selection.Insert Shift:=xlToRight 34 Range("V7").Select 35 ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",""F"",RC[-1])" 36 Range("V7").Select 37 Selection.AutoFill Destination:=Range("V7:V797"), Type:=xlFillDefault 38 Range("V7:V797").Select 39 Rows("7:7").Select 40 Range(Selection, Selection.End(xlDown)).Select 41 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Clear 42 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("N7:N797"), _ 43 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 44 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("V7:V797"), _ 45 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 46 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("J7:J797"), _ 47 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 48 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("L7:L797"), _ 49 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 50 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("F7:F797"), _ 51 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 52 With ActiveWorkbook.Worksheets("【F】").Sort 53 .SetRange Range("A7:HN797") 54 .Header = xlGuess 55 .MatchCase = False 56 .Orientation = xlTopToBottom 57 .SortMethod = xlPinYin 58 .Apply 59 End With 60 61 'Application.ScreenUpdating = False 62 63 ActiveSheet.Range("$A$6:$HK$797").AutoFilter Field:=14, Criteria1:="ヨコ" 64 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Clear 65 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("N7:N797"), _ 66 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 67 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("V7:V797"), _ 68 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 69 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("L7:L797"), _ 70 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 71 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("J7:J797"), _ 72 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 73 ActiveWorkbook.Worksheets("【F】").Sort.SortFields.Add Key:=Range("F7:F797"), _ 74 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 75 With ActiveWorkbook.Worksheets("【F】").Sort 76 .SetRange Range("A144:HN797") 77 .Header = xlGuess 78 .MatchCase = False 79 .Orientation = xlTopToBottom 80 .SortMethod = xlPinYin 81 .Apply 82 End With 83 84 'Application.ScreenUpdating = False 85 86 ActiveSheet.ShowAllData 87 Columns("V:V").Select 88 Selection.Delete Shift:=xlToLeft 89 Range("B3:B6").Select 90 Selection.Replace What:="部受付", Replacement:="済", LookAt:=xlPart, _ 91 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 92 ReplaceFormat:=False 93 Selection.Replace What:="事前", Replacement:="前", LookAt:=xlPart, _ 94 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 95 ReplaceFormat:=False 96 Selection.Replace What:="事後", Replacement:="後", LookAt:=xlPart, _ 97 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 98 ReplaceFormat:=False 99 Selection.Replace What:="いる", Replacement:="有", LookAt:=xlPart, _ 100 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 101 ReplaceFormat:=False 102 Selection.Replace What:="いない", Replacement:="無", LookAt:=xlPart, _ 103 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 104 ReplaceFormat:=False 105 Range("K7").Select 106 107 Application.ScreenUpdating = True

投稿2020/03/18 05:49

編集2020/03/18 07:05
yureighost

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

21215

2020/03/18 06:47

添削ありがとうございます。 不要な部分を削除して行いました。 自分のPCでは問題がなかったので、エラーが出る方のPCで試してみました。 結果は、表題と同じエラーが出ました。 エラー箇所は Selection.Insert Shift:=xlToRight⇐ココ Range("V7").Select ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",""F"",RC[-1])"
21215

2020/03/18 08:27

再度ありがとうございます。 こちらのマクロで行ったところ、1人を除いて他は出来るようになりました。 ありがとうございます。 残りの一人は他のエクセルシートでもエラーを出しているので、また別の原因かと思います。
yureighost

2020/03/18 10:32

動いて良かったです。 エラーの原因はやっぱり処理の重さだと思います。 マクロの記録は便利なんですが、VBAとして動かすには効率が悪すぎるのでこういうことが起こりやすくなります。 記録で作ったソースを改造するみたいな形でいいので少しずつでもVBAが書けるように頑張ってください。
guest

0

殆どのセンテンスがブック・シートを指定していないので、アクティブブックかつアクティブシートを前提とした実装になっている点が気になります。

切り分け

  • ActiveWorkbook の部分を ThisWorkbookに変えたらどうか?
  • アクティブシート前提で記述されている箇所を ThisWorkbook.Sheets("???"). に変更したらどうか?

(???には目的のシート名を設定する)

修正依頼にも記載しましたが、実際にどのコードでエラーが発生しているのかが分かるとそれも手掛かりになります。

投稿2020/03/18 03:45

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

21215

2020/03/18 05:16

ThisWorkbook.Sheets("【F】")に変更してやってみましたが、表題と同じエラーが出ました。 エラーの場所は前と異なり Selection.Insert Shift:=xlToRight⇐ココ Range("V7").Select ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",""F"",RC[-1])" でした。
DreamTheater

2020/03/18 05:35

ボタンクリックしてから終わるまで他の操作(別のEXCELブックを開いたり)はされていないですよね?
21215

2020/03/18 05:49

ボタンクリックから動作終了までは一切何もせずに放置しています。 また、開いてるエクセルブックも1つの状態で行っております。
Y.H.

2020/03/18 08:34

再計算に時間がかかるシート(ブック)だったりしませんか? Application.Calculation = xlCalculationManual '手動計算 入れてみるとか。
guest

0

マクロの最初と最後に

Application.ScreenUpdating = False
Application.ScreenUpdating = True

とコーディングするとどうなりますか?

ネットでは、上記記述で同一のエラーメッセージが
回避できたかたがいます。

投稿2020/03/18 02:28

nanami12

総合スコア1015

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

21215

2020/03/18 04:18

回答ありがとうございます。 Application.ScreenUpdating = True を追加したマクロでまずは試してみたいと思います。
21215

2020/03/18 04:59

結果 3回試したところ 1回目⇒成功 2回目⇒エラー表示なく終了したが反映するデータ数が少ない(797行分ある筈が769行分までしかなかった) 3回目⇒表題と同じエラーが出る 完全な解決にはなりませんでした。
nanami12

2020/03/18 05:02

コードを入力するのは1行だけではなく2行です 最初と最後です。
21215

2020/03/18 05:22

すみません。表記が抜けておりました。 最初と最後に Application.ScreenUpdating = False Application.ScreenUpdating = True を入れた状態で試しました。
nanami12

2020/03/18 05:47

該当のエラーメッセージは負荷が高い処理を行うと 起こりやすいようで 対処方はここがまずい!と的確に指摘することが難しい エラーメッセージです。 まずは、対処法として負荷を減らすことから始め。 関連のオブジェクトは、省略せず、最初から記述し Range("A1") の様に記載するのではなく、ブック.シート.Range("A1")とし、 メモリーフルの状態を無くすことが大切かと思います。 また、落ちる箇所が常に同じ場所であれば、 落ちる直前にブレークをかけ、変数の中身をチェックして下さい。
21215

2020/03/18 06:53

対処法をありがとうございます。 負荷が高いのが原因なんですね… 作業を分割して複数ののマクロを順番に起動するは、負荷量は変化ないでしょうか?
nanami12

2020/03/18 07:14

現状の状態で、マクロを実行時CPU使用率とメモリ使用量をチェックし (タスクマネージャーで) 処理を分割した際に、メモリの使用量とCPU使用率が減っていれば おそらく問題なく動作すると思います。 正常に起動、終了するユーザさんは、メモリを増設をしている方では ないでしょうか。想像で言ってます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問