![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.10ベストアンサー
- 回答日時:
こんばんわ。
マクロ記述ミスがあったようなので訂正させていただきます。Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRow As Integer
myRow = Target.Row
If Target.Address = Range("A" & myRow).Address Then
Target.Offset(0, 3).Value = Target.Offset(0, 2).Value
ElseIf Target.Address = Range("B" & myRow).Address Then
Target.Offset(0, 2).Value = Target.Offset(0, 1).Value
End If
End Sub
それと、#9さんのご回答は1行目だけでしか変化しません。2行目以降に値を入力しても何も起こりません。
ですから、わたしはどの行であっても動作するようにTargetとOffsetを使って#9に書かれている
Range("D1") = Range("C1") を
Target.Offset(0, 3).Value = Target.Offset(0, 2).Value'A列の値が変化した時
Target.Offset(0, 2).Value = Target.Offset(0, 1).Value'B列の値が変化した時
という式で表しているのです。
例えば、A1の値が変化した時
Target.Offset(0, 3).Value = Target.Offset(0, 2).Valueは
Targetは,A1・Offset(0,3)は下に0,右に3進んだセル(D1)・Offset(0,2)は下に0,右に2進んだセル(C1)を表しています。ですから、
この式はRange("D1") = range("C1")と同じ意味になるのです。
A2・A3・・・が変化すれば、Targetの値もA2・A3・・・と変化していきます。
ですから、#9さんが
>A1に1、B1セルに3、C1に=SUM(A1:B1)と入れる
。C1は4になります。A1(-->2に)またはB1(-->4に)を値を変えても、勿論C1は変りますが、D1には値(5とか6)がセットされませんが。
とおっしゃっておりますが、私の式で動かないということは、この方の書かれた式でも動作しないということになります。
#9さんもよく式の意味を理解してから書き込みをされた方が、よろしいかと思います。このように質問者を惑わすようなことになりかねませんので・・・。
No.12
- 回答日時:
#11の方が使われた
Application.WorksheetFunction.Sum(Range(cells(.Row, 1), cells(.Row, 2)))
を使うとエラーがおきてしまうことがあります。マイクロソフトのサポートセンターのサポーターからエクセルのバグでWorksheetFunctionが誤作動を起こしてしまうことがあるために、使わない方がよいという指導を受けたことがありますのでお知らせしておきます。
この式を使うのであれば、
Application.Sum(Range(cells(.Row, 1), cells(.Row, 2)))
を使った方がエラーを出さずに実行できるようです。
#11さんの考え方を利用したサンプルマクロを作ってみました。前回と同じように操作してみて下さい。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRow As Integer
myRow = Target.Row
If Target.Address = Range("A" & myRow).Address _
Or Target.Address = Range("B" & myRow).Address Then
Range("C" & myRow).Value = Application.Sum(Range("A" & myRow & ":" & "B" & myRow))
Range("D" & myRow).Value = Range("C" & myRow).Value
End If
End Sub
回答者の皆様、私のやりたいことは
皆様の教えてくれた方法で実現できました。
心より感謝いたします。ありがとうございました。
多数様よりご回答いただきましたが、
No10、No11の順でポイントとさせていただきます。
この場(No12のお礼欄)を借りて皆様にお知らせします。
No.11
- 回答日時:
マクロが解禁になった?みたいなので・・・
他の方は、C1セルに=SUM(A1:B1)という数式が入力されているのを前提に処理しておられるようなので、
私は、数式を入れないで行う方法を記述します。
1、[Alt]+[F11]を押す。VisialBasicEditerに変更されます。
2、左上にプロジェクトと書いてある中に、
VBAProject(現在のブック名)
└Microsoft Excel Objects
├Sheet1
・・・
└ThisWorkbook
とあると思うので、Sheet1をダブルクリック
3.以下のコードを貼り付ける
***************************この下から*****************************
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
'列指定(A,B列に入力された時に入力された行のC列に結果を表示する
Select Case .Column
Case 1, 2 'A列とB列
Cells(.Row, 3) = Application.WorksheetFunction.Sum(Range(cells(.Row, 1), cells(.Row, 2)))
End Select
End With
End Sub
***************************この上まで***************************
4.[Alt]+[F11]を押す。Excelに戻ります。
5.Sheet1のA列,B列で数値を入力すると合計が表示されます。
参考までに
*-------------------------------------------------------------*
'1つづつ指定
With Target
Select Case .Address(False, False)
Case "A1", "B1" '入力したセルがA1,B1
Range("C1") = Application.WorksheetFunction.Sum(Range("a1:b1"))
Case "A2", "B2" '入力したセルがA2,B2
Range("C2") = Application.WorksheetFunction.Sum(Range("a2"), Range("b2"))
End Select
End With
*-------------------------------------------------------------*
'行列指定(A2~B5に入力された時に入力された行のC列に結果を表示する
With Target
If (.Row >= 2 And .Row <= 5 And (.Column = 1 Or .Column = 2)) Then
Cells(.Row, 3) = Application.WorksheetFunction.Sum(Range(Cells(.Row, 1), Cells(.Row, 2)))
End If
End With
*-------------------------------------------------------------*
Application.WorksheetFunction.Sum Excelの関数を使用する為の記述です。
わかりやすい?ようにExcelの関数を使用してみました。
No.9
- 回答日時:
#8のご回答を追試しましたが思うようになりません
A1に1、B1セルに3、C1に=SUM(A1:B1)と入れる
。C1は4になります。A1(-->2に)またはB1(-->4に)を値を変えても、勿論C1は変りますが、D1には値(5とか6)がセットされませんが。
またWorksheet_Changeは、演算結果で値が代わったケースを捉えてくれないようですね。C1はA1やB1の変化で変るが、TargetはA1かB1のどれか1つということで当たり前ですね。それを考えて、
Private Sub Worksheet_Change(ByVal Target As _ Range)
If Target.Address = "$A$1" Or Target.Address = "$B$1" Then
Range("d1") = Range("c1")
End If
End Sub
マクロはお好みでないところ済みません。
No.8
- 回答日時:
こんばんわ。
実現できないとのことですので、次のように少し変更してみましょう。1.新規ブックを立ち上げ、ALT+F11キーを押してVBE画面を表示させ、画面左上のVBAProjectと書かれている下のSheet1をクリックして表示された右側の白い部分に下記のコードをコピー&ペーストする。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRow As Integer
myRow = Target.Row
If Target.Address <> ActiveSheet.Range("B" & myRow).Address Then Exit Sub
Target.Offset(0, 2).Value = Target.Offset(0, 1).Value
End Sub
・シート1のC列に必要な行数分計算式を入力しておく。
・シート1のA1に3と入力する。
・シート1のB1に4と入力する。
D1に7と表示されるはずです。
これでも何も動作をしない場合は、エクセルのバージョンを教えて下さい。
もしかしたら、シートのチェンジイベントが使えないのかもしれません。その時は、別のサンプルマクロを組んでみたいと思います。何とか貴方様の思ったとおりに動作をする様を体験していただきたいので・・・・。
お手数をおかけいたします。よろしくお願いいたします。
No.7
- 回答日時:
こんばんわ。
#2です。>見た目だけでなく、実際にも「値」とするには、C1をコピーして、カーソルをD1に運び、形式を選択して貼り付けの「値」として貼り付けています。これを自動でやりたいのです。
つまり、D1を選択したときに数式バーに4と表示されるようにしたいということですよね?これを実行ためにはマクロを組む以外に方法はありません。サンプルマクロを組んでみました。次のように操作してみて下さい。
・データの入っているブックを立ち上げ、ALT+F11キーを押してVBE画面を表示させ、画面左上のVBAProjectと書かれている上にマウスポインターを合わせて右クリック後、挿入→クラスモジュールを順にクリックし、表示された右側の白い部分に下記のコードをコピー&ペーストする。
Public WithEvents App As Application
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim myRow As Integer
myRow = Target.Row
If Target.Address <> ActiveSheet.Range("B" & myRow).Address Then Exit Sub
Target.Offset(0, 2).Value = Target.Offset(0, 1).Value
End Sub
・次に画面左上のVBAProjectと書かれている下のThisWorkbookをダブルクリックし、表示された右側の白い部分に下記のコードをコピー&ペーストする。
Dim myClass As New Class1
Private Sub Workbook_Open()
Set myClass.App = Application
End Sub
ここまでの作業が終了したら、1度ブックを保存して終了し、再度ブックを立ち上げます。
操作方法:
A列に適当な数値を入れる
B列に適当な数値を入れる
貴方様のおやりになりたいことが実現していると思います。
不具合・ご不明な点等がございましたら、ご遠慮なくお知らせ下さい。
この回答への補足
誠に有り難うございます。
実は、
教えていただいた手順でやってみましたが 実現できていません。
A1とB1に数値を入れるとC1にA1+B1の「値」がでるものと思われますが、いかんせん、私、基本ができていません。
しばらく勉強して、教えていただいた構文を理解してみます。
No.5
- 回答日時:
eocさんのおっしゃってることを関数でやるのは不可能だと思います。
「関数」を使う限り、数式バーにはその関数を用いた式が入力される
ことになるからです。
マクロを使うしかないと思うのですが。
お役に立てずにすみません。
ご返答有り難うございます。マクロを使うと簡単な内容でしょうか。
今からマクロについて勉強します。
直ぐには理解できないでしょうが、エクセルの解説書など見ながら少しずつ理解したいと思います。
図々しいお願いと思いますが、よろしければマクロでの方法をお教え願えないでしょうか。
構文が長くなるようでしたら、貴方に申し訳ないので結構です。
ご返答有り難うございました。
No.4
- 回答日時:
D1セルに「=C1」と入力するか、C1をコピーして「編集→形式を選択して貼り付け→値」でしょうね。
値をコピーするのでしたら、ショートカットを使う方法もあります。
Ctrl+Cでコピーした後、貼り付け先のセルを選択し、Altを押しながら「E→S→V→Enter」です。
あるいは、「値を貼り付け」ることが多いようでしたら、「ツール→ユーザー設定→コマンド→編集」の中に「値の貼り付け」がありますから、このアイコンをドラッグしてツールボックスの中に入れておけば、次からワンクリックで値をコピーできます。
この回答への補足
早速のご返答有り難うございます。
「編集→形式を選択して貼り付け→値」に相当することを関数で自動にできないでしょうか?
具体的には、
セルA1とセルB1に数値を入れるだけで、C1は=A1+B1を自動で行い、なおかつD1には 数式バーの部分も含めて C1の「値」が入るようにしたいのです。
そんな関数はないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Excel(エクセル) エクセルで、 A1セルに「A」という値、 B1セルに「B」という値が入っています。 どちらも表示形式 5 2023/02/22 23:05
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) Excelについて A1からA12まで、1月〜12月と入力し、 B1からB12の範囲に、C1とD1に 4 2022/05/26 22:48
- Excel(エクセル) エクセルで教えて下さい。 2 2022/05/18 13:00
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- Excel(エクセル) Excel 関数 数式 について 2 2022/09/02 21:45
- Excel(エクセル) エクセルで月末、月初の判定をしたい。 4 2022/05/18 23:22
- Excel(エクセル) エクセルの掛け算 3 2022/12/13 14:49
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
白血球が多いとどんな心配があ...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
至急!尿検査前日にオナニーし...
-
EXCELで条件付き書式で空白セル...
-
甲状腺が腫れているが血液検査...
-
勃起する時って痛いんですか? ...
-
尿検査前日に自慰行為した時の...
-
値が入っているときだけ計算結...
-
2つの数値のうち、数値が小さい...
-
小数点以下を繰り上げたものを...
-
MIN関数で空白セルを無視したい...
-
中出しをするとお腹が痛い・・・。
-
EXCELで式からグラフを描くには?
-
【Excelで「正弦波」のグラフを...
-
ある範囲のセルから任意の値を...
-
エクセルのグラフで、値0のとき...
-
リンク先のファイルを開かなく...
-
これって喉仏ですか? 私は女性...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
白血球が多いとどんな心配があ...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
尿検査の前日は自慰控えたほう...
-
精子が黄色?
-
中出しをするとお腹が痛い・・・。
-
EXCELで条件付き書式で空白セル...
-
口の中に黒い血の塊
-
これって喉仏ですか? 私は女性...
-
2つの数値のうち、数値が小さい...
-
納豆食べた後の尿の納豆臭は何故?
-
EXCELで式からグラフを描くには?
-
小数点以下を繰り上げたものを...
-
excelでsin二乗のやり方を教え...
-
エクセル指定した範囲からラン...
おすすめ情報