[[20250901094849]] 『置換マクロに追加記述してください。』(KN) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『置換マクロに追加記述してください。』(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


その通りです
よろしくお願いします
(KN) 2025/09/01(月) 10:38:27

Sub Sample()
    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


仰せの通りです
ご提示のマクロで出来ましたが
Sub Macro4()とSub Sample()を合体させて一つのマクロにすると助かります
その追加する記述がちょっと厳しいです

1行目にマクロボタンとして登録しています
更新のたびに何回も使うマクロなんでよろしくお願いします

(KN) 2025/09/01(月) 11:08:51


やってみたことは
単純に組み合わせて結合することですがダメでした
なにか別のコードを付け加えないといけないと思うのですが
それが分かりません
Sub Sample()
    '(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

なにかエラーメッセージが返ってきてないですか?
エラーメッセージはExcel君からの返事です。
この返事を無視してはいけません。

例えば紙を切る仕事をA君に頼んだとします。
A君が「鋏を持っていないのでできません」という返事が返ってきたら、
鋏を渡しますよね。

それと同じです。

(匿名) 2025/09/01(月) 11:41:11


エラーメッセージは全然出ないです

'(1)までは実行されましたが
続けて
'(2)が実行されずになってしまっています

(KN) 2025/09/01(月) 13:43:43


(2)______
の行の先頭にはシングルクォート「'」は付いていますよね?

ブレークポイントのつけ方はわかりますか?
分からなければ、ステップイン実行、ブレークポイントなどで
調べてみてください。

Set rng = Range("B:B").Find(what:="脚注")
の所にブレークポイントを置いて
ステップイン実行してみてください。

(匿名) 2025/09/01(月) 14:30:48


(2)______
の行の先頭にはシングルクォート「'」は付いていますよね? 最初付けるの忘れてました

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.