VBAの学習を始めたばかりですが、業務で必要に迫られどうしても近日中に効率化が必要となってしまいました。
いろいろなサイトにて検索しましたが、わからなかったためこちらで質問させていただきます。
行いたいこと:
画像の「りんご」と「ばなな」の列を削除したいと考えています。
が、間に挟まれている「かぶ」の列の数は可変で、列が増減する可能性があります。
(実際には3~30程、列の個数に幅があります。)
この、削除したい列に挟まれている列が「可変」の場合、どのように定義すればよいのでしょうか。
なお、間に挟まれている「かぶ」いがいの項目名は、一切の変更はありません。
勉強不足の状態で質問させていただくのは、大変心苦しいのですが、どなたか助けていただけると大変助かります。
どうぞ、宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
こんにちは!
横からお邪魔します。
一気に削除する方法にしてみました。
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
No.6
- 回答日時:
補足要望です。
りんごを探し、見つかったら1列削除
ばななを探し、見つかったら1列削除
ここまでは分かります。しかし
>「りんご」「ばなな」以外にも、F列以降に削除対象となる項目が複数あります。
では結局何と何と何を探すのですか?
回答を閉めるのが遅くなってしまったのですが...
「りんご」や「ばなな」以外にも一意の値が入っており、予め決められている値が設定されている列を複数削除したい。
と言うのが、真意でした。
何とか動いてくれるところまでできました。
わかりにくい質問をしてしまい、申し訳ありません。
No.5
- 回答日時:
No.2です。
InStr関数は私も考えましたが部分一致の列も消してしまう危険があったので見送りました。
例:『赤かぶ』は消したいが『かぶ』は残したい。
ArrayListやDictionaryも考えましたけど、削除対象数によっては使用毎に楽に改変って訳にもいかないですしね。
悩みどころです。
お礼が遅くなり、大変申し訳ありません。
なんとか、第一段階はクリアできました!
が、これからも引き続きVBAという未知のものと格闘していかなくてはならないので、気合いを入れていきます!
No.3
- 回答日時:
こんにちは
間に挟まれている列は関係なく
削除したい列をみつけて削除するという処理になりますね。
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
No.2
- 回答日時:
どう捉えて良いのかな?
・「りんご」「ばなな」以外は削除しないなら、
>「かぶ」の列の数は可変で、列が増減する可能性があります。
これは関係ない話です。
・「りんご」「ばなな」に挟まれた範囲を削除したいなら、
>「かぶ」の列の数は可変で、列が増減する可能性があります。
ここは必要な話かも知れません。(でも、実際関係ないかもですが)
No.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列選択でなく、”りんご”で検索してもよいです。
検索削除したい列の分だけ、追加してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Excel(エクセル) Excel ある複数列に数値を入力した際に、別の列に本日の日付を入力したいです 7 2023/03/01 23:31
- Excel(エクセル) VBA 文字列変換と指定した列にある日時データから時間を削除する方法について 2 2022/04/14 15:23
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Excel(エクセル) ある言葉が含まれている一つの文(フレーズ)のみに色付けをしたいです 2 2022/07/29 23:12
- Excel(エクセル) VBA 指定した列にある日時データから時間を削除する方法について 4 2022/04/14 11:17
- Visual Basic(VBA) A列に重複した番号の行を条件を指定して削除 4 2023/04/11 05:47
- Excel(エクセル) Countifよりも早く重複数をカウントする方法ありますか? 18 2022/07/04 13:39
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
Cellsのかっこの中はどっちが行...
-
マクロ 最終列をコピーして最終...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
文字列の結合を空白行まで実行
-
Changeイベントでの複数セルの...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
【Excel VBA】カンマと改行コー...
-
VBマクロ 色の付いたセルを...
-
C# dataGridViewの値だけクリア
-
期限を超えた日付に警告のメッ...
-
複数処理 Worksheet_Change(ByV...
-
【VBA】2つのシートの値を比較...
-
VBA 値と一致した行の一部の列...
-
IIF関数の使い方
-
VBScriptでfindを使うには??
-
エクセルVBAにて =A1=B1とすれ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAのコードを教えてください
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
エクセルvbaについて
-
vba 2つの条件が一致したら...
-
Excelで、あるセルの値に応じて...
-
VBA UserFormからの転記で
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
VBマクロ 色の付いたセルを...
-
VBAで指定範囲内の空白セルを左...
おすすめ情報
補足させて下さい。
・1行目のタイトルは変わることはありません。
・「りんご」「ばなな」以外にも、F列以降に削除対象となる項目が複数あります。