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

稀に1円合いません?
Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何処に書けば良いかおわかりの方がいらっしゃいましたら教えてください。
Sub 金額転記()
'対象シートを設定
Dim Ws1 As Worksheet, Ws2 As Worksheet
Set Ws1 = Worksheets("Sheet1")
Set Ws2 = Worksheets("Sheet2")
'最終行の取得
Dim Cmax1 As Long, Cmax2 As Long
Cmax1 = Ws1.Range("A65536").End(xlUp).Row
Cmax2 = Ws2.Range("A65536").End(xlUp).Row
'変数設定
Dim Product_code As String, Master_code As String, Product_name As String
Dim i As Long, j As Long, Product_price As Long
'Ws1のD列を取得
For i = 2 To Cmax1
Product_code = Ws1.Range("D" & i).Value
'Ws2のA列を取得
For j = 2 To Cmax2
Master_code = Ws2.Range("A" & j).Value
'Ws1のB列とWs2のA列をマッチング
If Product_code = Master_code Then
'Ws2のC列とD列を取得
Product_name = Ws2.Range("C" & j).Value
Product_price = Ws2.Range("D" & j).Value
Exit For
End If
Next
'Ws1のG列とH列に出力
If Product_name <> "" Then '空白の初期化
Ws1.Range("G" & i).Value = Product_name
Ws1.Range("H" & i).Value = Product_price
Product_name = ""
Product_price = 0
End If
Next
End Sub

「稀に1円合いません? Sheet1から金」の質問画像

A 回答 (3件)

D2セルの値は小数点以下端数を含むけど、


表示形式が通貨で恐らく小数点以下の桁数がゼロになっているので
切り上げ表示になっている。

G2セルは、一旦、整数型(long)変数Product_priceを介しているから
小数点以下が切り捨てられている。

ってことではないですか?


金額を扱うなら整数型(long)ではなく通貨型(Currency)を使用した方が良いですよ。

Dim Product_price As Currency
    • good
    • 0
この回答へのお礼

助けていただきありがとうございます♪知識が増えました。

お礼日時:2022/09/06 18:03

Ws1.Range("H" & i).Value = WorksheetFunction.RoundUp(Product_pric

e,0)
    • good
    • 0
この回答へのお礼

ありがとうございます♪

お礼日時:2022/09/06 18:02

こんにちは



説明文やコードの内容と、添付の図とが一致していないので、とても分かりにくいのですが・・

>Sheet1から金額と個数を貼り付ける下記コードで
ご提示のコードでは、シート2の値をシート1に転記しているように読めます。
また、変数 Product_price がご質問の対象の「金額」のように思われますが、それってH列に転記するコードになっていませんか?
(添付図ではG列のように見えますが・・)

>金額を切り上げるコードを何処に書けば良いか~
そもそも論になってしまいますが、「Master_code = ~」とあるので、もしかするとシート2がマスター的なシートなのでしょうか?
(単なる変数名だけの話だけで、実際の内容は関係ないのかも知れませんが)
であるなら、マスターに端数ありの値を記入するのをやめるようにしておくのが正論のように思いますけれど・・・
(他の計算では、端数を用いて計算をする必要があるのかも知れませんので、なんともわかりませんけれど)


戯言はこのくらいにしておいて・・
処理がご提示の内容だけであるなら、変数 Product_price に値を代入する時でも、その値をセルに代入する時でもどちらでも良いので、「切り上げ」を行えばよいと思われます。
(極端に言えば、その間ならどこでも良いです)

例えば、セルへの代入直前なら
>Ws1.Range("H" & i).Value = Product_price
の直前、あるいは右辺で直接切り上げてしまえば良いでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2022/09/06 18:01

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