Excel VBA質問箱 IV

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

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


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

【66497】条件で変わる増える足し算 スコーピオ 10/9/6(月) 21:46 質問[未読]
【66498】Re:条件で変わる増える足し算 kanabun 10/9/6(月) 22:07 発言[未読]
【66499】Re:条件で変わる増える足し算 kanabun 10/9/6(月) 22:10 発言[未読]
【66500】Re:条件で変わる増える足し算 UO3 10/9/6(月) 22:10 回答[未読]
【66502】Re:条件で変わる増える足し算 スコーピオ 10/9/6(月) 23:27 お礼[未読]
【66503】Re:条件で変わる増える足し算 kanabun 10/9/6(月) 23:31 発言[未読]

【66497】条件で変わる増える足し算
質問  スコーピオ  - 10/9/6(月) 21:46 -

引用なし
パスワード
   質問させてください。
Sheet1のA2セルはリスト選択になっていて、選ばれたリストに応じて
A4セルに応答が異なるようにと考えています。

1つ分ならSheet2のB2のみ
2つ分ならSheet2のB2+C2
3つ分ならSheet2のB2+C2+D2



7つ分なら・・・

となるように。
いま、7つのif文でまかなってきたのですが、こちらの掲示板をみてループで対応できるのではないかと感じました。
でも、足し算の部分をどう書いていいのか分かりませんでした。
書き方を示してくださると助かります。
よろしくおねがいします。


'ここでは3つ分まで書いています。
Sub macro1()
 If Worksheets("Sheet1").Range("A2") = "1つ分" Then
  Worksheets("Sheet1").Range("A4") = Worksheets("Sheet2").Range("A2") + Worksheets("Sheet2").Range("B2")
 End If
 If Worksheets("Sheet1").Range("A2") = "2つ分" Then
  Worksheets("Sheet1").Range("A4") = Worksheets("Sheet2").Range("A2") + Worksheets("Sheet2").Range("B2") + Worksheets("Sheet2").Range("C2")
 End If
 If Worksheets("Sheet1").Range("A2") = "3つ分" Then
  Worksheets("Sheet1").Range("A4") = Worksheets("Sheet2").Range("A2") + Worksheets("Sheet2").Range("B2") + Worksheets("Sheet2").Range("C2") + Worksheets("Sheet2").Range("D2")
 End If
End Sub

【66498】Re:条件で変わる増える足し算
発言  kanabun  - 10/9/6(月) 22:07 -

引用なし
パスワード
   ▼スコーピオ さん:
こんにちは

>Sheet1のA2セルはリスト選択になっていて、選ばれたリストに応じて
>A4セルに応答が異なるようにと考えています。
>
>1つ分ならSheet2のB2のみ
>2つ分ならSheet2のB2+C2
>3つ分ならSheet2のB2+C2+D2

[A2]セルの値が変化したら、処理をするなら
シートのChangeイベントを使うといいですよ

'----------------------------------------- Sheet1 モジュールに記述

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address(0, 0) <> "A2" Then Exit Sub
 
 Dim m As Long
 m = Val(Target.Value)
 Select Case m
  Case 1 To 7
   Application.EnableEvents = False
   Range("A4").Value = WorksheetFunction.Sum _
      (Worksheets("Sheet2").Range("A2").Resize(, m))
   Application.EnableEvents = True
 End Select
  
End Sub


> If Target.Address(0, 0) <> "A2" Then Exit Sub
のところは 変更のあったセルが [A2]でなければ、何もしない
という処理です。

> m = Val(Target.Value)

[A2]セルの値が「1つ目」「2つ目」「3つ目」... のとき
> Val(Target.Value)
とすると、 1, 2, 3 ... という数値が得られます。

その下は
> Select Case m
>  Case 1 To 7
数値m が 1〜7 のどれかであれば、 ということです。

>   Range("A4").Value = WorksheetFunction.Sum _
>      (Worksheets("Sheet2").Range("A2").Resize(, m))

は、この一行で
Sheet2の[A2]セルから 右に m個分のセルの値の合計をとっています。

こういうことでなければ、適宜、修正してください。

【66499】Re:条件で変わる増える足し算
発言  kanabun  - 10/9/6(月) 22:10 -

引用なし
パスワード
   ↑ 失礼

[A2]セルの値が「1つ分」「2つ分」「3つ分」... のとき
> Val(Target.Value)
とすると、 1, 2, 3 ... という数値が得られます。

でした。

【66500】Re:条件で変わる増える足し算
回答  UO3  - 10/9/6(月) 22:10 -

引用なし
パスワード
   ▼スコーピオ さん:

こんばんは
いろんなコードが考えられますが1例です。

Sub Sample()
Dim num As Long
 With Worksheets("Sheet1")
 num = Val(.Range("A2").Value)
  .Range("A4").Value = WorksheetFunction.Sum(Worksheets("Sheet2").Range("A2").Resize(, num))
 End With
End Sub

【66502】Re:条件で変わる増える足し算
お礼  スコーピオ  - 10/9/6(月) 23:27 -

引用なし
パスワード
   kanabunさん、UO3さん

丁寧にコードまで書いてくださり、ありがとうございました。
こんなにすっきりしたコードで書けるとは驚きです。

教えていただいたことを復習して、少しでもおふたりに近づけるよう頑張ります。
どうもありがとうございました!

【66503】Re:条件で変わる増える足し算
発言  kanabun  - 10/9/6(月) 23:31 -

引用なし
パスワード
   ▼スコーピオ さん:
補足です

2つのコードは 書く場所がちがいますので
ご注意を!

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