• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「DO LOOP」についての質問です。VBA初心者です。)

VBA初心者のためのDO LOOPに関する質問

このQ&Aのポイント
  • VBA初心者ですが、「DO LOOP」に関する質問です。入力画面に日付を入力してマクロを実行すると、その日付名のシートが新しく作られます。新しいシートから一つずつ検索していって、一致するものがあればデータを取得してループを終了し、一致するものがなければゼロを表示してループを終了したいと思っています。構文がわからず困っています。質問の内容についてご教示いただければと思います。
  • VBA初心者です。DO LOOPについて質問です。入力画面に日付を入力し、その日付名のシートを新しく作成するマクロを実行したいと考えています。その後、新しいシートから一つずつ検索していって、一致するものがあればデータを取得してループを終了し、一致するものがなければゼロを表示してループを終了したいです。どのような構文を使用すれば良いでしょうか?ご教示いただけますと幸いです。
  • VBAの初心者です。DO LOOPに関して質問があります。入力画面に日付を入力し、その日付名のシートを新しく作成するマクロを作成したいです。さらに、新しいシートから一つずつ検索していって、一致するものがあればデータを取得してループを終了し、一致するものがなければゼロを表示してループを終了したいです。構文についてよくわからないので、教えていただけますか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

シート名は取得できてますか? http://www.asahi-net.or.jp/~zn3y-ngi/YNxv202.html#3 こちらにVBAが詳しく出てます。 For~Next でチェックをかけ、その中でフラグを立てます。 例: Dim flg flg = "見つからない" For i = 1 To シート数 If 日付 = シート名 Then flg = "見つかった!" Exit For End If Next If flg = "見つかった!" Then '見つかったときの処理 Else '見つからなかったときの処理 End If こんな感じになります。

simogumi
質問者

お礼

誠に申し訳ありません。 私の質問の書き方が悪かったみたいでm(_ _;)m シート名の検索ではなく、新しく作られたシートのB列に名前を複数入力後 その名前をキーに以前のシートを新しい方の日付から順に検索していって 同行のN列とP列の値を取得したかったのです。 せっかく回答していただいたのに本当に申し訳ないです。 でも、頂いた文をちゃんと勉強して、今後に役立てたいと思ってます。 有難うございました。

その他の回答 (6)

  • mar00
  • ベストアンサー率36% (158/430)
回答No.7

たびたびすいません。#5です。 Sub Macro1() シートが新しく作られる処理 On Error GoTo Line シート名変更の処理 以下の処理 Exit Sub Line: MsgBox "同じ日付があります。" '以下は新しくできたシートを削除する処理です。 '新しく作られるシートが2番目にある場合です。 Application.DisplayAlerts = False Sheets(2).Delete Application.DisplayAlerts = False End Sub

simogumi
質問者

お礼

誠に申し訳ありません。 私の質問の書き方が悪かったみたいでm(_ _;)m シート名の検索ではなく、新しく作られたシートのB列に名前を複数入力後 その名前をキーに以前のシートを新しい方の日付から順に検索していって 同行のN列とP列の値を取得したかったのです。 せっかく何度も回答していただいたのに本当に申し訳ないです。 でも、頂いた文をちゃんと勉強して、今後に役立てたいと思ってます。 有難うございました。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.6

#5です。 シートが新しく作られる処理のところは シートの名前を変更する処理でした。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.5

私も初心者に近い方ですが 同じ名前のシートは作れないはずなので、そもそもエラーになるのでは? エラー時の処理をしておけば済むと思います。 Sub Macro1() On Error GoTo Line シートが新しく作られる処理 以下の処理   Exit Sub Line: MsgBox "同じ日付があります。" End Sub で良いかと思います。 間違ってたらすいません。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

sub macro1()  dim s as worksheet  for each s in worksheets   if s.name = "目的の名前" then    msgbox "あります"    exit sub   end if  next  msgbox "ありませんでした" end sub sub macro2()  dim i as long  for i = 1 to worksheets.count   if worksheets(i).name = "目的の名前" then    msgbox "ありました"    exit sub   end if  next i  msgbox "なかったです" end sub sub macro3()  dim i as long  i = 0  do   i = i + 1   if worksheets(i).name = "目的の名前" then    msgbox "見つかりました"    exit sub   end if  loop until i = workshsets.count  msgbox "無い" end sub

simogumi
質問者

お礼

誠に申し訳ありません。 私の質問の書き方が悪かったみたいでm(_ _;)m シート名の検索ではなく、新しく作られたシートのB列に名前を複数入力後 その名前をキーに以前のシートを新しい方の日付から順に検索していって 同行のN列とP列の値を取得したかったのです。 せっかく回答していただいたのに本当に申し訳ないです。 でも、頂いた文をちゃんと勉強して、今後に役立てたいと思ってます。 有難うございました。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.3

書き忘れました(^_^;) 3行目  fl = 0: sp = 3 の「sp = 3」は検索を始めるシート番号です 適当に「3」としてしまいましたが、調整してください

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.2

シート名の重複をチェックするという意味なら こんな感じでどうでしょう ------------------------------------- Sub Mc1()   sc = Worksheets.Count   fl = 0: sp = 3   stnm = "3月11日" '検索するシートの名前   Do     If stnm <> Worksheets(sp).Name Then       sp = sp + 1     Else       fl = 1       Exit Do     End If   Loop Until sc < sp   If fl = 0 Then     MsgBox "一致するシートなし"   Else     MsgBox sp & " 番目のシートと一致"   End If End Sub -------------------------

simogumi
質問者

お礼

誠に申し訳ありません。 私の質問の書き方が悪かったみたいでm(_ _;)m シート名の検索ではなく、新しく作られたシートのB列に名前を複数入力後 その名前をキーに以前のシートを新しい方の日付から順に検索していって 同行のN列とP列の値を取得したかったのです。 せっかく回答していただいたのに本当に申し訳ないです。 でも、頂いた文をちゃんと勉強して、今後に役立てたいと思ってます。 有難うございました。

関連するQ&A

専門家に質問してみよう