VBAで指定列からAを検索し、発見したら隣のセルに0を入れるマクロを組みたいのですが、組み方がVBA初心者の為わかりません。
(例)
L列に、A、B、C、D、E、Fとランダムに文字が入っていて、
文字Aを検索し、発見したら隣のI列に値0を入れるというマクロです。
Sub Search()
Dim A As String
Set A = Worksheets("Sheet1").Cells.Find("A")
If A Is Nothing Then
ActiveCell.Offset(0, 1).Value = 0
End If
End Sub
と過去の質問で考えてみたのですが、Aがあった時、、、、
とコードが書けないです。
大変困っているので、ご教授頂けないでしょうか?
出来れば、そのままマクロに出来るコードを教えて頂けないでしょうか?
宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
こんばんは。
#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。
いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表格が、この「Find」 です。
>Set A = Worksheets("Sheet1").Cells.Find("A")
>過去の質問で考えてみたのです
どうも、Find メソッドは、あるレベル以下の人は、省略する傾向があるようです。何が大事で、何が大事でないかというのは、やってみなければ分かりませんが、検索語だけを入れる書き方は、実務では、あまりしないほうがよいと思います。
だいたい、以下のTestFind2 ぐらいまでに、省略は、とどめたほうがよいです。
それは、Find は、必ずしも自分が思っているデフォルトとは違うことがあるので、「明示的(意図的に)」にオプションは入れたほうがよいです。
例えば、大文字小文字の違いを付けるなら、MatchCase:=True, 数式まで探すなら、LookIn:=xlFormulas
なお、Find メソッドは、5年経っても、たぶん完全に覚えられません。面倒なコードのひとつです。ですが、これはパターンが決まっているので、ひとつパターンが決まったら、それに当てはめればよいだけです。
#3さんで示されているMougのサンプルコードと似てはいるのですが、Mougのサンプルコードでは、Verionによって、失敗することがあります。
'--------------------------------------
'記録マクロをそのまま使う方法
Sub TestFind1()
Dim c As Range
Set c = Columns("L:L").Find(What:="A", _
After:=ActiveCell, _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
MatchByte:=False, _
SearchFormat:=False)
c.Offset(0, 1).Value = 0
End Sub
'--------------------------------------
'TestFind1 をアレンジしてみる
Sub TestFind2()
Dim c As Range
'検索語
Const MYTXT As String = "A"
Set c = ActiveSheet.Columns("L:L").Find(What:=MYTXT, _
LookIn:=xlValues, _
LookAt:=xlPart, _
MatchCase:=False)
If Not c Is Nothing Then
c.Offset(0, 1).Value = 0
End If
End Sub
'---------------------------------------
'複数ある場合(パターンを使った方法)
'---------------------------------------
Sub TestFind3()
Dim c As Range
Dim FirstAdd As String
Const MYTXT As String = "A"
Set c = ActiveSheet.Columns("L:L").Find( _
What:=MYTXT, _
LookIn:=xlValues, _
LookAt:=xlPart, _
MatchCase:=False)
If Not c Is Nothing Then
FirstAdd = c.Address
Do
c.Offset(, 1).Value = 0
Set c = ActiveSheet.Columns("L:L").FindNext(c)
If c.Address = FirstAdd Then Exit Sub
Loop Until c Is Nothing
End If
End Sub
No.5
- 回答日時:
再度の登場、onlyromです。
>For R = 1 To Cells(Rows.Count, "L").End(xlUp).Row
>の部分はどのような処理をしているのでしょうか?
Cells(Rows.Count, "L").End(xlUp).Rowのことですね?
これで、L列の最終行(データのある最終行)を求めています。
例えば、L列データが1行目~555行目まで入力されていたら
For R = 1 To 555
でもいいのですが、いつも555行目までデータが入力されているとは限らないはずですから、
For R = 1 to 555 と最終行を決めうちすると最終行が変更になる度に
For R = 1 to 100 とか
For R = 1 to 200 などと最終行を変更しなければいけません。
で最終行に変更があってもコードを変更しなくていいように
Cells(Rows.Count, "L").End(xlUp).Row
これで自動的にL列の最終行を求めているわけです。
最終行を求めるときはこうするんだと丸暗記してください。
それから先の回答でも言いましたがFindメソッドはとても便利なメソッドですから
暇なときにでもヘルプなど眺めしっかり学習しませう。
No.3
- 回答日時:
マクロの記録モードにして、編集ー検索の操作をして、Aを検索し見つかってもさらに数度、次を検索、を続けてマクロの記録を編集で見てください。
全てはそれからです。、>そのままマクロに出来るコードを教えて頂けないでしょうか
丸投げといい、回答者を下請けと看做す態度で、規約上しないことになってます。
問題は検索を終わりにする判定です。検索操作ではまた最初に戻って検索を続けるので、最初に戻ったこと、そこを条件にします。
この検索はFind,FindNextの2つを使う必要があり、終わり条件を組み込むのが難しく初心者が手を出す課題ではない。
ただ「VBA Find FindNext」でWEB照会すれば沢山実例が出てくる・それらを読みもしないで・・。
http://www.moug.net/tech/exvba/0050116.htm
など多数
No.2
- 回答日時:
質問者にはまだFindメソッドは難しいでしょうから、
次のようにオーソドックスな方法がいいでしょう。
L列に「A」があった場合、隣(M列)に「0」をセットする場合
'----------------------------------------------------
Sub Test()
Dim R As Long
Range("M:M").ClearContents
For R = 1 To Cells(Rows.Count, "L").End(xlUp).Row
If Cells(R, "L").Value = "A" Then
Cells(R, "M").Value = 0
End If
Next R
End Sub
'---------------------------------------------------------
それから、「A」という文字を含む
例えば、「A00」とか「xxA」とかの場合も該当にする場合は
If Cells(R, "L").Value Like "*A*" Then
とLikeを使います。
またFindメソッドはゆっくりじっくり勉強してください。
onlyrom様
ご回答ありがとうございます。
今、試してみたら出来ました!
本当にありがとうございます!!
M列には他の値も入っていたので、Range("M:M").ClearContents
は消させて頂きました。
ちなみに、
For R = 1 To Cells(Rows.Count, "L").End(xlUp).Row
の部分はどのような処理をしているのでしょうか?
No.1
- 回答日時:
>Dim A As String
変数Aは文字列型
>Set A = Worksheets("Sheet1").Cells.Find("A")
検索範囲はシート1の全てのセル、且つ変数Aにセットされるのは
Rang型
>If A Is Nothing Then
変数Aが”Nothing:見つからなかった場合に”と言う事。
この回答への補足
n-jun様、アドバイスありがとうございます。
初心者の為、こんな質問をして申し訳ないのですが。
「Aが見つかったら」と書くにはどのようにすれば宜しいでしょうか?
尚、変数宣言をするときに、String型ではなくRang型で宣言すれば宜しいのでしょうか?
ご教授お願い致します!
>Dim A As String
変数Aは文字列型
>Set A = Worksheets("Sheet1").Cells.Find("A")
検索範囲はシート1の全てのセル、且つ変数Aにセットされるのは
Rang型
>If A Is Nothing Then
変数Aが”Nothing:見つからなかった場合に”と言う事。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
2024年は「名探偵コナン30周年」「涼宮ハルヒ20周年」などを迎えますが、 あなたが「もうそんなに!?」と驚いた○○周年を教えてください。
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
架空の映画のネタバレレビュー
映画のCMを見ていると、やたら感動している人が興奮で感想を話していますよね。 思わずストーリーが気になってしまう架空の感動レビューを教えて下さい!
-
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
ある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?
Excel(エクセル)
-
VBAで特定の文字を探して隣のセルに色を付けたい
Excel(エクセル)
-
-
4
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
5
VBAで条件に一致するセルの隣の値をまとめる方法
Excel(エクセル)
-
6
完全一致したら代入するマクロを教えてください
Excel(エクセル)
-
7
Excelで、検索してヒットしたセルの隣のセルに値を入力したい
Excel(エクセル)
-
8
【VBA】指定したセルと同じ値で、別シートにあるセルに移動するには?
Visual Basic(VBA)
-
9
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
10
エクセルで条件に一致したセルの隣のセルを取得したい
その他(Microsoft Office)
-
11
Excel マクロ VBA 別シートのセルを検索し、該当するセルの右にあるセルを入力させる方法 s
Visual Basic(VBA)
-
12
ある列のセルに特定の文字が入っていたら他のセルに決まった文字を入れる
Word(ワード)
-
13
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
14
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
15
エクセルで指定した行で条件に一致したセルの右隣のセルを取得したい
Excel(エクセル)
-
16
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
17
VBA 何かしら文字が入っていたら
Visual Basic(VBA)
-
18
Offsetで可視セルだけを移動したい。
Excel(エクセル)
-
19
【EXCEL VBA】Range(A:A").Find(What:="キーワード")の1行目について"
Visual Basic(VBA)
-
20
Exel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
Excel VBAからAccessマクロを実...
-
Excel マクロでShearePoint先の...
-
マクロで空白セルを詰めて別シ...
-
ExcelVBAでPDFを閉じるソース
-
【EXCEL VBA】オートシェイプを...
-
Excel マクロ VBA プロシー...
-
マクロ実行時、ユーザーフォー...
-
VC++ 2008 EXPRESS "_T"識別子...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
ソース内の行末に\\
-
アクセス マクロ クリップボ...
-
ピボットテーブルでの毎回可変...
-
プリプロセッサのエラー対策が...
-
word VBA 文字列から文字列への...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルに張り付けた写真のフ...
-
ExcelのVBA。public変数の値が...
-
Excel マクロでShearePoint先の...
-
TERA TERMを隠す方法
-
ExcelVBAでPDFを閉じるソース
-
特定文字のある行の前に空白行...
-
Excel VBAからAccessマクロを実...
-
wordを起動した際に特定のペー...
-
マクロ実行時、ユーザーフォー...
-
エクセルで別のセルにあるふり...
-
マクロで空白セルを詰めて別シ...
-
ソース内の行末に\\
-
Excel_マクロ_現在開いているシ...
-
ダブルクリックで貼り付けた画...
おすすめ情報