2017-02-07 5 views
3

私は隠れた列に奇妙な問題があります。手動でではなく、コード内に隠されている場合にのみ発生します。私は列が非表示になりますExcel VBAの隠しリスト列のシフト

lcTableCols = ListObjects("Table1").listcolumns 
lcTableCols("ColC").Range.EntireColumn.Hidden = True 

を記述する場合、私はその列を追加したり、左に列を削除する場合

 
ColA ColB ColC ColD 
1  A  3  1 
1  B  3  2 
1  C  3  3 

: はこれを考えると

lcTableCols("ColB").Delete 

隠しコラムが「シフト」するので、テーブルは次のようになります。

 
ColA ColC 
1  3  
1  3  
1  3  

ColDが非表示になりました。これはリスト列でのみ行います。予想通り、次の作業を行う:

Columns(5).hidden = true 
Columns(3).delete 

私はそれが「.Range.EntireColumn」とは何かを持っていると仮定することができます。より良い方法は何ですか?私は、名前付きの列を非表示にできるように関数を設定したいが、別の方法(lcTableCol( "ColE")。index)を行うことができることはわかっているが、大きなシートを整形しているので多くをリファクタリングする必要がある。大きな問題ではありませんが、なぜこれが起こっているのか不思議です。

答えて

1

EntireColumnC)を非表示にしてから、ワークシートからではなく、表のみから列(colD)を削除します。これはあいまいですが、削除は表の列をシフトするだけですが、表の外に他のデータがある可能性があるため、Excelは「列全体」を保持する必要があります。

あなたはEntireColumnでも行動を削除した場合は期待通りである:ここでは

lcTableCols("ColC").Range.EntireColumn.Hidden = True 
lcTableCols("ColB").Range.EntireColumn.Delete 

あなたが列ADのみを持つことになります。

+0

私は見る!はい。私はこれはあなたの下に、または次の複数のテーブルを持っている場合にも当てはまりますか? – Falthazar

+0

@ダニエルたとえば、。実際には、テーブルから削除された*の同じカラムにあるすべてのデータは保持されなければなりません。したがって、実際には、操作はワークシートから一連の「セル」を削除することと同じです。これらのセルの右側のすべてが左に移動します。 –

+0

そして、Excelは個々のセルを隠すことができないので、列や行全体を隠すことはできません。シフトされたセルは目に見える列になり、表示されます。 –

関連する問題