• 締切済み

エクセルVBA 列の削除 

VBA初心者です。過去の質問やネットで捜してみましたがわかりません。 A社 B社 C社 D大学 F大学 G社・・・・ 2人 1人 0人  4人  2人 1人・・・・ 5人 2人 1人  2人  1人 1人・・・・ ・・・・ のように、1行目から項目名が入っている表がある時、項目名に「~大学」とはいっている列を列ごと削除するにはどうしたらいいでしょうか。 質問の意味がわかりにくくてすいません。おわかりになる方教えてください。よろしくお願いします。

みんなの回答

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

(1)Forでやるな削除タイプの問題は最右列から削除を左に進める (2)下記はその点危ないですが列番号をを具体的に使ってませんので結果は間違いませんが、無駄あり。 Sub test03() Dim cl As Range For Each cl In Range("a1:Z1") p = InStr(cl, "大学") If p > 0 Then MsgBox cl.Column cl.EntireColumn.Delete End If Next End Sub ーー (1)で言った Sub test04() r = Range("AV1").End(xlToLeft).Column MsgBox r For i = r To 1 Step -1 p = InStr(Cells(1, i), "大学") If p > 0 Then MsgBox i Cells(1, i).EntireColumn.Delete End If Next i End Sub が良いかな。

回答No.2

'ソースコード組んでないが、エレガントかもしれない方法 'いちいち番号のズレを気にしながらコーディングするくらいなら '消さずに,該当列の番号を配列やらコレクションに溜めておき, '最後に配列やコレクションの要素をループまわして消すほうが混乱は少ないかもしれない。 'ソースコードの掲示は他回答者に譲る

回答No.1

Option Explicit 'もっとエレガントな方法があるはず Sub hoge() Dim x As Integer x = 1 'とりあえず50で許して。Forでやろうとして挫折しました。 Do While x < 50 '大学院みたいのを含む場合は "*大学*"とかしてください If Cells(1, x) Like "*大学" Then Columns(x).Delete Else x = x + 1 End If Loop End Sub

関連するQ&A