- ベストアンサー
エクセルVBA:データ端に画像があった場合の最終セル位置取得
エクセル2000でVBA使用の場合の質問です。 既にシートに表や画像ファイルが配置されています。 あちこちの他データベースから、送付されてくるデータをそのシートの下端に自動で追加するマクロを組んでいます。 しかし、シートの一番下が不定な大きさの画像ファイルであった場合に、次のデータが、既にある画像に隠されない位置から貼り付けたいのですが、画像の最下位置をセル位置で取得する方法が判りませんでした。 こういう場合、どのような方法で取得すればいいのでしょうか? 最下データは必ずしも画像とは限らないので、出来れば同じコマンドかルーチンで画像であってもセル内データであっても、最下端セル(ここでは画像にが被っていないセルか、ヌルでないセル)位置、或いは最初の空きセル(ここでは、画像で隠されていず、かつヌルセルの位置の意味)位置を取得できれば嬉しいのですが、それが無理な場合、最後が画像か非ヌルセルかを判断した上で、画像だった場合の最下端情報を取得する方法(非ヌルセルと判断出来れば、情報取得方法はいくつか知っています)のどちらかを知りたいのです。
- みんなの回答 (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
その他の回答 (1)
- BraveStory
- ベストアンサー率47% (11/23)
画像が配置されている列とデータが入力されている列は同じなのでしょうか? 仮に両方が列Aにあるとした場合ですが、 最下画像の下端の行番号は Shapes(Index).BottomRightCell.Row で取得できます。 データの下端は Cells(65536, 1).End(xlUp).Row で取得するのが最も一般的でしょう。 この二つのうち大きい方の、一つ下の行が次の画像をはる行になります。 もし複数の列で判断するなら、必要な列をループで順に判断して 最大値を取り出すようにすれば良いしょう。
お礼
ありがとうございました。 コメントはNo.2の方のほうにまとめさせていただきます。
補足
早速のご返事にもかかわらず、週末ちょっと立てこんでまして、反応が遅くなり、申し訳ありませんでした。 >画像が配置されている列とデータが入力されている列は同じなのでしょうか? そうです。Aになっています。 割り込みで他の用が入ったので、教えていただいた方法はまだ試せていませんが、そろそろ元へ戻れそうなので、早速試して、改めてお礼させていただきます。
お礼
みなさんのおかげで、無事解決しました。 ありがとうございました。 他の処理部分とのカラミで、nishi6さんの方を採用させていただくことになりましたが、勉強になりました。 ポイントはどうしても公平に振るわけにはいけませんので、勝手ながら、採用させていただいた、ということで、nishi6さんを優先させていただきました。 これからもよろしくご指導願います。
補足
具体的な例まで示していただきながら、返事が送れまして、大変申し訳ありませんでした。 こちらの作業に戻れ次第、改めて御礼させていただきます。