実現したいこと
エクセルのシートが何枚かあり、
それぞれのシートから残したい対象の列名の列数を取得し、
(前提として全てのシートに対象の列名が必ず存在しています)
その対象列以外削除したい ということを実現したいです。
以下のコードで実行してみたところ、
エラーは出ないのですが対象の列以外がちゃんと削除されているシートと
削除されていないシートがあるため
原因をご教示いただけますでしょうか。
該当のソースコード
VBA
1Sub test() 2 3 4Dim i 5Dim apple 6Dim banana 7Dim r As Long 8Dim j As Long 9Dim s As Variant 10Dim f As Boolean 11Dim LastClm As Long 12 13'「Sheet1」の後ろのシートに処理をする 14For i = Worksheets("Sheet1").Next.Index To Worksheets.Count 15 Worksheets(i).Select 16 17 18 '対象の列を変数に保持する 19 '列名がりんごの列数取得 20 apple= Worksheets(i).Rows(1).Find(What:="りんご", LookAt:=xlPart).Column 21 22 '列名がばななの列取得 23 banana = Worksheets(i).Rows(1).Find(What:="ばなな", LookAt:=xlPart).Column 24 25 '削除したくない列の列番号 26 s = Array(apple, banana) 27 28 Application.ScreenUpdating = False 29 30 31 '最終列を取得 32 LastClm = Worksheets(i).Range("A1").End(xlToRight).Column 33 34 '全列をループ 35 For r = LastClm To 1 Step -1 36 37 '配列ループ 38 For j = 0 To UBound(s) 39 40 '削除したくない列かどうかチェック 41 If r = s(j) Then 42 f = True 43 End If 44 45 46 Next j 47 48 '削除したい列だったら削除 49 If f = False Then 50 Worksheets(i).Columns(r).Delete 51 Else 52 'フラグをFalseに戻す 53 f = False 54 End If 55 56 57 Next r 58 59 Application.ScreenUpdating = True 60 61 62Next i 63End Sub
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
他の列が消えていないシートの共通点として、
対象の2列は前2列にくるのですが、そのうしろの列が空白の場合それ以降の列が消えていないという現象が起きています。
列名がない場合、列としてみなしてくれないのでしょうか。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/08 07:20