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

セルに式を入れると、式の対象データが発生した時自動的に式が入っているセルに
値が入りますが、マクロ(モジュール)では、上記の方法(ボタン等を使用しない)はできないのでしょうか?
セルの式では下記の条件式がわかりませんがマクロの記述ならわかるので・・・
もしセルの式で下記できれば、こちらも教えて下さい。
1、例)A1~A30の間に10という値があった場合のみ対象のB例の値を加算する。

2、例)C1~C7の間にD1~D7の中に値がある場合のみ、C1から順番にD列の値を
移す。

2番の例は、よくわからないのですが、セルの式ではできないと思いますので
できれば、ボタン操作をつかわないでどこかに設定をすると自動的に行う方法
はありませんか?
お願いします。
もし、セルでは自動できないがテキストボックス等で、できるのでしたら・・・
どんな方法でもいいのでお願いします。

A 回答 (3件)

1.SUMIF関数でできます。


  質問の場合、=SUMIF(A1:A10,10,B1:B10)
2.IF関数で出来るのでは?
  C1セルに、=IF(D1="","",D1)
  C2セルに、=IF(D2="","",D2)
       ・
       ・
       ・
質問の意図をくみ取れていると良いのですが・・・
    • good
    • 0

質問の意味がつかみづらいですね。



『ボタンを使用しないで』の意味と

(1)対象のB列の値を加算する。
 この『対象のB列』はどのセルで、『加算する』のは何に加算するのでしょうか。
  解釈:A列の値が10なら右のB列の値をA列に加算する。
     とすれば、循環を起こしますのでシートで関数等使ってはできないですね。

     対象のB列の値を加算するの意味がはっきりすれば対応できるでしょう。
     多分、Worksheet_SelectionChange か Worksheet_Change でセル番地を調べて
     処理を書くことになるでしょう。しかし、処理内容によっては非常に困難だっ
     たり、誤処理を引き起こしかねません。例えば、計算した後、B列の値を修正
     したり削除した時にどうするかも決めておくことが必要です。

(2)値を移す。
  解釈:これがカット&ペーストの意味なら、これもシートで関数等使ってはできない
     ですね。D列を消すのが困難でしょう。

     分からないのは、『移す』タイミングです。マクロを動かすには『きっかけ』
     が必要ですが、質問からは、どの時点でマクロを動かすか読み取れないようです。

     こちらは何かのきっかけで、D列をC列にコピーしてD列を消去するくらいでし
     ょうか。

質問1:A列に入力した時点で判断して10だったらB列の値を加算する。
質問2:セルF2をクリックしたらD列をC列に移す。
と私なりに解釈して作った例です。シートのコードウインドウに貼り付けます。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  '/// (質問1)A1からA30ならB列を加算 ///
  Dim rw As Long '行カウンタ

  On Error GoTo ErrorHandler

  '単一セルを操作
  If Target.Count = 1 Then
    If Not Union(Target, Range("A1:A30")) Is Nothing Then
      '値が10だったら
      If Target.Value = 10 Then
        Application.EnableEvents = False 'イベントが発生しないようにする
        Target.Value = Target.Value + Range("B" & Target.Row)
        Application.EnableEvents = True
      End If
    End If
  End If

  Exit Sub

ErrorHandler:
  Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
  '/// (質問2)F2をクリックすればD列をC列に移す ///
  Dim rw As Long '行カウンタ

  On Error GoTo ErrorHandler

  '単一セルを操作
  If Target.Count = 1 Then
    If Target.Address = "$F$2" Then
      '数値が入力されていたら
      If WorksheetFunction.Count(Range("D1:D7")) > 0 Then
        Application.EnableEvents = False
        'D列の値をC列に書く
        For rw = 1 To 7
          Cells(rw, 3) = Cells(rw, 4)
        Next
        'D列をクリア
        Range("D1:D7").ClearContents
        Application.EnableEvents = True
      End If
    End If
  End If

  Exit Sub

ErrorHandler:
  Application.EnableEvents = True
End Sub
    • good
    • 0

セルに式を入れると自動的に値を入れる方法については


下記の手順でお願します。
エクセルを開く
VBEを開く
プロジェクトから任意のシートをダブルクリック
コードウィンドウの上にある2つのリストボックスの
左側でWorksheetを選択
右側でChangeを選択
すると下のものが作られるので
Private Sub Worksheet_Change(ByVal Target As Excel.Range)

End Sub
これに以下のものを入れてください。
If Target.Address <> "$A$1" Then Exit Sub
Range("B1") = Range("B1") + Val(Range("A1").Value)
Range("A1").Activate
A1セルが変更された時のみ対象にしています。
B1にA1を足します。
「イベント」というものです。他には下のものがあります。
1.値が変更された時
2.シートがアクティブになった時
3.ダブルクリック
4.右クリック
5.再計算時
6.非アクティブになった時
7.選択範囲を変えた時
詳しくは、解説書などの「イベント」の欄で。
他の質問についてはボタンを使わないことが
重要だとするとこの応用で
A1のみを対象とせず、シート全体が対象であれば
何か変える、移動するだけでマクロが動くので
ボタンを必要とせず、数式ではなくマクロの記述が
使えるのではないでしょうか。
    • good
    • 0

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