• 締切済み

エクセル内の同上と書いてあるセルの上をFillDownしたい。

住所録をもらったのですが、 同じ住所と郵便番号の場合「同上」か「空白」になっていて入力されていません。 見よう見まねでとりあえず郵便番号で1回の住所で1回実行する感じでマクロを作ってみたのですが、 Loop While ~の行で 「オブジェクト変数または With ブロック変数が設定されていません。(Error 91)」 とエラーが出て終わりません。 なぜこのエラーが出るのでしょうか? Sub 同じ() Dim list(2) list(1) = "同上" list(2) = "" tmp2 = Val(InputBox("検索列")) LR = ActiveSheet.Cells(65536, tmp2).End(xlUp).Row For i = 1 To 2 Set 検索 = ActiveSheet.Range(Cells(1, tmp2), Cells(LR, tmp2)).Find(what:=list(i), LookAt:=xlWhole, LookIn:=xlValues) If Not 検索 Is Nothing Then StartAD = 検索.Address Do Cells(検索.Row, tmp2).FillDown Set 検索 = ActiveSheet.Range(Cells(1, tmp2), Cells(LR, tmp2)).FindNext(検索) Loop While Not 検索 Is Nothing And 検索.Address <> StartAD Else End If Next i End Sub

みんなの回答

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

無駄の多い、わざわざ難しいことをしているコードだと思う。 配列定義など不要では Findという初心者には難しいメソッドを使う必要は無い。 そのためNothingなども使うことになる。 対象列などは、このプログラムの使用が限られた場合だろうと思うのに、過ぎて一般化している。(tmp2 = Val(InputBox("検索列"))) 場合場合に応じてコードの組み方の複雑・簡単の使い分けをすべきだ。 ーー 自分のコードのエラー探求もよいが、参考までに簡単で済むコードを挙げておく。 Sub 同じ() LR = ActiveSheet.Cells(65536, "c").End(xlUp).Row For i = 2 To LR If Cells(i, "C") = "同上" Then Cells(i, "C") = Cells(i - 1, "C") End If Next i End Sub 対象はC列と断定している。 質問のケースで普通の状態のデータならこれで出来ると思うが。

  • keirika
  • ベストアンサー率42% (279/658)
回答No.1

>Set 検索 = ActiveSheet.Range(Cells(1, tmp2), Cells(LR, tmp2)).FindNext(検索) この記述で検索した文字が見つからない場合、検索(オブジェクト変数) には値が設定されません。 >Loop While Not 検索 Is Nothing And 検索.Address <> StartAD この記述でエラーになっていると思われますが、設定されていない アドレスを条件に指定していることが原因です。 検索対象が見つからなかった場合の処理への対応が必要です。

関連するQ&A