Excel VBA質問箱 IV

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

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


9343 / 13646 ツリー ←次へ | 前へ→

【27852】計算根拠を表示したまま別のセルへ答えを出す。 tsumori 05/8/22(月) 13:03 質問[未読]
【27855】Re:計算根拠を表示したまま別のセルへ答え... Kein 05/8/22(月) 13:21 回答[未読]
【27857】Re:計算根拠を表示したまま別のセルへ答え... tsumori 05/8/22(月) 14:59 質問[未読]
【27861】Re:計算根拠を表示したまま別のセルへ答え... Kein 05/8/22(月) 16:07 回答[未読]
【27869】Re:計算根拠を表示したまま別のセルへ答え... tsumori 05/8/22(月) 17:45 質問[未読]
【27871】Re:計算根拠を表示したまま別のセルへ答え... Kein 05/8/22(月) 18:00 発言[未読]
【27873】Re:計算根拠を表示したまま別のセルへ答え... tsumori 05/8/22(月) 18:34 発言[未読]
【27881】Re:計算根拠を表示したまま別のセルへ答え... tsumori 05/8/23(火) 9:45 質問[未読]
【27918】もう少し自己努力してみます tsumori 05/8/24(水) 11:23 お礼[未読]

【27852】計算根拠を表示したまま別のセルへ答えを...
質問  tsumori  - 05/8/22(月) 13:03 -

引用なし
パスワード
   はじめまして。VBAを初めたての初心者です。
A列に計算式を入力して他のセルがアクティブになったらB列にその計算式の答えを表示し、四捨五入を、するということはVBAでできるのでしょうか?
またどのようにプログラムを組めば一番良いのでしょうか?
皆様の御力添え宜しくお願いします。

 A列    B列
2.5*3    7.5

【27855】Re:計算根拠を表示したまま別のセルへ答...
回答  Kein  - 05/8/22(月) 13:21 -

引用なし
パスワード
   処理対象シートのシートモジュールへ、以下のマクロを入れて下さい。

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
   If .Column > 1 Then Exit Sub
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
   Application.EnableEvents = False
   If (IsError(.Value)) Or (Left(.Formula, 1) <> "=") Then
     MsgBox "その数式の結果はエラーです", 48
     .ClearContents
   Else
     .Offset(, 1).Value = .Value
     .Formula = " " & .Formula
   End If
  End With
  Application.EnableEvents = True
End Sub

A列の任意のセルへ「必ず数式になるような式(例えば頭に"="が無ければ、結果が
出る式と思っていても数式としての条件を満たしていないのでダメ)」を入力して
みて下さい。結果がエラーになる場合はメッセージを出してクリアします。
きちんと計算結果が出る式なら、そのセルの先頭に " " を入れて数式を表示し、
右隣りのセルに計算結果を表示します。

【27857】Re:計算根拠を表示したまま別のセルへ答...
質問  tsumori  - 05/8/22(月) 14:59 -

引用なし
パスワード
   Keinさんさっそくのご回答ありがとうございます。
勉強させていただいております!

If .Column > 1 Then Exit Sub
If .Count > 1 Then Exit Sub
は、1列目(A列)を示すと考えていいんですよね?

If IsEmpty(.Value) Then Exit Sub
はどういったいみなんでしょう?

ところでA列にそのまま計算式を(3+2)入力して=は入れずにエンターを押すと隣のB列のセルにA列の式の答え(5)が表示するといったことはできないでしょうか?
無理難題言ってすみませんがお願いします。

【27861】Re:計算根拠を表示したまま別のセルへ答...
回答  Kein  - 05/8/22(月) 16:07 -

引用なし
パスワード
   >If IsEmpty(.Value) Then Exit Sub
もしイベント発生対象のセルが未入力、またはクリアによって未入力となった場合、
IsEmpty関数が True を返しますから、それを判定してマクロを中止しろ、という
コードです。IsEmpty関数をヘルプで調べてみて下さい。あと "〜 = True Then"
と比較する値は、True の場合は省略できることも覚えて下さい。

