こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel vba テーブルに列を挿入できない

Excel vba で、次のコードでテーブルに列を挿入しています。
これはExcel2013で作った一連のvbaコードの一部です。

Range("テーブル名" & "[[#Headers],[地区]]").Select
Selection.EntireColumn.Insert

「地区」フィールドの前に列を挿入するものです。
Excel2010、2013では問題なくできますが、Excel2016のPCでは
  Selection.EntireColumn.Insertでエラーになります。エラーメッセージは、
「この操作を実行するとワークシート上のテーブル内でセルが移動されてしまうため、この操作は実行されません。」というもので、列を挿入するのだから、当然セルは移動されますが、それがダメだと。
エラーになった同じテーブルで手動での列挿入はできます。また、そのマクロ記録を取れば、上のコードと同じ記録ができます。
OSはWindows10です。
このvbaはExcel2016では通らないのでしょうか。エラーを解決する方法を教えてください。

投稿日時 - 2017-08-09 19:35:20

QNo.9361185

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは。

> 「地区」フィールドの前に列を挿入するものです。
という説明の意図を掴み兼ねていますが、
 「地区」フィールドの直前に新規のフィールドを挿入する
ということでしたら、
' ' //
  With ActiveSheet.ListObjects("テーブル名").ListColumns
    .Add .Item("地区").Index
    ' ↓どちらか↑
    .Add(.Item("地区").Index).Name = "NewField"
  End With
' ' //
みたいにしてみては如何でしょうか。

テーブルの扱いとしては、個人的に、
テーブル全体をひとつのシートのように扱うのが普通かな、
と思ったりして、つまり、
テーブルの外側のセル=列を挿入する意図というのが、
私には想像し難いというか、
フィールドではなくて列を挿入できるという機能があること
が意外というか不思議な印象だったりもします。
(あくまでも私見です。)

  Range("テーブル名" & "[[#Headers],[地区]]").Select
を実行した後、
 右クリック→コンテクストメニュー表示
 ↓
 [挿入]
 ↓
 [テーブルの列(左)]
という手順を記録マクロにすると、
  Selection.ListObject.ListColumns.Add Position:=4
のようなコードが得られました。後は、
引数に指定する数値インデックスを取得するようにすればいいのかなと。

実はxl2016では確認していません。
ご提示のエラーメッセージと同種のものへ対処した経験だけで
お応えしていますので、こちらの見当違いでしたら
スルーしてやってくださいませ。

投稿日時 - 2017-08-11 00:22:21

お礼

回答ありがとうございます。テーブル内でフィールドを挿入するのではなくて、シートの列を挿入するコードです。このテーブルにいろいろな操作をしていますが、それらの操作前にはこの列挿入のコードは通るのです。
エラーメッセージは、最大列番号付近の列ににすでに何らかのデータがあるので列挿入ができないのではと思い、これらをクリアするコードを書いた後に、質問のコードを実行するようにしても通らなかったのです。回答いただいたテーブル内でフィールドを挿入するコードは回避策としてすでに実行しています。
なぜエラーメッセージが出るのかわからなかったので質問してみました。
ご回答ありがとうございました。

投稿日時 - 2017-08-12 09:53:40

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問