
Excelで、「検索してヒットしたセルのとなりのセルに、特定の値を
入力する」という作業をスムーズにできる方法を考えています。
具体的には在庫のチェックに使います。A列に品名が6000件ほどあって、
検索してヒットした品名の隣のセル(B列)に"●"を入力する作業です。
ただし、その隣のセル(B列)にはあらかじめ"○"が入力されています。
現在のところ、
ctrl+F で検索 → 該当するセルに"●"をペースト
で処理していますが、もっと効率的な方法をご存じないでしょうか。
少しでもマウスを動かしたりするのを減らしたいのです。
一つ考えているのは、以下のようにマクロを利用することです。
ユーザーフォーム
テキストボックス(検索する文字列の入力用)
コマンドボタン1(検索用)
コマンドボタン2(次を検索)
コマンドボタン3(前を検索)
ラベル(検索してヒットしたセルの値を確認する用)
コマンドボタン4("●"を該当セルに入力する用)
ここまでたどり着いたのですが、お手上げになりました。
このような考えを実現するコードをお教えいただけないでしょうか。
あるいは、もっと楽なやり方があるということでしたら、それも
お教えいただけないでしょうか。よろしくお願いします。
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
としてみました。
このたびは、ほんとうにありがとうございました。助かりました。
No.4
- 回答日時:
>1)商品名を「部分一致」で検索
>2)複数ヒットした場合、目視で該当する唯一のものを選択
>3)その選択されたセルの隣のセルのみに"●"を入力
検索ではな抽出をしてシート上で確認・入力では無理なのですか?
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.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で対応するような識別コードがない)ために、このように考える次第です。
もう一度おつきあいいただけると幸甚です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
[初心者です]VBAで指定列からAを検索し、発見したら隣のセルに値0を入れるマクロ。
Access(アクセス)
-
VBA 検索して一致したセルへジャンプさせたい
その他(プログラミング・Web制作)
-
-
4
ある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?
Excel(エクセル)
-
5
vba:特定のセルに入力したと同時に隣のセルの値を特定のセルの下の行に自動入力したい_No.2
Excel(エクセル)
-
6
A1セルに入力したら、入力時間をA2セルに自動挿入
Excel(エクセル)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
UserForm1.Showでエラーになります。
工学
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
11
【excelVBA】Findメソッドで検索対象を複数列
Excel(エクセル)
-
12
Excel VBA でテキストボックスの値をセルA列から検索
その他(プログラミング・Web制作)
-
13
EXCEL あるセルに数字が入力されれば既存マクロ実行させたい
Excel(エクセル)
-
14
VBA フォームに入力された数値を検索条件としたい
Visual Basic(VBA)
-
15
Calculateイベントでセルを指定したい
Word(ワード)
-
16
エクセルVBAのChangeイベント時の再計算
Visual Basic(VBA)
-
17
”戻り値”が変化したときに、マクロを実行したい
Visual Basic(VBA)
-
18
エクセルで条件に一致したセルの隣のセルを取得したい
その他(Microsoft Office)
-
19
ある列のセルに特定の文字が入っていたら他のセルに決まった文字を入れる
Word(ワード)
-
20
【VBA】指定したセルと同じ値で、別シートにあるセルに移動するには?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
Excel 数値の前の「 ' 」を一括...
-
VLOOKUP関数を使用時、検索する...
-
値が入っているときだけ計算結...
-
病院側から早く来てくださいと...
-
MIN関数で空白セルを無視したい...
-
リンク先のファイルを開かなく...
-
2つの数値のうち、数値が小さい...
-
ある範囲のセルから任意の値を...
-
【Excelで「正弦波」のグラフを...
-
小数点以下を繰り上げたものを...
-
一番多く表示のある値(文字列...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
EXCELで条件付き書式で空白セル...
-
エクセルで数式の答えを数値と...
-
精液の落とし方を教えてください
-
ワードのページ番号をもっと下...
-
エクセルで空白セルを含む列の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
値が入っているときだけ計算結...
-
彼女のことが好きすぎて彼女の...
-
尿検査前日に自慰行為した時の...
-
VLOOKUP関数を使用時、検索する...
-
Excel 数値の前の「 ' 」を一括...
-
精液の落とし方を教えてください
-
【Excelで「正弦波」のグラフを...
-
2つの数値のうち、数値が小さい...
-
風俗店へ行く前のご飯
-
精子に血が・・・
-
リンク先のファイルを開かなく...
-
小数点以下を繰り上げたものを...
-
EXCELで条件付き書式で空白セル...
-
イタリアから帰国する際、肉製...
-
excelでsin二乗のやり方を教え...
-
腕を見たら黄色くなってる部分...
-
病院側から早く来てくださいと...
-
ワードのページ番号をもっと下...
おすすめ情報