『置換マクロに追加記述してください。』(KN)
自動記録で取得したマクロで
B列の2行目からテキストコピペして置換した時に
ある行に"脚注"という文字が含まれていたら
その行ごと下は空白行にしてください
Sub Macro4()
'
' Macro4 Macro
'
'
Columns("B:B").Select
Selection.Replace What:="、*", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
回答者への情報提供です。
https://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=196705&rev=0
(情報屋) 2025/09/01(月) 10:05:27
命令するなら有料で請け負ってくれる人に頼んでください。
金銭が発生するので、責任持ってやってくれるはずです。
私なら、以下のように質問しますよ。
【質問のしかた例】
マクロ(VBA?)はマクロ記録しかできません。
B列の「、*」を""に変換するのはマクロ記録でできたのですが、
B列から「脚注」という文字のあるをセルを見つけて、
(「脚注」という文字の13行目にあったとしたら)
13行以下の行をすべて空白にしたいのですが、
どのような方法があるのでしょうか。
教えてください。よろしくお願いします。
(匿名) 2025/09/01(月) 10:31:21
Dim rng As Range
Set rng = Range("B:B").Find(what:="脚注")
Rows(rng.Row & ":" & Rows.Count).ClearContents
End Sub
「VBA 指定の文字を見つける」
でググると、Findメソッドというものが出てきます。
後でもよいので、確認するようにしてください。
また
「VBA セルの値を消す」
でググると、ClearContentsメソッドというものが出てきます。
後でもよいので、確認するようにしてください。
それと、私があげた「質問のしかた例」のように質問できるよう
訓練するのも、VBAができるようになる一歩になると思いますよ。
ちなみに云十年前、私も丸投げで注意されて、
その後、一つずつわからないとを質問して、
実行して、理解してを繰り返しているうちに、
できるようになりました。
今でも、最初に私に叱ってくれた方に感謝しています。
(匿名) 2025/09/01(月) 10:49:11
1行目にマクロボタンとして登録しています
更新のたびに何回も使うマクロなんでよろしくお願いします
(KN) 2025/09/01(月) 11:08:51
'(1)_____
Dim rng As Range
Columns("B:B").Select
Selection.Replace What:="、*", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
(2)______
Set rng = Range("B:B").Find(what:="脚注")
Rows(rng.Row & ":" & Rows.Count).ClearContents
End Sub
(KN) 2025/09/01(月) 11:37:48
例えば紙を切る仕事をA君に頼んだとします。
A君が「鋏を持っていないのでできません」という返事が返ってきたら、
鋏を渡しますよね。
それと同じです。
(匿名) 2025/09/01(月) 11:41:11
'(1)までは実行されましたが
続けて
'(2)が実行されずになってしまっています
(KN) 2025/09/01(月) 13:43:43
ブレークポイントのつけ方はわかりますか?
分からなければ、ステップイン実行、ブレークポイントなどで
調べてみてください。
Set rng = Range("B:B").Find(what:="脚注")
の所にブレークポイントを置いて
ステップイン実行してみてください。
(匿名) 2025/09/01(月) 14:30:48
Q.ブレークポイントのつけ方はわかりますか?
A.わかりません
調べてみてもなんだかさっぱり判らずで
もうこれ以上無理なんで諦めます
ありがとうございました。
(KN) 2025/09/01(月) 16:29:50
| ご提示のマクロで出来ましたが
| Sub Macro4()とSub Sample()を合体させて一つのマクロにすると助かります
字義どおりうけとめるなら、
Sub main()
Call Macro4
Call Sample
End Sub
として mainを実行したらどうですか?
ふたつの話が関連しているならまずいですけど。 "、*" がある箇所で、かつ"脚注"があるなら、という話なのかな。 (xyz) 2025/09/01(月) 17:54:06
■1
いわなくてもわかるでしょうが、画面の向こうにいるのは人間です。
したがって生成系AIに投げるような質問の仕方ではなく、どこまでが理解できていて、どこがわからないのかということを具体例を出しながら質問されるとよいと思います
■2
最初に提示されたものは、セルの値のうち「、」以降を「""(文字数0の文字列)」で【置換】をすることにより消すというどちらかというと文字列操作の話ですね。
ですが、B2セル以下で"脚注"という文字が含まれていたらその行以下は空欄にしたい(クリアしたい)ということのようですから、【置換】ではなく、たとえば以下のようなアプローチが必要になります。
(1)B2セルからB列最終行まで、セルの値を順に見ていき【"脚注"という文字が含まれているか判定する】 (2)上記の条件を満たすセルが見つかったら、その行〜B列最終行まで【セルの値をクリアする】
上記のアプローチで進める場合、セルの値に"脚注"が含まれているかという条件にするには、ワイルドカードとLike演算子というものを使う必要があります。
(マクロの記録ではLike演算子は記録されなかったと思いますので、このあたりが躓きやすいところかなとおもいます。)
これを踏まえて、コード化してみると以下のようになります。
Sub 研究用1()
Dim 行 As Long
Dim 最終行 As Long
With ActiveSheet
最終行 = .Cells(.Rows.Count, "B").End(xlUp).Row
Stop 'ブレークポイントの代わり
For 行 = 2 To 最終行
If .Cells(行, "B").Value Like "*脚注*" Then
Debug.Print 行&; "行目で脚注を発見!"
Stop
.Range("B" & 行 & ":B" & 最終行).ClearContents
Exit Sub '←1度だけ処理すればいいのでループに戻らずここで終わる
End If
Next 行
End With
End Sub
■3
また、既に提案があったようにFindメソッドを使って「脚注」が含まれるセルを探すのも有効です。
ただ、Findメソッドを使う場合は、引数を省略すると前回値を承継するものがあることや、何も指定しないと2番目のセルから検索が始まることを留意するとともに、何より【見つからなかった場合】のことを考えておかないとエラーが発生しかねないので、Findメソッドを使うならばちゃんとヘルプなどで学習をされたほうがよいとおもいます。
例えばこんな感じにする必要があります。
Sub 研究用2()
Dim 発見セル As Range
With ActiveSheet
Set 発見セル = .Range("B2:B" & .Rows.Count).Find(what:="脚注", LookIn:=xlValues, LookAt:=xlPart, After:=.Range("B" & .Rows.Count))
Stop 'ブレークポイントの代わり
If Not 発見セル Is Nothing Then '該当のセルが見つかった時だけ処理する(見つからなかった場合は処理しない)
.Range(発見セル, .Range("B" & .Rows.Count)).ClearContents
End If
End With
End Sub
■4
最後になりますが、いずれも完成品のプレゼントではなく研究材料として提示しています。
何も考えずにコピペして終わりにするのはご遠慮ください。
提示したコードに興味があれば【ステップ実行】によりどの命令が何をやっているのか確認してみてください。
それでもわからなければ、冒頭に書いたように、××になると理解して○○のように記述したけど、△△になってしまう(△△というエラーが出る)といったように質問されると、回答が得られやすいんじゃないかと思います。
(もこな2 ) 2025/09/06(土) 16:25:55
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.