エクセルのマクロについて質問いたします。
下記のステップ1からステップ2を一発で行うマクロ文は、
どのようになりますか? 教えてください。
<ステップ1>
あるシートのB列に『AAA』という文字を含んでいる行があったら
その行は丸ごと削除する。
また、『AAA』という文字を含んでいなかったら、
エラーなどが出ないで、次のステップ2の処理に移る。
<ステップ2>
ステップ1と同じシートのC列に、『B』という文字を含んでいる行があったらその行は丸ごと削除する。
※この”『B』という文字を含んでいる”という意味は、
『B-』や”『B5』と入力されている場合も含めるということです。
また、『B』という文字を含んでいなかったらエラーなどが出ないこと。
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
No.2
- 回答日時:
こんにちは。
基本的には、ご質問のような製作依頼の内容は、きちんとした理由がない限りは、あまり思ったとおりの回答は付かないということを覚えておいたほうがよいと思います。私は、通常、製作依頼のような内容でも、好めば回答は付けていますが、厳しいようですが、今回のものは、基本的には回答は書くつもりがありません。ここでは、質問者さんが努力しているものに対して、手助けをするというのが基本的なスタイルです。
>残念ながら
>オートフィルターを設定できない表なので質問どうりでお願いします。
オートフィルタを設定できないような表が存在するとは思えません。
サンプルを出して、こういう表で、そのようにできないかを説明しないと納得できないです。
#1の方が、示されたサンプルは、入門レベルから上位レベルまで使われるテクニックで、実際には、そのすべてを記録マクロでは処理できるとは私は思いませんが、ご質問者さんが断言できるような内容かは、なぜ出来ないかご説明できないと、それは判断つきかねます。
Excelの場合は、基本的に手作業で出来る方法を、マクロ化させるわけです。ですから、VB言語のコードとは違った効率化を図るというのが、Excelマクロの基本的なコンセプトです。
No.3
- 回答日時:
> オートフィルターを設定できない表なので質問どうりでお願いします。
「オートフィルターを設定できない」と思い込んでいるのでは?
例えば、検索したいデータが10行目以降にあり、1~9行目には10行目以降とは異なるフォーマットでデザインされている。
質問者さんは、「オートフィルタは1行目に設定するもの」と思い込んでいるので、上記のような条件をつけてきているのでは?
10行目からでもオートフィルタは設定できます。
また、複数の表がヨコに並んでいるからかなとも思いましたが、
それなら、VBAで行削除を行えば消したくない方の表も消えるので違うのだろうと思っています。
でも、単にそのことに気付いていないだけなのかも...
よく、「こんなこと出来ないかな」と相談され、よくよく聞いてみると、
そんな面倒ことをしなくても、根本を変更することで済んでしまった。
といった経験を何度もしています。
変な例えですが。
「何探してるの」
「この辺、コンビニが見あたらなくて。。。」
「なにを買いたいの」
「コーラ」
「そこにコーラの自販機あるけど」
「あ・・・」
サンプルを提示すれば、より有効な提案があるかもしれません。
No.4
- 回答日時:
行削除の条件について、
・B列に『AAA』という文字を含んでいる行は削除
・C列に『B』という文字を含んでいる行は削除
であるならば、整理すると
・B 列に "AAA" または C 列に "B" という文字が含まれれば行削除
と解釈して良いのでしょうか?
For i=最終行番号 To 開始行番号 Step -1
If InStr(Cells(i, "B").Value, "AAA") > 0 Or InStr(Cells(i, "C").Value, "B") > 0 Then
Rows(i).Delete Shift:=xlShiftUp
End If
Next i
最終行番号の取得方法は調べればすぐわかります。End プロパティー。
行削除のポイントは、最終行から開始行に向かって、つまり下から上へ
向かって処理することです。その他の注意事項としては、VBA は
1. 大文字・小文字
2. 全角・半角
を区別することです。
この回答への補足
ありがとうございます!
すんなりと解決できました。
また、やりたいこともすぐにできるようになりました。
簡潔かつ美しい回答、丁寧な説明、本当に感謝いたします。
ただ回答を締め切るのは別の事情がありもう少しお待ちください。
また改めて御礼をさせていただきます。
取り急ぎ、御礼申し上げます。
No.5
- 回答日時:
ひょっとして私が「Bを含む」を間違って「B」の条件でサンプルを書いたので混乱されたのでしょうか。
ミスを訂正し、且つ行の削除済みデータも作成する(元データは消さずに新しいシートにする)のであれば、以下のコードでどうでしょう。
Sub Senbetsu()
Dim NSht As Worksheet
With Selection
.AutoFilter Field:=2, Criteria1:="<>", Operator:=xlAnd, Criteria2:="<>AAA"
.AutoFilter Field:=3, Criteria1:="<>*B*", Operator:=xlAnd
.Copy
End With
Set NSht = ActiveWorkbook.Sheets.Add(Before:=Worksheets(1))
NSht.Paste Destination:=NSht.Range("A1")
End Sub
No.6
- 回答日時:
ステップ1とステップ2はステップ1優先でよいのでしょう。
ッステップ1が該当したら、ステップ2は考えなくて良いのでしょう。ですからステップ2の後へ飛べばよい。であればステップ1,2、は直線的にならべて書いて可では。
--
何も疑問は無いと思うが。
行削除は下の方の行から上にやるのが良いと思う。
For i=d to 1 Step -1
--
「含んでいる」という検査のコードがわからないのですか。
InStr関数などでできます。
本質問は、丸投げ質問なんで、あえてコードは書きません。
No.7
- 回答日時:
こんにちは。
#2の回答者です。あえて、今回のことに、割り込みさせていただきます。
ご質問者さんは、まだ、いろんな面で、ここの掲示板に不慣れのようです。他のカテゴリで書いた内容は、こちらのカテゴリで書いてくださらないと分かりません。不要な手間やトラブルを起こす元です。
あえてすでに解決しているようですが、ここのご質問だけなら、オートフィルターで出来るのではないかと思います。ただし、もし複数の行単位で存在するブロックだとすると、これはなんともいえません。また、コードの方法論を決められてしまうと、本来は、質問者さんからコードを提示してもらわないといけません。
せっかく、Raistlin様が別の場所から続けて回答されておられるので、あえて私も、参考程度に考えさせていただきました。私は、自信のほどはありませんが。
>※この”『B』という文字を含んでいる”という意味は、
>『B-』や”『B5』と入力されている場合も含めるということです。
ということですと、B* となるかと思います。
これは、全角・半角の区別はしませんが、大文字・小文字の区別はします。
また、ActiveSheet.Range("A1:C" & i)
のA1 は、左上端の始点のことですから、A2 だったらら、A1 をA2に書き換えてください。
'標準モジュールが適しています。
Sub Test1()
Dim i As Long
Dim FiltRng As Range
Dim uRng As Range
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = False
On Error Resume Next
i = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
Set FiltRng = ActiveSheet.Range("A1:C" & i)
With FiltRng
.AutoFilter Field:=2, Criteria1:="AAA"
With .Offset(1).Resize(.Rows.Count - 1).EntireRow
Set uRng = .SpecialCells(xlCellTypeVisible)
End With
End With
With FiltRng
ActiveSheet.ShowAllData
.AutoFilter Field:=3, Criteria1:="B*"
With .Offset(1).Resize(.Rows.Count - 1).EntireRow
Set uRng = Union(uRng, .SpecialCells(xlCellTypeVisible))
End With
End With
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = True
On Error GoTo 0
If uRng Is Nothing Then
MsgBox "該当する行がありません。", vbInformation
Else
uRng.Select
If MsgBox("選択した範囲を削除します。よろしいですか?", vbQuestion + vbOKCancel) = _
vbOK Then
uRng.Delete
End If
End If
FiltRng.Cells(1).Select
Set uRng = Nothing
Set FiltRng = Nothing
End Sub
No.8
- 回答日時:
#7の文章の訂正です。
#これは、全角・半角の区別はしませんが、大文字・小文字の区別はします。
・・全角・半角の区別はしますが、大文字・小文字の区別はしません。
でした。失礼しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 16:07
- Visual Basic(VBA) 【至急】 当方初心者です。 マクロについて知恵をお貸しください。 ★したい動作 ①リストE列2行目か 4 2022/09/29 18:56
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Visual Basic(VBA) Activesheet.Pasteで困っています 1 2023/01/22 07:41
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
明治フォローアップミルク、ス...
-
バリオスIIにバリオスIのタンデ...
-
ドラッグスターのステップを後...
-
V-TWIN MAGNAに、ミッドコンは?
-
SQLの中上級者へのレベルアップ...
-
ステップの位置などを変更する...
-
ステップに乗せるのはカカト?...
-
アクセス ステップインのやり方
-
アメリカンバイクのステップに...
-
2進法を3進法にする
-
一番静かで効果的な「ステッパ...
-
バイクのステップが擦れる件
-
NSR50のステップについて...
-
隼のバックステップについて
-
パワプロ2016について質問です...
-
寝バックした時奥まで入りませ...
-
ダンスの立ち位置がいつも端
-
古典 動詞の訳し方
-
大阪の扇町公園で1人でダンスし...
-
TMN宇都宮隆さんの声がEXPO以降...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
明治フォローアップミルク、ス...
-
2進法を3進法にする
-
ステップに乗せるのはカカト?...
-
僕の性癖(フェチ)、私は少数派...
-
アクセス ステップインのやり方
-
スクーターのステップの塗装を...
-
フットボード、ステップボード...
-
階段の滑り止めの交換
-
ステップの位置などを変更する...
-
足を引きずってバイクを運転す...
-
SQLの中上級者へのレベルアップ...
-
エスカレーターの非常停止ボタン
-
ドラッグスターのステップを後...
-
GB250 クラブマンのステ...
-
VBでステップ数
-
スクーターのステップ自作
-
シフトペタルと足の位置関係
-
W650のバックステップ
-
判定問題がPに属するなら探索問...
-
土踏まず?つま先?それとも・...
おすすめ情報