• ベストアンサー

エクセルVBAで列名が#N/Aとなった列を削除するプログラムはどのように組めばよいのでしょうか?

エクセルVBAで列名が#N/Aとなった列を削除するプログラムはどのように組めばよいのでしょうか? 下記のような表です。    A      B      C      D・・・・・ 1 イチゴ   #N/A    リンゴ   #N/A 2  100     1      75      1 3  250     2      50      4 4  150     2      25      5 ・        ↓    A      B  ・・・・・ 1 イチゴ   リンゴ  2  100     75 3  250     50 4  150     25 ・ よろしくお願いいたします。

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

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.1

こんばんは。 一例です。 Sub test()   Dim i As Long, myLastCol As Long      myLastCol = Cells(1, Columns.Count).End(xlToLeft).Column   Application.ScreenUpdating = False   For i = myLastCol To 1 Step -1     If IsError(Cells(1, i).Value) Then       If Cells(1, i).Value = CVErr(xlErrNA) Then         Columns(i).Delete       End If     End If   Next i   Application.ScreenUpdating = True End Sub

tiger1985
質問者

お礼

早々の回答ありがとうございました。うまくいきました。助かりました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

>列名が#N/Aとなった列 珍しいことだと思うので、どういうことをして、列名が#N/Aとなったのか説明すること。 多分関数式を入れているのか。 式を入れてエラーが起こっているのか、文字列で入れているのか。 普通文字列を入れるわけで、見出し行でエラーが起こっているという質問例は無かったと思うぐらい珍しい。 第1行目の各列で、それ(の値)を捉えることが出来れば、マクロの記録で列削除のコードを勉強すればあとは簡単では。 ーー 参考 Sub test01() For j = 1 To 5 MsgBox IsError(Cells(1, j)) If IsError(Cells(1, j)) Then MsgBox Cells(1, j).Text End If Next j End Sub のCells(1, j).Textで#N/Aが捉えられると思う。

tiger1985
質問者

お礼

回答ありがとうございました。

tiger1985
質問者

補足

#N/Aになったのは、かなり特殊な表を作ったために起こっています。 表示したい表の大きさとその表があって、それとは別に列名と行名とその値の表を作っています。そして、別に作った表から読み込んで表示したい表を作ります。そのとき、必ずしも別の表にすべての列がないために、#N/Aが出てしまいます。この文章ではかなり分かりにくいと思いますが、理由は以上です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 列や行自体を削除するときは、まとめて選択して削除します。 ただ、以下の場合は、数式のError が発生していることが条件です。 文字の場合は選択しません。 '------------------------------------------- Sub DelectErrorColumns()   With Range("A1").CurrentRegion.Rows(1)    On Error Resume Next    .SpecialCells(xlCellTypeFormulas, xlErrors).EntireColumn.Delete    On Error GoTo 0   End With End Sub

tiger1985
質問者

お礼

回答ありがとうございました。 助かりました。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

こんなのは如何? Sub test() Dim i For i = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1 If Cells(1, i).Text = "#N/A" Then Columns(i).Delete Next i End Sub 以上参考まで

tiger1985
質問者

お礼

回答ありがとうございました。 うまくいきました。

関連するQ&A