Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1763 / 13645 ツリー ←次へ | 前へ→

【72086】間違いを教えてください 本山中 12/5/28(月) 7:01 質問[未読]
【72087】Re:間違いを教えてください UO3 12/5/28(月) 10:56 発言[未読]
【72088】Re:間違いを教えてください 本山中 12/5/28(月) 11:14 お礼[未読]

【72086】間違いを教えてください
質問  本山中  - 12/5/28(月) 7:01 -

引用なし
パスワード
   A2、B2に値を入力すると
1.C2=A2-B2 を出力させる。
D2〜D8にはあらかじめ値を入力させてあります。
2.E2〜E8に順次
 E2=C2*D2
 E3=C2*D3
 E4=C2*D4
 ……………
 E8=C2*D8
を出力させようと思い、次のようにしました。
Sub 押目を探る()
 Dim takane As Integer
 Dim yasune As Integer
 Dim lastgyou As Integer
 Dim i As Integer
 Range("A2") = takane
 Range("B2") = yasune
 Range("C2") = Range("A2") - Range("B2")
 lastgyou = Cells(Rows.Count, 4).End(xlUp).Row
  For i = 2 To lastgyou
   Cells(i, 5) = Range("C2") * Cells(i, 4)
  Next i
 
End Sub
考えていたような結果にはなりません。
どのようにすれば宜しいのでしょうか。
宜しくお願いいたします。

【72087】Re:間違いを教えてください
発言  UO3  - 12/5/28(月) 10:56 -

引用なし
パスワード
   ▼本山中 さん:

こんにちは

まず、【考えていたような結果にはなりません。】ということではなく
【こんなおかしな結果になった】と説明されたほうがわかりやすいですねぇ。

さておき、

 Range("A2") = takane
 Range("B2") = yasune

tanane も yasune も 値は何もセットされていません。(Integer ですから 初期値の 0)
なのに、それを A2 や B2 に格納しますので、A2 も B2 も 0 になります。

やるとすれば

 takane = Range("A2").Value
 yasune = Range("B2").Value

ですね。
アップされたコードだけ見ると、takane も yasune も必要じゃなく、直接セルの値を
計算で用いればいいのですが、まぁ、それはそれとして。

セルの値を参照する時には、プロパティ Value を明示的に記述したほうがいいかと。
また整数ですけど、Integer型で定義するより、Long型で定義しておきましょう。
Integerにすると、上限が 32,767 になりますよ。それ以上の金額がはいるとエラーになります。

以下に、上で述べたようなことを加味したコードを参考までにアップしておきます。

Sub Sample()
  Dim c As Range
  Dim yasune As Long
  Dim takane As Long
  
  If WorksheetFunction.Count(Range("A2:B2")) = 2 Then  'A2,B2 ともに数値が入った時のみ
    takane = Range("A2").Value
    yasune = Range("B2").Value
    Range("C2").Value = takane - yasune
    For Each c In Range("D2", Range("D" & Rows.Count).End(xlUp))
      c.Offset(, 1).Value = Range("C2").Value * c.Value
    Next
  End If
End Sub

【72088】Re:間違いを教えてください
お礼  本山中  - 12/5/28(月) 11:14 -

引用なし
パスワード
   ▼UO3 さん:感謝いたします。
      ありがとうございました。
>▼本山中 さん:
>
>こんにちは
>
>まず、【考えていたような結果にはなりません。】ということではなく
>【こんなおかしな結果になった】と説明されたほうがわかりやすいですねぇ。
>
>さておき、
>
> Range("A2") = takane
> Range("B2") = yasune
>
>tanane も yasune も 値は何もセットされていません。(Integer ですから 初期値の 0)
>なのに、それを A2 や B2 に格納しますので、A2 も B2 も 0 になります。
>
>やるとすれば
>
> takane = Range("A2").Value
> yasune = Range("B2").Value
>
>ですね。
>アップされたコードだけ見ると、takane も yasune も必要じゃなく、直接セルの値を
>計算で用いればいいのですが、まぁ、それはそれとして。
>
>セルの値を参照する時には、プロパティ Value を明示的に記述したほうがいいかと。
>また整数ですけど、Integer型で定義するより、Long型で定義しておきましょう。
>Integerにすると、上限が 32,767 になりますよ。それ以上の金額がはいるとエラーになります。
>
>以下に、上で述べたようなことを加味したコードを参考までにアップしておきます。
>
>Sub Sample()
>  Dim c As Range
>  Dim yasune As Long
>  Dim takane As Long
>  
>  If WorksheetFunction.Count(Range("A2:B2")) = 2 Then  'A2,B2 ともに数値が入った時のみ
>    takane = Range("A2").Value
>    yasune = Range("B2").Value
>    Range("C2").Value = takane - yasune
>    For Each c In Range("D2", Range("D" & Rows.Count).End(xlUp))
>      c.Offset(, 1).Value = Range("C2").Value * c.Value
>    Next
>  End If
>End Sub

1763 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free