Excelで、「検索してヒットしたセルのとなりのセルに、特定の値を
入力する」という作業をスムーズにできる方法を考えています。
具体的には在庫のチェックに使います。A列に品名が6000件ほどあって、
検索してヒットした品名の隣のセル(B列)に"●"を入力する作業です。
ただし、その隣のセル(B列)にはあらかじめ"○"が入力されています。
現在のところ、
ctrl+F で検索 → 該当するセルに"●"をペースト
で処理していますが、もっと効率的な方法をご存じないでしょうか。
少しでもマウスを動かしたりするのを減らしたいのです。
一つ考えているのは、以下のようにマクロを利用することです。
ユーザーフォーム
テキストボックス(検索する文字列の入力用)
コマンドボタン1(検索用)
コマンドボタン2(次を検索)
コマンドボタン3(前を検索)
ラベル(検索してヒットしたセルの値を確認する用)
コマンドボタン4("●"を該当セルに入力する用)
ここまでたどり着いたのですが、お手上げになりました。
このような考えを実現するコードをお教えいただけないでしょうか。
あるいは、もっと楽なやり方があるということでしたら、それも
お教えいただけないでしょうか。よろしくお願いします。
No.2
- 回答日時:
下記はXL2000 VBAのヘルプです Copy Right Microsoft
Find メソッドの使用例
次の使用例は、シート 1 のセル範囲 A1:A500 で、値に 2 が含まれていて灰色表示のセルを検索します。
→これは誤訳で、実際はみつけたセルを灰色にしていますね。
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Pattern = xlPatternGray50
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
セルを灰色にする代わりに、
c.Offset(0,1).value = "●" とかすれば良いでしょう。
早々にありがとうございます。
お教えいただいたコードでかなりいい具合にいったのですが、
残念ながら目標まで到達しませんでした。
これは私の説明不足によるものだと思います。
お手数をおかけして申し訳ありません。
検索してヒットしたすべての値の隣のセルに入力するのではなく、
1)商品名を「部分一致」で検索
2)複数ヒットした場合、目視で該当する唯一のものを選択
3)その選択されたセルの隣のセルのみに"●"を入力
というのが真意でした。
検索する商品名が長い(しかも1対1で対応するような識別コードがない)ために、このように考える次第です。
もう一度おつきあいいただけると幸甚です。
No.3
- 回答日時:
考えが変な方に行ってると思う。
VBAは自動的にA列にある重複して出現分・該当分検索することが出きる。
コマンドボタンのクリックをきっかけに実行が始まれば、該当の最後まで検索します。
なぜ
コマンドボタン1(検索用)
コマンドボタン2(次を検索)
コマンドボタン3(前を検索)
が要るのですか。
多分質問者に必要な作業は、バッチ型作業で、一気に処理すればよいのでしょう。これが違うなら質問の説明が不足している。
(まず周辺1点)
Offsetメソッドで1発で>隣のセルに、値(決まった値とかルールが記述できるセルの値)をセットできます。>該当するセルに"●"をペースト なぞ必要ない。
(メインポイント)
>VBAは自動的に該当分検索することが出きる、といったが,
Findメソッドを使うという場合は
VBAではFindメソッドとFindNextメソッドを組み合わせて使い、該当探索が終った(尽きた)際のコード上での捉え方が難しい。 だから私は初心者にはFindメソッドの使用は難しいといっている。
しかしマクロの記録で、コードの原型が判るし、WEBなどにもコード例が見つかる。
だから初心者でもコードを作れる。
一例
マクロの記録を改造
Sub Macro1()
Application.ScreenUpdating = False
'Worksheets("Sheet1").Activate
d = Range("A65536").End(xlUp).Row
Range("A2:A" & d).Select
Set x = Selection.Find(What:="a", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, MatchByte:=False, SearchFormat:=False)
If x Is Nothing Then GoTo p2
x.Activate
fst = x.Address
x.Offset(0, 1) = "○"
p1:
Cells.FindNext(After:=ActiveCell).Activate
If ActiveCell.Address = fst Then GoTo p2
ActiveCell.Offset(0, 1) = "○"
GoTo p1
p2:
Application.ScreenUpdating = False
End Sub
処理時間は4000件で6秒ぐらい。
早々にありがとうございます。
お教えいただいたコードでかなりいい具合にいったのですが、
残念ながら目標まで到達しませんでした。
これはおっしゃるとおり、私の説明不足によるものだと思います。
お手数をおかけして申し訳ありません。
検索してヒットしたすべての値の隣のセルに入力するのではなく、
1)商品名を「部分一致」で検索
2)複数ヒットした場合、目視で該当する唯一のものを選択
3)その選択されたセルの隣のセルのみに"●"を入力
というのが真意でした。
検索する商品名が長い(しかも1対1で対応するような識別コードがない)ために、このように考える次第です。
もう一度おつきあいいただけると幸甚です。
No.4
- 回答日時:
>1)商品名を「部分一致」で検索
>2)複数ヒットした場合、目視で該当する唯一のものを選択
>3)その選択されたセルの隣のセルのみに"●"を入力
検索ではな抽出をしてシート上で確認・入力では無理なのですか?
No.5ベストアンサー
- 回答日時:
ANo.2です。
何件くらいヒットするのか分かりませんが、先の回答を改造して下記の様なのはいかがでしょうか。UserFormに、テキストボックスと、リストボックスを設けます。テキストボックスに入れた文字列に部分一致するもののリストがリストボックスに表示されますので、目的の値をクリックすると、その値の隣のセルに●が入ります。(この後何をなさりたいのかは分かりかねますが)<標準モジュール>
Sub test()
UserForm1.Show
Set UserForm1 = Nothing
End Sub
<UserForm1のコード>
Dim matchRange() As Range
Private Sub TextBox1_Change()
Dim c As Range
Dim firstAddress As String
ReDim matchRange(0 To 0)
With Worksheets(1).Range("a1:f500")
Debug.Print TextBox1.Value
Set c = .Find(TextBox1.Value, LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
firstAddress = c.Address
Set matchRange(0) = c
Me.ListBox1.AddItem c.Text
Do
Set c = .FindNext(c)
If (c Is Nothing) Or (c.Address = firstAddress) Then Exit Do
ReDim Preserve matchRange(UBound(matchRange) + 1)
Set matchRange(UBound(matchRange)) = c
Me.ListBox1.AddItem c.Text
Loop
End If
End With
End Sub
Private Sub ListBox1_Click()
matchRange(ListBox1.ListIndex).Offset(0, 1).Value = "●"
Me.Hide
End Sub
ありがとうござます!
>(この後何をなさりたいのかは分かりかねますが)
ひたすら同じ作業を繰り返します。
ですので、最後の Me.Hide のところを
Me.TextBox1.value =""
Me.ListBox1.clear
としてみました。
このたびは、ほんとうにありがとうございました。助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) 指定値をマクロで検索&シート移動 2 2022/04/27 23:29
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) マクロVBAのフォルダ階層別で検索の方法 4 2022/04/03 23:23
- Excel(エクセル) Excelで関数を使って入力した値を、関数を抜いた値として扱いたい 1 2022/07/08 02:10
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) Excelグラフのラベルオプションの並べ替えは可能ですか。セルの値を最後にしたいのですが。 1 2022/06/05 10:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
腕を見たら黄色くなってる部分...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
勃起する時って痛いんですか? ...
-
精子が黄色?
-
口の中に黒い血の塊
-
白血球が多いとどんな心配があ...
-
尿検査前日に自慰行為した時の...
-
中出しをするとお腹が痛い・・・。
-
精子に血が・・・
-
これって喉仏ですか? 私は女性...
-
爪が紫色?
-
納豆食べた後の尿の納豆臭は何故?
-
筋トレするとチンコが縮んじゃ...
-
射精をして1週間以内に尿検査を...
-
尿検査の前日は自慰控えたほう...
-
EXCELで式からグラフを描くには?
-
excelでsin二乗のやり方を教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報