• ベストアンサー

VBAの関して

エクセルの1行目に特定の文字列を含んでいる場合、その列を削除したいのですが、列の削除がうまくいきません。 10列目まで処理をしたい場合、、単純にforループでiを1から10までまわし、特定の文字を含んでいなければ Columns(i).Select Selection.Delete Shift:=xlToLeft では駄目なのでしょうか? どなたか助言お願います。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

For文で 1から10と検査してやると失敗します 削除部分が 1セルだけなら成功しますが 複数あった場合2回目からを失敗する場合があります たとえば 5,8,6,7,2,4,4,3,1,2 とデータがあって 4を削除したいとします データ4は6番目と7番目ですので iが6になったとき Columns(i).Select Selection.Delete Shift:=xlToLeft で 6列目が削除されて 5,8,6,7,2,4,3,1,2,"" といった具合になります ForループのNextで iが加算されますの 次に Columns(i).Select の命令にきたときには 7番目の列ですから データは3ということになります コレはもともとの 8列目ですよね したがって 1から10とするのではなく 10から1といった具合にループを組みます for i=10 to 1 step -1 if Cells(1,i) = 4 Then  Columns(i).Select  Selection.Delete Shift:=xlToLEft end if next といった具合にします ・・・ # 行を削除する場合なども 下から上へと削除していくと上手くいきます

rui58
質問者

お礼

ご回答ありがとうございます! アドバイスの通りにプログラムを作成したところ、無事成功しました。

関連するQ&A

専門家に質問してみよう