アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel2010環境とExcel2003環境が混在する社内で縦長の商品仕様書を作っています。
どの商品も途中で「包装仕様」という一連の入力項目が出てくるのですが、商品によって「包装仕様」が登場する行が異なります(場合によっては列までも異なります)。

そこで「包装仕様入力欄」という名前付き範囲を作成し、その名前付き範囲の「資材名」の新規入力欄に一発でジャンプできると便利だと考えました。
資材名の新規入力セルは範囲名「包装仕様入力欄」の左から2列目になり、範囲名「包装仕様入力」内においてだけならその列の新規入力セル以下には何も入力されていませんが、右隣の列には補足事項が記入されるため、範囲名「包装仕様入力欄」の2列目の最終行の1つ下のセルを狙って選択する必要があります。

Range("包装仕様入力欄")(Range("包装仕様入力欄”).Rows.Count, 2).End(xlUp).Offset(1).Select

で確かに動作しますが、「Range("包装仕様入力欄")」を2度も記述しているなど、あまりスマートではありません。もう少しスマートな記述があるのなら教えてください。

「名前付き範囲の3列目の最終行の1つ下を選」の質問画像

A 回答 (2件)

こんにちは。



どのみち、このようなコードには、「スマート(Cool)」なものなどはないと思います。
もし、あえて言わせていただけるなら、[名前定義]を使った時点で、VBA側からみると、あなた(ワークーシート・ユーザー)任せになってしまいますから、プログラマからは嫌われます。本来なら、その中身を調べなくてはなりません。

>Range("包装仕様入力欄")(Range("包装仕様入力欄”).Rows.Count, 2).End(xlUp).Offset(1).Select
>「Range("包装仕様入力欄")」を2度も記述しているなど、

スマートかそうでないかというよりも、RangeのItemプロパテイ(省略可)のパラメータは数字なので、予め変数で、Range("包装仕様入力欄”).Rows.Countを取ればよいのですね。プロパティの中で計算をさせなくてもよいのです。

簡単に書くなら、以下のでもよいと思います。
'//
With Range("包装仕様入力欄") '20は、適当なダミーの下辺
   .Cells(.Rows.Count + 20, 2).End(xlUp).Offset(1).Select
End With
'//

必ず空白があるなら、20などというダミーの下辺などは要りませんが、たぶん、そうとは限らないはずです。
    • good
    • 0
この回答へのお礼

自身の思慮の浅さを実感しています。

まず「包装仕様入力欄」のすぐ下に別のデータが入力されています。
ですのでダミーの下辺を用いる方法は使えません。
説明不足で申し訳ありません。

「Range("包装仕様入力欄")」の最下部まで入力されているとき、End(xlUp)を使うと最上部が選択されてしまうこと、さらにその状態で空白セルがあるときは空白セルの2つ下のセルが選択されることも少し問題です。
なので、入力範囲の最下セルに何かが入力されているときはExit Subで逃げることにしました。

Dim n As Integer
n = Range("入力テーブル").Rows.Count
 With Range("入力テーブル")(n, 2)
   If .Value <> "" Then
    MsgBox "データ一杯"
    Exit Sub
   Else
    .End(xlUp).Offset(1).Select
   End If
  End With

ありがとうございます。

お礼日時:2015/01/08 20:26

データに空欄がなければ


Range("包装仕様入力欄").End(xlDown).Offset(1).Select

これで行けると思います
    • good
    • 0
この回答へのお礼

ありがとうございます。
一列目の最終データの一つ下(添付図のH257)が選択されました。

お礼日時:2015/01/08 14:57

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