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

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

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

このQ&Aに関連する最新のQ&A

A 回答 (3件)

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


下記の手順でお願します。
エクセルを開く
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

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



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

(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

1.SUMIF関数でできます。


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

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

このQ&Aと関連する良く見られている質問

Qエクセル グラフの軸の最小値最大値をセル参照させるマクロ

エクセルでグラフを作成し,軸の最小値,最大値をそれぞれセルA1,セルA2で参照させるには,類似質問で以下のマクロが必要だとわかりました。
 ただし,このマクロを実行するには,シート上のグラフを選択してから,Alt+F8キーを押して,マクロダイアログボックスを起動させて,「実行」ボタンを押すという過程が必要です。

Sub 最大最少値()

With ActiveChart.Axes(xlValue)
.MinimumScale = Range("A1").Value '最小値
.MaximumScale = Range("A2").Value '最大値
End With
End Sub


 この煩瑣な過程を経ずに,マクロボタン一発で同様の処理を行いたいと思い,2行目のグラフ選択のコードを加えて,以下のマクロを作成してみました。

Sub 最大最少値()

ActiveSheet.ChartObjects.Select

With ActiveChart.Axes(xlValue)
.MinimumScale = Range("A1").Value '最小値
.MaximumScale = Range("A2").Value '最大値
End With
End Sub

 ところが,「オブジェクト変数または With ブロック変数が設定されていません」というデバッグが表示され,3行目の With ActiveChart.Axes(xlValue) 部がエラーとなり,マクロが実行できません。

 これを解決するには,どうしたらよいでしょうか。ご教授ください。

エクセルでグラフを作成し,軸の最小値,最大値をそれぞれセルA1,セルA2で参照させるには,類似質問で以下のマクロが必要だとわかりました。
 ただし,このマクロを実行するには,シート上のグラフを選択してから,Alt+F8キーを押して,マクロダイアログボックスを起動させて,「実行」ボタンを押すという過程が必要です。

Sub 最大最少値()

With ActiveChart.Axes(xlValue)
.MinimumScale = Range("A1").Value '最小値
.MaximumScale = Range("A2").Value '最大値
End With
...続きを読む

Aベストアンサー

アクティブシート上に複数のグラフがありませんか?複数ある場合は、そのうちのどれをSelectするかを指定する必要があるはずです
例えば、こんな感じで、どうでしょう?

ActiveSheet.ChartObjects(1).Select

Qマクロについて 複数セルの値を別シートの任意のセルにコピー貼り付けしたい

タイトルのとおり、シート1の離れた複数セルのそれぞれの値をシート2の任意のセルに貼り付けたいと考えました。
いろいろネットで調べましたが、結果、下記のようなものはできました。

Sub 貼り付け()
  Dim rc As Range
  Dim rp As Range
  Dim i As Long
  
  Set rc = Sheets("Sheet1").Range("A1, B1, C1, D1, F1")
  Set rp = Sheets("Sheet2").Range("E1, F2, G3, B4, D4")
  Sheets(rp.Parent.Name).Select
  For i = 1 To rc.Areas.Count
    rc.Areas(i).Copy
    rp.Areas(i).Select
    ActiveSheet.Paste link:=True
  Next i
  Application.CutCopyMode = False
End Sub

ですが、これではリンクの貼り付けになってしまうため、値の貼り付けをどうしたらできるか考えております。
こちらは、マクロに関してまったくの初心者です。いろいろ調べて見た目の結果、このマクロが一番望んでいたものに近かったので試してみました。が、値の貼り付けにはならないので、どうしたら値の貼り付けができるか教えていただけませんでしょうか?

これから、もっとマクロを勉強したいと考えております。
解説みたいなものも一緒にいただけるとありがたいです。

よろしくお願いします。

タイトルのとおり、シート1の離れた複数セルのそれぞれの値をシート2の任意のセルに貼り付けたいと考えました。
いろいろネットで調べましたが、結果、下記のようなものはできました。

Sub 貼り付け()
  Dim rc As Range
  Dim rp As Range
  Dim i As Long
  
  Set rc = Sheets("Sheet1").Range("A1, B1, C1, D1, F1")
  Set rp = Sheets("Sheet2").Range("E1, F2, G3, B4, D4")
  Sheets(rp.Parent.Name).Select
  For i = 1 To rc.Areas.Count
    rc.Areas(i).Copy
   ...続きを読む

Aベストアンサー

こんにちは!
せっかくコードをお考えのようなので別案はお望みではないかもしれませんが、
コピー&ペーストではなく、単に値の表示だけで良いと思います。

Sub Sample1()
Dim i As Long
Dim myAry1 As Variant, myAry2 As Variant

myAry1 = Array("A1", "B1", "C1", "D1", "F1")
myAry2 = Array("E1", "F2", "G3", "B4", "D4")
For i = 0 To UBound(myAry1)
Worksheets("Sheet2").Range(myAry2(i)).Value = Worksheets("Sheet1").Range(myAry1(i)).Value
Next i
End Sub

こんな感じでも大丈夫だと思います。

※ 今回は対象セルが少ないので、オーソドックスにコツコツやるのであれば

Sub Sample2()
Dim wS As Worksheet
Set wS = Worksheets("Sheet1")
With Worksheets("Sheet2")
.Range("E1") = wS.Range("A1")
.Range("F2") = wS.Range("B1")
.Range("G3") = wS.Range("C1")
.Range("B4") = wS.Range("D1")
.Range("D4") = wS.Range("F1")
End With
End Sub

といった感じですかね。m(_ _)m

こんにちは!
せっかくコードをお考えのようなので別案はお望みではないかもしれませんが、
コピー&ペーストではなく、単に値の表示だけで良いと思います。

Sub Sample1()
Dim i As Long
Dim myAry1 As Variant, myAry2 As Variant

myAry1 = Array("A1", "B1", "C1", "D1", "F1")
myAry2 = Array("E1", "F2", "G3", "B4", "D4")
For i = 0 To UBound(myAry1)
Worksheets("Sheet2").Range(myAry2(i)).Value = Worksheets("Sheet1").Range(myAry1(i)).Value
Nex...続きを読む

Qセルをダブルクリックすると、不特定のフォルダ内にある、セルの値を含む名前のファイルが開くマクロを教えて下さい。

マクロ初心者です。
いろいろ検索してみましたが、見つけられなかったので教えて下さい。

セルをダブルクリックすると、そのセルの値を含むファイルが開くようにしたいのですが、ファイル名はセルの値と完全に一致してはいません。但し、必ずセルの値でファイル名は始まります。
例: セルの値="A"
   開きたいファイル名は= 
"AA 12345987.xls"とか"BCBB 657.xls
開きたいファイルは、C:\ww\001、C:\ww\022、C:\ww\303、、、いずれかのフォルダ内にあります。 C:\wwまでは同じです。

Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
を使って、特定フォルダ内にある、セルの値と完全に一致する名前のファイルを開く方法は、検索をくりかえして見つけることができました。

ファイルが存在するパスを特定できず、
ファイル名が、セルの値と完全には一致していないファイルを自動的に開く方法がありましたら、教えて下さい。お願いします。

マクロ初心者です。
いろいろ検索してみましたが、見つけられなかったので教えて下さい。

セルをダブルクリックすると、そのセルの値を含むファイルが開くようにしたいのですが、ファイル名はセルの値と完全に一致してはいません。但し、必ずセルの値でファイル名は始まります。
例: セルの値="A"
   開きたいファイル名は= 
"AA 12345987.xls"とか"BCBB 657.xls
開きたいファイルは、C:\ww\001、C:\ww\022、C:\ww\303、、、いずれかのフォルダ内にあります。 C:\ww...続きを読む

Aベストアンサー

>ファイル名が、セルの値と完全には一致していないファイルを自動的に開く
部分一致しているBookを全て開くと言う事でしょうか?

QエクセルVBA、指定のセルの値を入力すると自動でマクロを起動するようにしたのですが、同じ値の場合は

マクロを起動しないようにしたいです。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$2" Then Call マクロ1
End Sub

上記のコードでマクロを起動出来るようになったのですが、

最初に指定のセル("$D$2")に1と入力するとマクロが起動します。
次にまた1と入力するともう1度マクロが起動します。

これを同じ値を入力した場合はマクロ起動はせず、

”空白状態から値が入力された場合” もしくは "入力された値が違う値に変更された場合” 

とするには、どう記述すれば良いでしょうか?

宜しくお願いします。

Aベストアンサー

元の値をどこかに保存してそれと比較することになります。
今回はセルが1つだけなので、以下のようにパブリック変数に代入するのが良いと思いますが、多い場合は比較用のシートを作ることになると思います。

-----------------------------------------------------------------------
次を標準モジュールに(「Sub」…「End Sub」の外に記入)
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Public 元値 As Variant
-----------------------------------------------------------------------

-----------------------------------------------------------------------
次を対象のシートモジュールに
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Worksheet_Activate()
元値 = Range("D2").Value
End Sub
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = 元値 Then Exit Sub
元値 = Target.Value
If Target.Address = "$D$2" Then Call マクロ1
End Sub
-----------------------------------------------------------------------

元の値をどこかに保存してそれと比較することになります。
今回はセルが1つだけなので、以下のようにパブリック変数に代入するのが良いと思いますが、多い場合は比較用のシートを作ることになると思います。

-----------------------------------------------------------------------
次を標準モジュールに(「Sub」…「End Sub」の外に記入)
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Public 元値 As Variant
---------------------------------------------------------------------...続きを読む

Q【Excelの値が入っていないセルだけセルに色を付ける方法を教えてください】 また値が入っているセル

【Excelの値が入っていないセルだけセルに色を付ける方法を教えてください】

また値が入っているセルだけ色付けする方法も合わせて教えてください。

Aベストアンサー

セルの条件付書式で、セル=「値の条件」であるか否か、の判断で、
セルの色設定をすればよいです。


人気Q&Aランキング

おすすめ情報