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

VBA初心者のための「DO LOOP」についての質問

このQ&Aのポイント
  • VBA初心者の方が「DO LOOP」について質問しています。具体的には、「入力画面」というシートに日付を入力してマクロ実行すると、その日付名の新しいシートが作成されるようにしたいとのことです。
  • また、新しいシートのB列に複数の名前を入力し、その名前をキーにして右隣のシートから一致する情報(N列とP列の値)を取得し、新しいシートのK列とM列に表示する作業を行いたいとのことです。
  • ただし、一致する情報がない場合はゼロを表示し、ループを終了したいとのことです。構文についての質問です。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

No.1です。 添付の図の様なイメージだったんですけど何か勘違いしています? > あと、B列に空白行もある場合があるんですが、空白があるとループが終わってしまいますか? はい、サンプルはアクティブシートのB1から空白行までループを回します。 空白ありで最終行までループを回すのでしたらnNameのループの箇所を修正してください。 For nName = 1 To Range("B1").End(xlDown).Row ↓ For nName = 1 To Cells(Rows.Count, 2).End(xlUp).Row

simogumi
質問者

お礼

できました!!《*≧∀≦》 B1の箇所をB5に変えただけで出来ましたほんとーに有難うございましたm(_ _)m

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

No.1です。 > 早速試してみました。ですが、エラーメッセージ等は出ませんし > 実行も中断されている様子も無いのですが何の変動もありません。 ・サンプルマクロでは、右側にシートが無い場合は何も行いません。 ・B1から空白行のある所まで「名前」が入っているとしてみていますB1が空白では駄目です。 ・もしかして「名前」って値ではなく「名前定義」の事ですか? VBE画面でF8を押して一行づつステップ実行し、どこがおかしいのか確認してみてください。

simogumi
質問者

お礼

「名前」という値ではなく、「中村」や「田中」といった名前です。 大変失礼いたしました。 「名前」が無かったから変動が無かったかもしれませんね(ノω=;)。。。 あと、B列に空白行もある場合があるんですが、空白があるとループが終わってしまいますか? F8を押すと一行ずつ実行していくんですね。 初めて知りました。今後役立ちそうです。 有難うゴザイマス。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

こういう事でしょうか? Sub Sample()  Dim nCount, nActSheet, nName, nSheet  Dim sTargetName    nActSheet = ActiveSheet.Index  nCount = Worksheets.Count  If nCount <= nActSheet Then Exit Sub '右にシートが無ければ終了    'アクティブシートのB列の値を検査「名前」とする  For nName = 1 To Range("B1").End(xlDown).Row   sTargetName = Sheets(nActSheet).Range("B" & nName)      '右側のシートを1シートづつ検査対象シートとする   For nSheet = (nActSheet + 1) To nCount       '検査対象シートのB列に検査「名前」があるか確認     If Application.WorksheetFunction.CountIf(Worksheets(nSheet).Range("B:B"), sTargetName) > 0 Then      '「名前」があればN、P列の値をアクティブシートのK、M列に入れる      With Worksheets(nSheet)       nRow = Application.WorksheetFunction.Match(sTargetName, .Range("B:B"), 0)       Range("K" & nName) = .Range("N" & nRow)       Range("M" & nName) = .Range("P" & nRow)      End With      Exit For '1つ見つかったらその「名前」の検査は終了     End If   Next nSheet  Next nName End Sub

simogumi
質問者

お礼

回答有難うございます。 早速試してみました。ですが、エラーメッセージ等は出ませんし 実行も中断されている様子も無いのですが何の変動もありません。 キーとなる名前はコピペしたので間違ってはいないです。 頂いた文を参考時に何か抜けている所がないか自分でも勉強してみます。

関連するQ&A

専門家に質問してみよう