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

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

ただいまの
回答率

90.36%

  • VBA

    2038questions

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

  • Excel

    1741questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • オートメーション

    1questions

    オートメーションとは、反復の多いタスクまたは正確性や過程が多いタスクを、人間がかかわることなく、コンピューターに任せて自動化させる事を指します。

数列の複製をするVBAマクロで 実行時エラー'-2147417848(80010108)':が発生 直前に入力規則のあるセルを直前に触った場合に発生します

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,855

101

score 1

前提・実現したいこと

エクセルVBAにて、数列の複製をするマクロを作成しましたが、下記の問題が解決できず困っています。

下記のマクロを動かすと、エラーが発生する場合があります。大容量のシートの場合に下記のエラーが発生します。
入力規則のあるセルを直前に触り、値を入力した後にマクロを起動した場合に発生するようです。

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

.Range(.Columns(第一列左列 + 一台列数 * 繰返し数 + 1), .Columns(第一列左列 + 一台列数 * 繰返し数 + 1)).Insert Shift:=xlToRight
のところで、

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

###該当のソースコード

ここに言語を入力
With ActiveWorkbook.Sheets(MySheet)
.Unprotect

第一列左列 = .Cells.Find(What:="第一列左列", After:=.Range(検索開始セル), LookIn:=xlComments, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False).Column       '選択された列番号を取得
最終列右列 = .Cells.Find(What:="最終列右列", After:=.Range(検索開始セル), LookIn:=xlComments, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False).Column       '選択された列番号を取得
一台列数 = 最終列右列 - 第一列左列 - 1

繰返し数 = 1

Line1:

.Range(.Columns(第一列左列 + 1), .Columns(最終列右列 - 1)).Copy

.Range(.Columns(第一列左列 + 一台列数 * 繰返し数 + 1), .Columns(第一列左列 + 一台列数 * 繰返し数 + 1)).Insert Shift:=xlToRight

繰返し数 = 繰返し数 + 1

If 繰返し数 < 列複製数 Then GoTo Line1

Application.CutCopyMode = False

On Error Resume Next
Set シート保護をかけません = .Cells.Find(What:="シート保護をかけません", After:=.Range(検索開始セル), LookIn:=xlComments, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False)      '選択された行番号を取得
On Error GoTo 0
If シート保護をかけません Is Nothing Then
.Protect
Else
.Unprotect
End If

End With

```

試したこと

入力規則を触った後でも、軽いシートの場合には、発生しません。

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

Excelバージョンは2010です。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • coco_bauer

    2017/07/12 16:19

    「入力規則のあるセルにリストからデータを選択した後に」というのは、入力規制のあるセルに値を代入しようとしたという事ですか? エラーが発生する状況が、よく理解できないのですが(主として日本語が)

    キャンセル

  • 101

    2017/07/12 16:46

    早速ありがとうございます。エラーが発生するのは、マクロ起動中です。「入力規則のあるセルにデータを投入した後にマクロを起動するとエラーが発生します」その他の場合には問題が起こらないようです。解りにくくてすみませんが、ご教示いただければ幸いです。

    キャンセル

回答 1

checkベストアンサー

+1

バシッとした回答ではありませんが…

オートメーションエラーは経験上、過負荷っぽい時(?)、大量の情報を処理しようとする時(?)、無いオブジェクトにアクセスしようとしたり(?)といった、普段あまり起きないであろう「もろもろ」の状況でよく起きている気がします。

まずは、エラーが起きるであろうブックを保存し、どのシートのどの部分でエラーが起きるか、再現性を検証するのに必要なデータ(材料)をそろえてください。

続いて、VBAエディタでコードの左端をつつくと、ブレークポイント(赤い丸)を付けられたと思います。VBAを走らせたときに、このブレークポイントで一時停止できますので、以下の行より上の部分で怪しいところを何か所かマークを付けて走らせてください。特に怪しい部分については、一行毎に動かしてください。

.Range(.Columns(第一列左列 + 一台列数 * 繰返し数 + 1), .Columns(第一列左列 + 一台列数 * 繰返し数 + 1)).Insert Shift:=xlToRight

この時に、この行で何が起きてオートメーションエラーが出てきたか、実は少し前の行で異常な動作をしていた、などを元にもう一度teratailで相談してみてください。

むしろ、ここまでできればきっと自力で解決できると思います。
どうしてもオートメーションエラーを解決できないときには、全く別の関数や方法を使って代替手段を用意するしかないと思います。

Good luck!

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/12 17:46

    slash様
    早速のご回答ありがとうございます。
    おっしゃる通り、エラーが起こるシートは決まっているようなんです。
    前段階で異常が起こっているとの発想はありませんでしたので、
    もう一度、一行づつ確認してみます。新たな発見がありましたら、また、質問させてください。
    今後もよろしくお願いいたします。

    キャンセル

  • 2017/07/13 09:23 編集

    slash様

    おはようございます。
    ご指導いただいた様に、数種類のシートで確認し、エラーが起きる前に異常がないかも確認しました。
    あるシートで、異常なく終了した場合には、それ以降「入力規則のあるセル」を触らないかぎり問題が起こりません。
    そこで、問題の行の前に、下記のようなダミーのコピー貼り付けを挿入してみましたところ、問題解決いたしました。根本原因にたどりつけていない感じはありますが、処理速度にも影響がないようですので、これにて対処しようと思います。この度は、貴重なご指導大変ありがとうございました。助かりました。

    On Error Resume Next 'エラー処理
    .Range(.Columns(Columns.Count), .Columns(Columns.Count)).Copy
    .Range(.Columns(Columns.Count), .Columns(Columns.Count)).Insert Shift:=xlToRight
    On Error GoTo 0 'エラー処理解除

    キャンセル

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

  • ただいまの回答率 90.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • VBA

    2038questions

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

  • Excel

    1741questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • オートメーション

    1questions

    オートメーションとは、反復の多いタスクまたは正確性や過程が多いタスクを、人間がかかわることなく、コンピューターに任せて自動化させる事を指します。

  • トップ
  • VBAに関する質問
  • 数列の複製をするVBAマクロで 実行時エラー'-2147417848(80010108)':が発生 直前に入力規則のあるセルを直前に触った場合に発生します