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

マクロ初心者です。
どなたかご教示くださいませ。

入力フォームの txt 管理No,を入力し
コマンドボタンで「入出庫管理」シートの既存データに追記したいです。
対象の列にある数値をマイナスにする数式ではなく、値にしたいです。


Sheets("入出庫管理").Activate

Dim Sn(1) As Integer
Dim Tgtnm As Variant

Sn(1) = Me.txt管理No ←検索対象

For Each Tgtnm In Range("A:A")  ←A列に管理Noがあります。
If Tgtnm = Sn(1) Then
Tgtnm.Select '検索対象と一致したらセルを選択
ActiveCell.Offset(0, 12).FormulaR1C1 = "RC[-2]*-1" ←数式でなく値にしたい。

End If

Next

よろしくお願いします。

A 回答 (3件)

こんにちは



>対象の列にある数値をマイナスにする数式ではなく、値にしたいです。
全体像はさっぱりわかりませんが、ご提示の部分に関しては、使用している関数式がごく単純なもので「ふたつ左のセルの値に-1を掛ける」という内容なので、直接計算してしまえばよろしいかと。

ご提示のコードをそのまま利用するなら…
For Each Tgtnm In Range("A:A")
 If Tgtnm = Sn(1) Then Tgtnm.Offset(0, 12).Value = -Tgtnm.Offset(0, 10).Value
Next

という感じでできると思います。

※ 参照するセルが数値でない場合はエラーになるけれど、ご提示のコードもそうなので、値のチェックなどは行っていません。
※ 「管理No」で検索しているのならば、複数はヒットしないのではないかと推測しますが、その割には、ヒットした後も検索を継続するという効率の良くない処理になっていると思われますが…
    • good
    • 0
この回答へのお礼

早々にご回答ありがとうございます!
またも fujillin さん。いつもお世話になってます。

「管理NO.」=伝票NOでして、伝票によっては商品が複数行になるため継続しています。
貸出明細数なので、必ず整数ですので問題なしです。

効率を良くする処理がわからず悔しいところですが、
そのままコピペするだけで思い通りになりましたので、大満足です。

お礼日時:2020/02/06 12:56

なんか無駄な事が多いみたいなので、宜しければ教えて下さい。


①「Sn(1) = Me.txt管理No」でわざわざ配列変数に代入されていますが、この後で「Sn(1)」の配列変数使う予定があるのでしょうか?
② 検索対象は何行位あるのでしょうか?(スピードを重視する必要はあるかの確認)
③「Tgtnm.Select」でわざわざセルを選択していますが、この後に選択したセルに何か行うのでしょうか?だとしたら対象になる行は1行だけでないと成り立ちませんが、対象の行は1行だけという認識で良いですか?
④ やりたい事は対象の行のM列の値をK列の値に「-1」をかけた物に変更するでよろしいですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
すでに解決してしまいましたが、勉強のため補足をさせていだだきます。

①やりたいことはあるのですが、1つずつ解消している最中です。
 1つだけなら変数は不要なのですね。
②検索対象は、現在は1000行強ですが今後数万行になりそうです。
③tgtnm は貸出時の伝票Noで、商品毎(行毎)の貸出数をマイナスで返却するマクロです。
 未返却数を入れて差を計算できればベストですが、無理そうなので全て返却された場合に使用します。
④そうです。貸出の整数に「-1」をかけて全て戻しが終了です。

お礼日時:2020/02/06 13:37

FormulaR1C1ではなくValueに設定してください


値を設定するということなので
ActiveCell.Offset(0, 12).Value = ActiveCell.Offset(0, 12).Value -1
これでいかがでしょうか
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。

コピペして使用できると助かりますが
エラーになってしまいました。
原因がわかるようになりたいです。

お礼日時:2020/02/06 15:18

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