>=は入れずにエンターを押す
ということなら、以下のコードと変更して下さい。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim St As String
 
  With Target
   If .Column > 1 Then Exit Sub
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
   If Left(.Formula, 1) <> "=" Then
     St = "=" & .Value
   Else
     St = .Value
   End If
   Application.EnableEvents = False
   With .Offset(, 1)
     .Formula = St
     If IsError(.Value) Then
      MsgBox "その数式の結果はエラーです", 48
      .Offset(, -1).Resize(, 2).ClearContents
     Else
      .Value = .Value
     End If
   End With
  End With
  Application.EnableEvents = True
End Sub

【27869】Re:計算根拠を表示したまま別のセルへ答...
質問  tsumori  - 05/8/22(月) 17:45 -

引用なし
パスワード
   Keinさんご返答本当に感謝です。質問攻めで恐縮ですm(_ _)m

>〜 = True Then"と比較する値は、True の場合は省略できること
マクロを実行しても良いと言う事だからFalseのみ設定すればよいと言うことですよね?

又、これらを例えばA,C,Eの列を計算式にB,D,Fをする場合、
式の欄に入力間違いをしてエンターを押してしまった場合の処理
(例) A   B
   6++     →エンターを押すとエラーが出る
等の問題に挑戦してみようと思います。
聞いてばかりで申し訳ないのですが、お時間があるときでかまいませんので
ご教授ください。

【27871】Re:計算根拠を表示したまま別のセルへ答...
発言  Kein  - 05/8/22(月) 18:00 -

引用なし
パスワード
   >マクロを実行しても良いと言う事だからFalseのみ設定すればよい
の意味がよく分かりません。IsEmpty関数は、対象が空白の場合 True になります。
この戻り値が False の場合なら、空白セルではないと判断できるのでマクロを実行
することになりますが、そうすると処理のコードを全部
If IsEmpty(Target.Value) Then
  ここへ入れる
End If
ことになり、処理部分のコードが長くなると可読性が悪くなります。なので
"マクロの処理を継続させる条件" を判定するより、中止する条件を冒頭に持ってきて
それにひっかかった時点で終わらせてしまう、という書き方の方が分かりやすいのです。
分かりますか・・?

>A,C,Eの列を計算式にB,D,Fをする場合
その場合は、入力したセルの列を Select Case で判定します。つまり
If IsEmpty(.Value) Then Exit Sub の下に

Select Case .Column
  Case 1, 3, 5
  Case Else: Exit Sub
End Select

を、追加しておけば良いのです。

【27873】Re:計算根拠を表示したまま別のセルへ答...
発言  tsumori  - 05/8/22(月) 18:34 -

引用なし
パスワード
   すみません。「A,C,Eの列を計算式にB,D,Fをする場合」では無く

「A,C,Eの列を計算式にB,D,Fを回答欄にそれぞれする場合」
の誤りでした。申し訳ないです。

【27881】Re:計算根拠を表示したまま別のセルへ答...
質問  tsumori  - 05/8/23(火) 9:45 -

引用なし
パスワード
   If IsEmpty(.Value) Then Exit Subの後に

Select Case .Column
  Case 1, 3, 5
  Case Else: Exit Sub
End Select
を入れてみたのですが、C,Eに計算をいれたらD,Fにそれぞれ答えが
入らないみたいです。

後、計算式を入力する列(A列)に(6++)等間違った式を入れると
デバックがでてきてどうしても先に進めません。

If (IsError(.Value)) Then
   MsgBox "その数式の結果はエラーです", 48
   .Offset(, -1).Resize(, 2).ClearContents
  Else
   .Value = .Value
  End If

で情報関数かなにかを入れてやった方が良いのでしょうか?

【27918】もう少し自己努力してみます
お礼  tsumori  - 05/8/24(水) 11:23 -

引用なし
パスワード
   Keinさんいろいろとアドバイスいただきありがとうございました。
すればするほど、いろんなことがしてみたくなりますね。
もう少し自分で、努力してみます。又どうしてもわからない時に
質問するようにしてみようと思います。ではまた・・・

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