none
For Next構文の使い方について RRS feed

  • 質問

  • Excel2010で、For Nextを利用して、基本データの表から空白以外の数値を抽出し、特定のシートに貼り付けるプログラムを考えております。

    Set Dic = CreateObject("Scripting.Dictionary")
       
       On Error Resume Next

       For i = 2 To Y 'Y = Sheets("基本データ").Cells(Rows.Count, 3).End(xlUp).Row

            buf = Format(Sheets("基本データ").Cells(i, 3).Value) 'データがあった場合は、特定のシートに貼り付けられる。
            Dic.Add buf, buf
           
        If Sheets("基本データ").Cells(i, 3).Value = "" Then  'データが空白の場合は、Forから抜ける。
        Exit For
       
        End If
           
    Next i

    このとき、参照元の「Sheets("基本データ").Cells(i, 3)」のセルに、

    =if('変換前データ'!A??="","",'変換前データ'!A??)

    という数式が入っていて実行すると、抽出しない空白("")の行も抽出してしまいます(※ ??は、行数です。)。

    これを抽出しないようにするには、どうすればよいのでしょうか?ご教示のほど、よろしくお願いします。

    2018年1月23日 8:09

回答

  • 通りすがりのOfficeユーザーさんは 初心者かも...

    「...実行すると、抽出しない空白("")の行も抽出してしまいます」
    単純に Dic.Add buf, buf の場所が悪いだけではなかろうか?
    「On Error Resume Next」ということは、空白セルがあっても止めたくないということか...

       For i = 2 To Y
          If Sheets("Sheet1").Cells(i, 3).Value = "" Then
            GoTo SKIP1
          End If
          buf = Format(Sheets("Sheet1").Cells(i, 3).Value)
          Dic.Add buf, buf  'ここにもってくるのじゃ
    SKIP1:
        Next i

    [追加]2018-01-25 Thu. 18:58
    あ そうか、"Dic.Add buf, buf "は、二重登録をしようとするとエラーになるので それで、
    "On Error Resume Next" を入れているのか。
    2018年1月25日 5:37

すべての返信

  • どのような条件で判断されたいのか正確にわからないのですが、例えば、
    Sheets("基本データ").Cells(i, 3).Formula
    で、そのCellに入っている式が取得できますので、式が入っていればという条件分岐することができます。

    上記が見当違いの場合、実現されたいことをもう少し教えていただくと、的確な回答が早く付きやすくなると思います。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答の候補に設定 francois_k 2018年1月31日 2:25
    2018年1月23日 8:41
    モデレータ
  • 通りすがりのOfficeユーザーさんは 初心者かも...

    「...実行すると、抽出しない空白("")の行も抽出してしまいます」
    単純に Dic.Add buf, buf の場所が悪いだけではなかろうか?
    「On Error Resume Next」ということは、空白セルがあっても止めたくないということか...

       For i = 2 To Y
          If Sheets("Sheet1").Cells(i, 3).Value = "" Then
            GoTo SKIP1
          End If
          buf = Format(Sheets("Sheet1").Cells(i, 3).Value)
          Dic.Add buf, buf  'ここにもってくるのじゃ
    SKIP1:
        Next i

    [追加]2018-01-25 Thu. 18:58
    あ そうか、"Dic.Add buf, buf "は、二重登録をしようとするとエラーになるので それで、
    "On Error Resume Next" を入れているのか。
    2018年1月25日 5:37
  • [変換前データ'!A??] は、本当に [""] になっているのですか?

    半角や全角の空白になっていたりしませんか?

    2018年1月29日 11:29
  • 皆さま 返信が大変遅くなってしまい、誠に申し訳ございませんでした。 ery snow 様の上記の回答で、目的を達成することができました。 この場をお借りしまして、厚く御礼申し上げます。
    2018年2月26日 4:42