プロが教えるわが家の防犯対策術!

Sub 要具ライフ()

ActiveSheet.Cells.Find(what:="TOPゴム").offset(0,3) = ActiveSheet.Next.Cells.Find(what:="TOPゴム").Offset(0, 3).Value + 1

End Sub
  
上記のコードで、選択している隣のシート中にある特定の文字の下のセル内の数値に加算した値を選択しているシート中の同じ文字の下のセルに入れたいのですが実行できません。
シートを新しく作った時、隣のシートの行数が挿入するなどで変更される場合があるため行位置が一定でありません。よって、特定の文字のセル位置から出力するセルを探したいです。
どなたか、教えていただけないでしょうか?

質問者からの補足コメント

  • fujillinさん、ご回答ありがとうごさいました。
    再度、何をしたいのか説明します。
    シートには、各道具の使用日数を入力している表があります。毎日、シートを更新するためにブランクの表が書いているシートをコピーしています。
    前日の表から、各道具の使用日数をカウントしたい(加算)したいのですが、表の行を挿入する場合がありまして、前日の表からそのまま参照ができないため、各道具の名称が書いているセルの位置から使用日数が入力しているセルの数値を取得したいと思っています。
    しかし、使用していない道具の使用日数は”-“と表示しているため加算できなくエラーとなります。
    この場合、どのようなコードが必要でしようか?
    初心者ですので、ifとか使っても上手くいきません。
    申し訳ありません、教えていただけないでしょうか?

      補足日時:2024/03/27 16:28
  • fujillinさま、ありがとうごさいます。

    右隣のシートの表の中に、列方向に道具の名称が入力しています。各道具のセルの下のセルに使用日数を入力しています。
    入力日が変わると、ブランクの表があるシートをコピーしていきます。常に右隣のシートが前日入力したシートとなります。
    前日のシートの表から、各道具の使用日数に一日分加算された日数を当日のシートに出力したいです。
    例えば、前日のシートの表の使用日数が35日なら、当日のシートに使用日数は36日と出したいです。前日のシート表の行数が変化するため、相対参照できません。

      補足日時:2024/03/27 17:45

A 回答 (2件)

No1です。



>使用していない道具の使用日数は”-“と表示しているため
>加算できなくエラーとなります。
>この場合、どのようなコードが必要でしようか?
コードを考える前に、まずどのように処理をしたいのかを具体的に整理してみてください。

例えば、「補足」にご提示の内容の例で考えてみれば、
 1)値が数値かどうかをチェックする
 2-1)数値の場合は、Aの処理(=加算?)を行う
 2-2)数値でない場合は、Bの処理(=記載が無いので不明)を行う
のような感じでしょうか?
(当方にはどうなさりたいのかわかりませんので、上記は一般的な例です)
このような感じに整理してから、それをコード化すれば宜しいでしょう。

>ifとか使っても上手くいきません。
IFで条件分岐すれば済むと思います。
「値」が数値かどうかは、IsNumeric関数で評価できますので・・
https://learn.microsoft.com/ja-jp/office/vba/lan …

 IF IsNumeric(値) Then
   Aの処理
 Else
   Bの処理
 End IF

のような形式にすれば、上記の内容をコード化することができると思います。

No1に挙げた、その他の部分でもエラーが発生する可能性はありますので、質問者様にとっては「どうでも良い問題」かも知れませんけれど、順に潰しておいた方が宜しいとは思います。
    • good
    • 0

こんにちは



なさりたいことの説明が曖昧なので、正確に何をなさりたいのかわかりませんけれど、ご提示のコード自体は実行可能なものと思いますので、想定通りの状態であれば記述の通りに処理されるはずです。
ただし、シートの状態等によっては、エラーが発生する可能性が多々ありそうに見受けられます。

FINDメソッドで「TOPゴム」という文字列を含むセルを探していますが、該当セルが存在しない場合、あるいは、複数存在する場合にどうするのか記述されていません。
特に、該当セルが存在しない場合にはエラーが発生します。
また、シート内の全セルから検索していますが、対象セルが列などを限定できるのなら、対象範囲を絞っておいた方が確実と言えるでしょう。

>シート中の同じ文字の下のセルに入れたい
とありますが、offset(0,3)は「下のセル」を意味してはいません。
(右へ3セル移動したセルになります)
FINDでヒットしたセルが、シート全体の右から3列以内にあると、「その3列右のセル」は存在しないことになるので、エラーになると考えられます。

式の右辺に関しても同様ですが、上記以外にも、
ActiveSheetが一番右側のシートの場合には、Nextが存在しないのでエラーになります。
更には、探索したセルの値が数値ではない場合には加算ができないので、エラーになります。

どのような状態で使うのか不明ですが、上記のような可能性が全くないと保証されているのなら問題はありませんけれど、「エラーを起こさないマウロ」を作成するおつもりなら、このあたりのチェックと処置を加えておく方が宜しそうに思います。


>実行できません。
というのが「エラーが発生する」という意味なのか、「実行はできるが思った内容と違う」という意味なのか不明ですけれど、エラーが発生するのなら、まずは、上記の内容あたりをチェックしてみてください。
「思った通りの処理にならない」という場合は、ご質問文からは「何がしたいのか」が具体的には読み取れないので、こちらでは判断がつきかねます。
抽象的には、ご質問文の内容のようなコードになっていますし、実行条件が想定通りなら、問題なく実行できるコードになっています。
    • good
    • 0

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

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


このQ&Aを見た人がよく見るQ&A