• ベストアンサー
※ 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/7940)
回答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

  • 「DO LOOP」についての質問です。VBA初心者です。

    「DO LOOP」についての質問です。VBA初心者です。 昨日同じ質問をさせていただきましたが、私の質問がきちんと書かれていなかったせいで 皆様にご迷惑をおかけしてしまいましたm(_ _;)m きちんと伝わるように訂正して再度質問させていただいてます。 『入力画面』というシートに日付を入力してマクロ実行すると 『入力画面』の右隣りにその日付名のシートが新しく作られるように設定しています。 入力する日は不定期で連続した日付ではありません。 それでお聞きしたいのは、新しく作成するシートのB列に複数の名前を入力した後、 その名前をキーに右隣のシートから一つずつ検索していって、一致するものがあれば 同じ行のN列とP列の値を新しいシートのK列とM列に取得しループ終了。 もしくは全てのシートを検索しても一致するものがなければゼロ表示でループ終了。 という作業をしたいんですが、構文がどのように作ればいいのかがわかりません。 お手数ですが、どうかご教授願います。

  • Do..Loopステートメントの使い方について

    現在、入門書を画面で確認しながら ExcelVBAの勉強をしています。 Do...Loopで躓いてしまいました。 Do...Loopステートメントの種類は 条件を満たすまでループするもの Do Until...Loop(ループの前で条件判断) Do...Loop Until(ループの後で条件判断) 条件を満たす間はループするもの Do While...Loop(ループの前で条件判断) Do...Loop While(ループの後で条件判断) とあって、 例えば、A1からA7まで文字が入力されていて 空白のセルになるまで太文字にするとしたら、 ループの前に条件判断していると A1が空白だと処理はされず ループの後で条件判断すると A1が空白でも処理はされる とありました。 とすると、 条件判断はループ後にした方が良いと言う事なのでしょうか。 (空白でも処理してくれるので) 自分が処理したいものが ループ「後」にするのか又は ループ「前」にするのか どのように判断すれば良いのかと言うことと、 また、 条件を満たすUntil(まで)とWhile(間) どちらを使用すれば良いのかの判断方法もわかりません。 超初心者の質問内容で申し訳ありません。 VBAって面白いなぁと思い始めたところで なんとか理解したいので 教えていただけると大変助かります。 よろしくお願いします。

  • Do Loopをキーボードで抜けるには

    エクセルVBAでDo Loopを使って繰り返し表示するプログラムを組んでいます。 このループを終わらせるにはEscを押せば強制終了しましたがキーボードの任意のキーで抜けるもしくは終了させる方法を教えてください。 エクセルのバージョンは「2007」です。

  • VBA DO~LOOPのネスト方法について

    エクセルマクロの構文でDO~LOOPのネストを行った際に、EXIT DOで飛び出した後のLOOP条件が無効になるようです。どなたかご教授願います。 Sub TEST() y = 1 Do Do If y = 2 Then Exit Do End If y = y + 1 Loop Loop While y = 3 End Sub

  • 複数のシートに対してDo~Loopで処理を繰り返したいのですが処理を止める構文が解りません。

    処理の度にシート数が変わるブックで同じマクロを繰り返したいのですが、すべてのシートを選択してマクロを実行したところマクロに範囲指定→ソートの部分があり、処理が止まってしまいます。そこでDo~Loopを使用して順番にマクロを処理していこうと思うのですが、マクロを止める構文がよく解りません。 VBA初心者なものでいろいろ調べて以下のようなものを考えてみたのですがエラーになってしまいます。どなたかお助けください。 Do Until ActiveSheet.Previous.Is Nothing Application.Run "PERSONAL.XLS!Macro101" ActiveSheet.Previous.Activate Loop End Sub

  • エクセル VBA do loop if then

    いつもお世話になっております。 エクセルVBAからの質問です。 do until ----- if --- then ---- ---- ---- loop else --- loop このように loop とか next が二個になるのはエラーらしいですが、 ○○があれば××を通して△△へループする ○○がなければ、すっ飛ばして△△へループする このような分岐をともなう繰り返しコードはどうやって作るとよろしいですか。 おっさんサラリーマンにも分かりやすくぷりーず。

  • Excel VBA 時刻でのDo~Loopの抜け方

    いつもお世話になっております。 Excel VBA 時刻でのDo~Loopの抜け方を教えてください。 下記のような記述で、時刻(時間)の条件を満たした時 ループを抜けるように設定したのですが、 時刻が「8時」とか「15時」というように 時間でしか対応しません。 「何時何分」という設定にも対応するためには どのように記述すればよいか教えてください -------の部分は何らかの記述が入っているものとしてください。 ↓このように記述しました Do Until MyHour > 15 MyHour = Hour(Now) ------------------- -------------------- -------------------- Loop どうぞ、よろしくお願いします。

  • Do Loop 構文で

    エクセルVBAのDo Loop 構文で以下のような場合はどのように表記すればいいでしょうか? 変数 N は1から始まり15回処理を行うと16に変わり、また15回処理を行う。その繰り返しで31、46、61・・・と増加していきます。 N の変化の表記だけ分かればいいです。 お願いします。

  • VBA Do~Loopについて

    VBA勉強中です。 マクロの作成は完了しているのですが、処理効率について指摘を受け、 その際に助言もいただいたのですが、自身の勉強不足、理解不足で どのように変更すれば良いのか分からず、教えていただきたいです。 Do While Ax2 <= 30 で30回繰り返すのではなく (Cells(Ax2,"B").Value <> "" ) の間繰り返すように変更したいです。 ---------------- Sub test()  Dim File1(30) As string  Dim Sheet1(30) As string  Dim Sheet2(30) As string  Dim Cnt As Integer  Ax1=1  Ax2=7  Do While Ax2 <= 30    If Cells(Ax2, "B").Value <> "" Then     File1(Ax1) = Cells(Ax2, "B").Value     Sheet1(Ax1) = Cells(Ax2, "C").Value     Sheet2(Ax1) = Cells(Ax2, "D").Value     Cnt =Ax1    End If    Ax1 = Ax1 + 1    Ax2 = Ax2 + 1  Loop End Sub ---------------- お手数ですが、よろしくお願いいたします。

  • VBA Do…Loopについて

    お世話になっております。 ただいま、アクセスVBAにてDo…Loopの練習をしております。 テキストボックス1に数字を入れ、コマンドボタンを押すと入力した数字が1ずつ引かれる形でテキストボックス2に入るようにしたいです。 (テキストボックス1に「8」→テキストボックス2に「87654321」のように) Dim I As Variant I = Me.text1.Value Me.text2.Value = Me.text1.Value Do Until I = 1 I = I - 1 Me.text2.Value = Me.txt2.Value & I Loop で動作そのものはするのですが、doloop前の「Me.text2.Value = Me.text1.Value」を正さないといけないようです。(課題です) これがないと入力された数字そのものが入らなくなってしまうのですが… よろしくおねがいします。

専門家に質問してみよう