Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
指定した列(B列)に特定の文字が入力されていた場合、その行(X行)のG列の文字が消える
投稿日時: 20/06/18 12:45:30
投稿者: ザックん

お世話になっております。
 
 
指定した列(B列)に特定の文字が入力されていた場合、その行(X行)のG列の文字が消えるように
したいのですが、そんなことできるのでしょうか。
 
宜しくお願い致し致します。

回答
投稿日時: 20/06/18 17:39:44
投稿者: WinArrow
投稿者のウェブサイトに移動

ザックん さんの引用:
お世話になっております。
 
 
指定した列(B列)に特定の文字が入力されていた場合、その行(X行)のG列の文字が消えるように
したいのですが、そんなことできるのでしょうか。
 
宜しくお願い致し致します。

可能か否かというと可能です。
 
参考コード
With Sheets("シート名")
     If .Cells(X,"B").Value ="特定文字列" Then
         .Cells(x, "G").value = ""
      "または
      '.Cells(x,"G").Clearcontents
     End if
End With
  
   

投稿日時: 20/06/18 17:48:09
投稿者: ザックん

すみません。
 
B列に特定の文字が入力されていた場合、その特定の文字が出てきた行のG列の文字を消す様にしたいのです。
 
B列のどの行に出るかは不特定です。
 
宜しくお願い致し致します。
 
 

回答
投稿日時: 20/06/18 18:27:10
投稿者: WinArrow
投稿者のウェブサイトに移動

B列セルの特定文字列が存在する行を知りたい
 
ということですか?
 
 
それならば、FINDで検索すればうよいでしょう。
 
FINDの使い方は、
Excelvba FIND
で検索してみてください。
   
ここの即効テクニックでも紹介していますよ
 
 
https://www.moug.net/tech/exvba/0050116.html

投稿日時: 20/06/18 18:43:06
投稿者: ザックん

返答ありがとうございます。
 
そうです。行(複数あると思いますが)を特定して、その行のG列の文字を消すことをしたいのです。
初心者でして色々と勉強しているのですが、案内を頂いた内容も確認しましたが未だ理解に達していません。
 
 

回答
投稿日時: 20/06/18 20:02:39
投稿者: WinArrow
投稿者のウェブサイトに移動

前レスで紹介したページの中にある
サンプル3が、お望みのものと同じだと思います。
 
これを試してみてください。
 
または、
 
手操作の検索を「マクロの記録」でコードを作成してみるとよいでしょう。

投稿日時: 20/06/18 20:08:02
投稿者: ザックん

返答ありがとうございます。
 
早速試してみます!

回答
投稿日時: 20/06/18 21:45:11
投稿者: simple

横からすみません。
 
Findを使う前に、B列の開始行から最終行まで、
それぞれ特定の文字列に一致するかどうかを判定して、
一致していたら、そのG列を消去する
という繰り返し構文に、まずはトライしたらどうでしょうか。
 
何行あるのか知りませんが、数十万行もあれば別として、
さして時間はかからないのではないでしょうか。
 
その次のステップで、Findを使ってはどうですか?

回答
投稿日時: 20/06/19 11:31:54
投稿者: QooApp

2013で稼働確認したので下記に記載します。
FindとFindNextであるだけ消します。
他の方がおっしゃる通り、性質をしっかり勉強して楽しんでください。
変数名関数名は適当に直してください。
 
"みかん" = 捜索値
"G" = 消す列
 

Option Explicit

Sub aaaa()
    '変数宣言
    Dim rng, rngEnd As Range
    
    'withブロック
    With ThisWorkbook.Worksheets("Sheet1")
        
        'Findで1つ目を探す
        Set rng = .Range("B:B").Find("みかん")
        
        '見つからなかったら
        If (rng Is Nothing) Then
            MsgBox ("見つかりませんでした。")
        Else
            '発見したら1個目の値を保存しておく
            Set rngEnd = rng
            
            'FindNextで次の値を探す
            Do
                .Cells(rng.Row, "G").ClearContents
                Set rng = .Range("B:B").FindNext(rng)
                'ループ条件 FindNextの結果が保存した値と同じなら終了
            Loop While rng.Row <> rngEnd.Row
        End If
    End With
End Sub

投稿日時: 20/06/19 12:45:47
投稿者: ザックん

お世話になっております。
 
ありがとうございました。
メモ迄入れていただき、感謝申し上げます。
一つ一つクリアしていきたいと思います。
 
今後もよろしくお願いいたします。