プロが教えるわが家の防犯対策術!

VBAの学習を始めたばかりですが、業務で必要に迫られどうしても近日中に効率化が必要となってしまいました。
いろいろなサイトにて検索しましたが、わからなかったためこちらで質問させていただきます。

行いたいこと:
画像の「りんご」と「ばなな」の列を削除したいと考えています。
が、間に挟まれている「かぶ」の列の数は可変で、列が増減する可能性があります。
(実際には3~30程、列の個数に幅があります。)

この、削除したい列に挟まれている列が「可変」の場合、どのように定義すればよいのでしょうか。
なお、間に挟まれている「かぶ」いがいの項目名は、一切の変更はありません。

勉強不足の状態で質問させていただくのは、大変心苦しいのですが、どなたか助けていただけると大変助かります。

どうぞ、宜しくお願い致します。

「VBAで「列」を削除する方法」の質問画像

質問者からの補足コメント

  • つらい・・・

    補足させて下さい。
    ・1行目のタイトルは変わることはありません。
    ・「りんご」「ばなな」以外にも、F列以降に削除対象となる項目が複数あります。

      補足日時:2018/04/05 00:57

A 回答 (6件)

補足要望です。


りんごを探し、見つかったら1列削除
ばななを探し、見つかったら1列削除
ここまでは分かります。しかし

>「りんご」「ばなな」以外にも、F列以降に削除対象となる項目が複数あります。

では結局何と何と何を探すのですか?
    • good
    • 1
この回答へのお礼

解決しました

回答を閉めるのが遅くなってしまったのですが...
「りんご」や「ばなな」以外にも一意の値が入っており、予め決められている値が設定されている列を複数削除したい。
と言うのが、真意でした。

何とか動いてくれるところまでできました。
わかりにくい質問をしてしまい、申し訳ありません。

お礼日時:2018/04/07 23:24

No.2です。



InStr関数は私も考えましたが部分一致の列も消してしまう危険があったので見送りました。
例:『赤かぶ』は消したいが『かぶ』は残したい。

ArrayListやDictionaryも考えましたけど、削除対象数によっては使用毎に楽に改変って訳にもいかないですしね。
悩みどころです。
    • good
    • 1
この回答へのお礼

ありがとう

お礼が遅くなり、大変申し訳ありません。
なんとか、第一段階はクリアできました!
が、これからも引き続きVBAという未知のものと格闘していかなくてはならないので、気合いを入れていきます!

お礼日時:2018/04/07 23:19

こんにちは!



横からお邪魔します。
一気に削除する方法にしてみました。

Sub Sample1()
Dim j As Long, myStr As String, myRng As Range
myStr = "りんご,ばなな"
For j = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
If InStr(myStr, Cells(1, j)) > 0 Then
If myRng Is Nothing Then
Set myRng = Cells(1, j)
Else
Set myRng = Union(myRng, Cells(1, j))
End If
End If
Next j
If Not myRng Is Nothing Then
myRng.EntireColumn.Delete
End If
End Sub

※ 削除したい文字列が増える場合は
>myStr = "りんご,ばなな"
の部分で追加してみてください。m(_ _)m
    • good
    • 2
この回答へのお礼

助かりました

ぜひ、参考にさせていただきます!
大変助かりました!!

お礼日時:2018/04/07 23:15

こんにちは



間に挟まれている列は関係なく
削除したい列をみつけて削除するという処理になりますね。

No.1さんのコードを少し変更させていただきました。
keywordsに、削除したい列の1行目の文字を追加していって下さい。

Sub Macro1()
  Dim keywords As Variant
  Dim key As Variant
  On Error GoTo continue ' 削除したい文字の列が存在しなかった場合

  keywords = Array("りんご", "ばなな") ' 削除したい列の1行目の文字
  For Each key In keywords
    Rows("1").Find(What:=key, lookat:=xlWhole).EntireColumn.Select
    Selection.Delete Shift:=xlToLeft
continue:
  Next
  On Error GoTo 0
End Sub
    • good
    • 1
この回答へのお礼

助かりました

>間に挟まれている列は関係なく
考え方自体が間違っていたことに気づくことができました!
本当にありがとうございました!

お礼日時:2018/04/07 23:14

どう捉えて良いのかな?



・「りんご」「ばなな」以外は削除しないなら、
>「かぶ」の列の数は可変で、列が増減する可能性があります。

これは関係ない話です。

・「りんご」「ばなな」に挟まれた範囲を削除したいなら、
>「かぶ」の列の数は可変で、列が増減する可能性があります。

ここは必要な話かも知れません。(でも、実際関係ないかもですが)
    • good
    • 1

私も初心者なのですが、勉強がてらに書いてみました。



Sub Macro1()
'
' Macro1 Macro
'
'
Rows("1").Find(What:="ばなな", lookat:=xlWhole).EntireColumn.Select '1行目から"ばなな"を検索し、その列を選択
Selection.Delete Shift:=xlToLeft '選択している列を削除

Columns("A").Select 'A列を選択
Selection.Delete Shift:=xlToLeft '選択している列を削除

End Sub


A列選択でなく、”りんご”で検索してもよいです。

検索削除したい列の分だけ、追加してください。
    • good
    • 1
この回答へのお礼

助かりました

わかりやすく教えていただき、大変ありがとうございます!
とても参考になりました!!

お礼日時:2018/04/07 23:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!