• 締切済み

エクセルVBAマクロ検索について

エクセルで検索してフラグを立てるマクロを教えてください。 A列  B列   C列   D ・・・・・ NO.  日付1  日付2  というリストがあり、A列からNOを検索してB列に日付のフラグを立てる作業をしたいのですが、 まず日付を入力するボックスで設定させてから、A列のIDを検索し、 該当IDのB列にその日付をフラグ入力させるというものです。 このときフラグ入力された該当IDのある列が表示されるようにします。 もしも既に日付フラグが立っているものがあれば、「重複です」等のメッセージボックスが出るか、 またはC列に新たな日付フラグが立つようにしたいです。 それと、上記マクロでA列を参照してB列にフラグという内容を違う列に変える場合(同類の違うリストでもこのマクロを活用したいため)、参照列とフラグ列はマクロでどこを直せばいいのか教えていただけると助かります。 いろいろ自力で調べては見たのですが、知識不足でお力を貸していただけると幸いです。 よろしくお願いいたします。 

みんなの回答

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

少しづつ理解が深まってきたようでよかったです。 >またマクロを立ち上げず、最初の日付設定のままID入力して検索の入力、日付フラグの立つ作業を続けたいとい>う意味です。(手動でこのマクロを終了するまで) ですが MyDate = InputBox("B列より右に入れる日付を入力してください") cle = vbYes '変数 cleに vbYes を入れておく Do While cle = vbYes '変数 cleが vbYes の間は繰り返す MyID = InputBox("検索値を入力してください") ・・・ cle = MsgBox("続けますか", vbYesNo) 'ここで cleにvbYes を入れるか vbNo を入れるか問い合わせ 'cleが vbNo だったら繰り返しが終わります。 Loop こんな感じでできますよね >C列までの入力にしたいです(B列以降は管理データが既に入っているため) D列より右には管理データが入っている ですよね。 ・・・ If J<=3 then Cells(i, j).Value = MyDate 'i行目の j列目に 日付を入れる Else magbox ”どうしましょうか" End If ・・ こんな発想もありますね。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

フラグというのはプログラマなどで使われるが、本件ではその意味がよく判らない。余り品要しないほうがよかろう。 >日付を入力するボックスで設定させてから x=Inputbox() Xをエクセルの日付データに変える、 ーー >A列のIDを検索 A列NOの列のことか。IDなどと突然出すな。 「No」はどのようにして指定(入力)されるのか? >検索し Findメソッドで良いだろう。 それで、そのNOがどの行にあるかわかる。 >該当IDのB列にその日付をフラグ入力させるというものです >フラグ入力させるというものです の入力とは。VBAでデータをセット刷るのか。わたしは「入力」は操作者が手作業で入力するとき、VBAでデータを代入するときは「セット」と書き分けるようにしている。 本件質問ではどちらか? >フラグ入力された該当IDのある列が表示されるようにします この意味は? === あるいは「日付」と、「NOを」ユーザーからもらい、A列で「No」行を検索し、第1行目で「日付」を検索し、交叉したセルを選択するのか。 >既に日付フラグが立っているものがあれば そのセルの値はどういうデータなっているのか。 === もう少しデータ例を挙げて、 初期状態 作業 結果に分けて、 質問にシート状態として書けないのか。 何か自分だけが判っていて、質問説明で、もれていることがあるような気がする。 正しく推測された回答がでて、それで良しとしないで、質問表現で勉強してほしい。

qmiqmi
質問者

補足

ご回答ありがとうございます。 A列のNOがIDと混合して表記してすみませんでした。データの管理NO、IDNOという意味です。 これは予め管理NOとして決まっているものです。D列以降もこの管理NOに基づいたデータが入っています。 日付でフラグを立てたいのは、そのデータを処理した日付として記録したいからです。 他のデータをこの管理データにつき合わせて検索するのではなくて、紙ベースの書類に記載されたIDを検索したいためにいちいち検索入力が必要なのです。 A列    B列   C列    D列以降 ・・・・・ 管理NO.  日付1  日付2   管理データ          (↑B列に既にフラグが立っている場合のみ) という意味です。 こちらの説明が拙くお手数おかけしました。 他のご回答者様の方法で少しずつ希望に近づけましたので、じっくり基礎から調べて勉強しようと思います。 ご指摘ありがとうございました。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

