Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10446 / 13646 ツリー ←次へ | 前へ→

【21807】対話型で検索 まゆ 05/1/31(月) 12:10 質問[未読]
【21808】Re:対話型で検索 かみちゃん 05/1/31(月) 12:51 回答[未読]
【21813】Re:対話型で検索 まゆ 05/1/31(月) 13:51 質問[未読]
【21815】Re:対話型で検索 かみちゃん 05/1/31(月) 14:19 回答[未読]
【21817】Re:対話型で検索 まゆ 05/1/31(月) 16:38 お礼[未読]

【21807】対話型で検索
質問  まゆ  - 05/1/31(月) 12:10 -

引用なし
パスワード
   皆様こんにちは。最近このHPを参考にVBAを始めました。
今データ入力用のマクロを作っていて煮詰まりました。
アドバイスをよろしくお願いします。

第1列に商品名が並んでいて行方向に陳列棚の名前が書かれています。
商品名を検索して陳列棚セルに“1 ”を入力したいです。

・入力は陳列棚ごとに行ないます。
・既に入力した陳列棚は非表示にしてあります。
・商品名いちいち入力するのは長いので“マスク”のように入力するのに
 面倒でなくかつある程度絞れる単語を検索ウィンドウで入力しています。

  A        B      C   
1ガーゼマスク   店奥中段  店奥下段
2伸縮包帯
3立体マスク
4ガーゼ

例えばマクロを使わずに手作業でやると

 検索ウィンドウで“マスク”と入れる⇒“ガーゼマスク”がアクティブになる
⇒もう一度リターンキーを押して入力したい“立体マスク”をアクティブにする
⇒escキー ⇒ 右→キー ⇒ “1”を入力 
⇒ ctrl+Fで検索ウィンドウを表示し次の商品名を検索(以下続く)

複数の人データ入力に関わるので対話型のmsgboxを用いたいです。
下記のような条件分岐のパーツは何となくわかっているのですが
条件分岐をどのようにすればよいのかわかりません。
特に検索したい文字列(例えばマスク)を含むセルをこちらが入力したい
文字列を含むセル(立体マスク)が見つかるまで検索させる方法がわかりません。

 ’inputboxで格納した変数mytarget(文字列)を検索
 Cells.Find(What:="mytarget", After:=ActiveCell, LookIn:=xlFormulas,_ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,_ MatchCase:=False).Activate

 ’mytargetを含む次のセルを検索
Cells.FindNext(After:=ActiveCell).Activate

'適合した商品名の隣りのセル(陳列棚の列)を指定して1を入力
ActiveCell.FormulaR1C1 = "1"

【21808】Re:対話型で検索
回答  かみちゃん  - 05/1/31(月) 12:51 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>特に検索したい文字列(例えばマスク)を含むセルをこちらが入力したい
>文字列を含むセル(立体マスク)が見つかるまで検索させる方法がわかりません。

Findメソッドのヘルプに使用例が載っているので、参照していただきたいのです
が、その使用例を元に少し加筆修正すると、以下のような感じでできると思いま
す。
Option Explicit

Sub Macro1()
 Dim mytarget As String
 Dim c As Range
 Dim firstAddress As String
 
 mytarget = InputBox("検索文字列を入力してください。")
 With Worksheets(1).Range("a1:a500")
  Set c = .Find(mytarget, LookIn:=xlValues)
  If Not c Is Nothing Then
    firstAddress = c.Address
    Do
     '検索文字列が部分一致したセルの1つ右隣のセルに1を入力
     c.Offset(, 1) = 1
     Set c = .FindNext(c)
    Loop While Not c Is Nothing And c.Address <> firstAddress
  End If
 End With
End Sub

【21813】Re:対話型で検索
質問  まゆ  - 05/1/31(月) 13:51 -

引用なし
パスワード
   ▼かみちゃん さん:

早速のお返事ありがとうございます。
教えていただいたコードを試してみました。

“マスク”と入れると“ガーゼマスク”も“立体マスク”も
“1”が入力されてしまいました。

説明の仕方が悪かったですね。
“見つかるまで検索させる”とは
“マスク”で検索して“ガーゼマスク”“花粉症対策マスク”“立体マスク”
と似た商品名がある中で自分の目で確認していき“1”を入力したいです。
エクセルの検索ウィンドウで検索しているかのような操作手順で。

よろしくお願いします。

【21815】Re:対話型で検索
回答  かみちゃん  - 05/1/31(月) 14:19 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>“見つかるまで検索させる”とは
>“マスク”で検索して“ガーゼマスク”“花粉症対策マスク”“立体マスク”
>と似た商品名がある中で自分の目で確認していき“1”を入力したいです。

以下のような感じでいかがですか?
★の部分を加筆修正してください。
「はい」で「1」が入力されます
「キャンセル」で処理を中止します。

Option Explicit

Sub Macro1()
 Dim mytarget As String
 Dim c As Range
 Dim firstAddress As String
 Dim ret As Integer '★

 mytarget = InputBox("検索文字列を入力してください。")
 With Worksheets(1).Range("a1:a500")
  Set c = .Find(mytarget, LookIn:=xlValues)
  If Not c Is Nothing Then
    firstAddress = c.Address
    Do
     '--- ★ここから
     c.Select
     ret = MsgBox("1を入力しますか?", vbYesNoCancel)
     Select Case ret
      Case vbYes
       c.Offset(, 1) = 1
      Case vbCancel
       Exit Do
     End Select
     '--- ★ここまで
     Set c = .FindNext(c)
    Loop While Not c Is Nothing And c.Address <> firstAddress
  End If
 End With
End Sub

ただ、目で確認したいのならば、オートフィルタで絞り込む方法のほうがよろしい
のではないのでしょうか?

【21817】Re:対話型で検索
お礼  まゆ  - 05/1/31(月) 16:38 -

引用なし
パスワード
   ▼かみちゃん さん:
思っていた通りの作業が出来ました。

一人だとずっと解決できなかったのに
こんなに早く解決できるなんて…。

本当にどうもありがとうございました。

10446 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free