• ベストアンサー

エクセルVBA:データ端に画像があった場合の最終セル位置取得

 エクセル2000でVBA使用の場合の質問です。  既にシートに表や画像ファイルが配置されています。 あちこちの他データベースから、送付されてくるデータをそのシートの下端に自動で追加するマクロを組んでいます。 しかし、シートの一番下が不定な大きさの画像ファイルであった場合に、次のデータが、既にある画像に隠されない位置から貼り付けたいのですが、画像の最下位置をセル位置で取得する方法が判りませんでした。  こういう場合、どのような方法で取得すればいいのでしょうか?  最下データは必ずしも画像とは限らないので、出来れば同じコマンドかルーチンで画像であってもセル内データであっても、最下端セル(ここでは画像にが被っていないセルか、ヌルでないセル)位置、或いは最初の空きセル(ここでは、画像で隠されていず、かつヌルセルの位置の意味)位置を取得できれば嬉しいのですが、それが無理な場合、最後が画像か非ヌルセルかを判断した上で、画像だった場合の最下端情報を取得する方法(非ヌルセルと判断出来れば、情報取得方法はいくつか知っています)のどちらかを知りたいのです。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

画像、図形の最終は For Each で全て調べています。 セルは、A列からIVまで調べています。求めた行+1が挿入する位置になります。 標準モジュールに貼り付ける例です。 ↓ Sub searchEndRow()   Dim EndRow As Long    '求める最終行   Dim shp As Shape     '図形   '画像、図形の最終行を求める   For Each shp In ActiveSheet.Shapes     EndRow = Application.Max(EndRow, shp.BottomRightCell.Row)   Next   '最終入力セルの行を求める   Dim cl As Integer    '列カウンタ   For cl = 1 To 256     EndRow = Application.Max(EndRow, Cells(65536, cl).End(xlUp).Row)   Next   MsgBox "挿入する行は " & (EndRow + 1) & " 行目です" End Sub

TK1961
質問者

お礼

 みなさんのおかげで、無事解決しました。 ありがとうございました。  他の処理部分とのカラミで、nishi6さんの方を採用させていただくことになりましたが、勉強になりました。  ポイントはどうしても公平に振るわけにはいけませんので、勝手ながら、採用させていただいた、ということで、nishi6さんを優先させていただきました。  これからもよろしくご指導願います。

TK1961
質問者

補足

 具体的な例まで示していただきながら、返事が送れまして、大変申し訳ありませんでした。  こちらの作業に戻れ次第、改めて御礼させていただきます。

その他の回答 (1)

回答No.1

画像が配置されている列とデータが入力されている列は同じなのでしょうか? 仮に両方が列Aにあるとした場合ですが、 最下画像の下端の行番号は Shapes(Index).BottomRightCell.Row で取得できます。 データの下端は Cells(65536, 1).End(xlUp).Row で取得するのが最も一般的でしょう。 この二つのうち大きい方の、一つ下の行が次の画像をはる行になります。 もし複数の列で判断するなら、必要な列をループで順に判断して 最大値を取り出すようにすれば良いしょう。

TK1961
質問者

お礼

 ありがとうございました。 コメントはNo.2の方のほうにまとめさせていただきます。

TK1961
質問者

補足

 早速のご返事にもかかわらず、週末ちょっと立てこんでまして、反応が遅くなり、申し訳ありませんでした。 >画像が配置されている列とデータが入力されている列は同じなのでしょうか?  そうです。Aになっています。 割り込みで他の用が入ったので、教えていただいた方法はまだ試せていませんが、そろそろ元へ戻れそうなので、早速試して、改めてお礼させていただきます。

関連するQ&A