好きなおでんの具材ドラフト会議しましょう

 エクセル2000でVBA使用の場合の質問です。

 既にシートに表や画像ファイルが配置されています。
あちこちの他データベースから、送付されてくるデータをそのシートの下端に自動で追加するマクロを組んでいます。
しかし、シートの一番下が不定な大きさの画像ファイルであった場合に、次のデータが、既にある画像に隠されない位置から貼り付けたいのですが、画像の最下位置をセル位置で取得する方法が判りませんでした。
 こういう場合、どのような方法で取得すればいいのでしょうか?

 最下データは必ずしも画像とは限らないので、出来れば同じコマンドかルーチンで画像であってもセル内データであっても、最下端セル(ここでは画像にが被っていないセルか、ヌルでないセル)位置、或いは最初の空きセル(ここでは、画像で隠されていず、かつヌルセルの位置の意味)位置を取得できれば嬉しいのですが、それが無理な場合、最後が画像か非ヌルセルかを判断した上で、画像だった場合の最下端情報を取得する方法(非ヌルセルと判断出来れば、情報取得方法はいくつか知っています)のどちらかを知りたいのです。

A 回答 (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

この回答への補足

 具体的な例まで示していただきながら、返事が送れまして、大変申し訳ありませんでした。

 こちらの作業に戻れ次第、改めて御礼させていただきます。

補足日時:2002/12/02 22:15
    • good
    • 1
この回答へのお礼

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

お礼日時:2002/12/11 23:32

画像が配置されている列とデータが入力されている列は同じなのでしょうか?



仮に両方が列Aにあるとした場合ですが、

最下画像の下端の行番号は
Shapes(Index).BottomRightCell.Row
で取得できます。

データの下端は
Cells(65536, 1).End(xlUp).Row
で取得するのが最も一般的でしょう。

この二つのうち大きい方の、一つ下の行が次の画像をはる行になります。

もし複数の列で判断するなら、必要な列をループで順に判断して
最大値を取り出すようにすれば良いしょう。

この回答への補足

 早速のご返事にもかかわらず、週末ちょっと立てこんでまして、反応が遅くなり、申し訳ありませんでした。


>画像が配置されている列とデータが入力されている列は同じなのでしょうか?

 そうです。Aになっています。
割り込みで他の用が入ったので、教えていただいた方法はまだ試せていませんが、そろそろ元へ戻れそうなので、早速試して、改めてお礼させていただきます。

補足日時:2002/12/02 22:06
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/12/11 23:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報