NO1です。 質問を少し勘違いしていました。 Sub ボタン1_Click() Dim MyID As String MyDate = InputBox("B列より右に入れる日付を入力してください") 'まず日付を入力するボックスで設定させてから MyID = InputBox("検索値を入力してください") '検索する値を入力するボックスで設定させてから For i = 2 To Range("A" & ActiveSheet.Cells.Rows.Count).End(xlUp).Row '2行目からA列に入力されている最終行まで繰り返し If Cells(i, 1).Value = MyID Then '>IDNOを検索する動作がわかりません・・・ 'この部分が IDNOと同じだったら という事です。 'Cells(i, 1)の 1 というのがA列(1列目です) j = 2 '2列目から Do Until Cells(i, j) = "" '列が空白になるまで繰り返し j = j + 1 Loop 'jに空白の列の番号が入っている Cells(i, j).Value = MyDate 'i行目の j列目に 日付を入れる End If Next End Sub では >2.次のID検索の入力 の繰り返し これは、何回まで繰り返せばよいのでしょうか? http://excelvba.pc-users.net/ にある  セルの指定 For~Next Do~Loop の操作について目を通してみてください。

qmiqmi
質問者

お礼

たびたびご親切な解説つきでのご回答ありがとうございます。 以下、試してみていい感じにできました! 1.日付を入力設定 →◎できました (日付は一番最初だけ、以降はID入力して検索の繰り返し) →×できません 2.ID検索の入力 →◎できました 3.該当IDのあるB列に日付フラグが立つ →◎できました 4.日付フラグ済みなら「重複です」エラーメッセージ、 →×できません その場合はC列に新たな日付フラグが立つ  →◎できましたが、C列までの入力にしたいです(B列以降は管理データが既に入っているため)  ↓ 2.次のID検索の入力 の繰り返し  →×できません >では >2.次のID検索の入力 の繰り返し >これは、何回まで繰り返せばよいのでしょうか? またマクロを立ち上げず、最初の日付設定のままID入力して検索の入力、日付フラグの立つ作業を続けたいという意味です。(手動でこのマクロを終了するまで) 解説のお陰で何がどうなっているのか少しずつ理解できましたが、コードの書き方や順につまずいています・・・ 参照URLもじっくり目を通して勉強してみます。 ここまで希望するものに近付けるまで教えてくださいましてどうもありがとうございます。 できなかった部分もおわかりでしたら教えていただけると幸いです。 よろしくお願いいたします。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

こんな感じでしょうか Sub ボタン1_Click() Dim MyID As String MyID = InputBox("検索値を入力してください") 'まず日付を入力するボックスで設定させてから For i = 2 To Range("A" & ActiveSheet.Cells.Rows.Count).End(xlUp).Row '2行目からA列に入力されている最終行まで繰り返し If Cells(i, 1).Value = MyID Then 'もし検索値とA列の値が同じだったら j = 2 '2列目から Do Until Cells(i, j) = "" '列が空白になるまで繰り返し j = j + 1 Loop 'jに空白の列の番号が入っている Cells(i, j).Value = Date 'i行目の j列目に 日付を入れる End If Next End Sub 目的に合わせて編集してください。

qmiqmi
質問者

補足

早々にご回答ありがとうございます。 ひとつひとつにわかりやすい説明をつけてくださって助かります。 申し訳ないですが、日付を設定するボックスはできたのですが、次にIDNOを検索する動作がわかりません・・・ 日付のボックスのように、ID検索を行うためのボックスを作りたいです。 1.日付を入力設定(日付は一番最初だけ、以降はID入力して検索の繰り返し) 2.ID検索の入力 3.該当IDのあるB列に日付フラグが立つ 4.日付フラグ済みなら「重複です」エラーメッセージ、 その場合はC列に新たな日付フラグが立つ  ↓ 2.次のID検索の入力 の繰り返し それと、他のリストでこのマクロを適用させるには、参照列とフラグ列をどう直せばいいのでしょうか? まったく初心者で勉強始めたばかりなためわかりずらくてすみません。 よろしくお願いいたします。

関連するQ&A