Excel VBA質問箱 IV

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

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


1608 / 13644 ツリー ←次へ | 前へ→

【73157】VBAで計算式入りセルの値を取得したい かなたん 12/11/22(木) 9:17 質問[未読]
【73158】Re:VBAで計算式入りセルの値を取得したい Yuki 12/11/22(木) 10:02 発言[未読]
【73159】Re:VBAで計算式入りセルの値を取得したい かなたん 12/11/22(木) 10:24 発言[未読]
【73160】Re:VBAで計算式入りセルの値を取得したい ウッシ 12/11/22(木) 11:13 回答[未読]
【73161】Re:VBAで計算式入りセルの値を取得したい かなたん 12/11/22(木) 11:14 発言[未読]
【73162】Re:VBAで計算式入りセルの値を取得したい ウッシ 12/11/22(木) 11:22 回答[未読]
【73163】Re:VBAで計算式入りセルの値を取得したい かなたん 12/11/22(木) 11:28 発言[未読]
【73165】Re:VBAで計算式入りセルの値を取得したい ウッシ 12/11/22(木) 12:21 回答[未読]
【73166】Re:VBAで計算式入りセルの値を取得したい かなたん 12/11/22(木) 13:09 発言[未読]
【73167】Re:VBAで計算式入りセルの値を取得したい ウッシ 12/11/22(木) 15:18 回答[未読]
【73168】Re:VBAで計算式入りセルの値を取得したい かなたん 12/11/22(木) 16:37 回答[未読]
【73169】Re:VBAで計算式入りセルの値を取得したい ウッシ 12/11/22(木) 17:12 回答[未読]
【73170】Re:VBAで計算式入りセルの値を取得したい かなたん 12/11/22(木) 17:40 発言[未読]
【73171】Re:VBAで計算式入りセルの値を取得したい ウッシ 12/11/22(木) 18:48 回答[未読]
【73173】Re:VBAで計算式入りセルの値を取得したい かなたん 12/11/22(木) 20:33 質問[未読]
【73174】Re:VBAで計算式入りセルの値を取得したい ウッシ 12/11/22(木) 22:09 回答[未読]
【73175】Re:VBAで計算式入りセルの値を取得したい かなたん 12/11/22(木) 22:31 回答[未読]
【73176】Re:VBAで計算式入りセルの値を取得したい ウッシ 12/11/22(木) 22:43 回答[未読]
【73177】Re:VBAで計算式入りセルの値を取得したい かなたん 12/11/22(木) 22:56 お礼[未読]

【73157】VBAで計算式入りセルの値を取得したい
質問  かなたん  - 12/11/22(木) 9:17 -

引用なし
パスワード
   計算式 =B5*1+E5*0.5+H5*0.5+K5*1+N5*0.2+Q5*0.1+T5*0.5 が入っているセルがあります。
そのセルの値(計算結果)をVBAで取得して利用したいと思っています。
その計算もVBAで行えばこのようなことで悩む必要はないですが、その計算結果は値を入れただけで出てくる方がいいと思っているため、このような方法を探しています。

その計算結果をどのように利用したいかというのは、
とあるセルをその値で割ったその値によってセルの色を変えるということです。
このマクロはすでに自分で作ってあります。
--------------------------------------------------------------------------
Sub ランク表示()
  On Error GoTo error_message
  Dim CP As Integer
  CP = Range("Z4").Value 'ここでEmpty値になってしまう
  Dim r As Integer
  r = 9
  Do Until Cells(r, 1) = ""
    If Cells(r, 1) / CP < 0.8 Then
      Rows(r).Interior.ColorIndex = 5
    ElseIf Cells(r, 1) / CP < 1 Then
      Rows(r).Interior.ColorIndex = 8
    ElseIf Cells(r, 1) / CP < 1.4 Then
      Rows(r).Interior.ColorIndex = 4
    ElseIf Cells(r, 1) / CP < 2 Then
      Rows(r).Interior.ColorIndex = 6
    ElseIf Cells(r, 1) / CP < 3 Then
      Rows(r).Interior.ColorIndex = 46
    Else
      Rows(r).Interior.ColorIndex = 3
    End If
  Loop
error_message: 'そのため、Integerに代入することができずにここに来てしまう
  MsgBox "数値が入力されていない項目があるようです。", vbOKOnly, "ランク表示"
  End
End Sub
--------------------------------------------------------------------------
VBAで改めてその計算をさせるというのも考えましたが、せっかく計算結果が出ているのにもう一度計算させるのも・・・

それか、条件付き書式かなにかでそのマクロの代わりができるのであれば、そちらでもかまいません。
最初はその方法を考えていたのですが、とあるセルというのが200以上あり、1つ1つしかも複数の設定をするというのも大変で・・・

よろしくお願いします。

【73158】Re:VBAで計算式入りセルの値を取得したい
発言  Yuki  - 12/11/22(木) 10:02 -

引用なし
パスワード
   ▼かなたん さん:
>Sub ランク表示()
>  On Error GoTo error_message
>  Dim CP As Integer
>  CP = Range("Z4").Value 'ここでEmpty値になってしまう
                ↑ は数値が入っていますか?
   CP = Val(Range("Z4").Value) とでもされたら如何ですか。

>  Dim r As Integer
>  r = 9

   下記ループは永遠に回り続けますよ

>  Do Until Cells(r, 1) = ""
>    If Cells(r, 1) / CP < 0.8 Then
>      Rows(r).Interior.ColorIndex = 5
>    ElseIf Cells(r, 1) / CP < 1 Then
>      Rows(r).Interior.ColorIndex = 8
>    ElseIf Cells(r, 1) / CP < 1.4 Then
>      Rows(r).Interior.ColorIndex = 4
>    ElseIf Cells(r, 1) / CP < 2 Then
>      Rows(r).Interior.ColorIndex = 6
>    ElseIf Cells(r, 1) / CP < 3 Then
>      Rows(r).Interior.ColorIndex = 46
>    Else
>      Rows(r).Interior.ColorIndex = 3
>    End If
     r = r + 1 これを追加しなくては駄目ですね。
>  Loop
>error_message: 'そのため、Integerに代入することができずにここに来てしまう
>  MsgBox "数値が入力されていない項目があるようです。", vbOKOnly, "ランク表示"
>  End
>End Sub

【73159】Re:VBAで計算式入りセルの値を取得したい
発言  かなたん  - 12/11/22(木) 10:24 -

引用なし
パスワード
   ▼Yuki さん:
>   CP = Val(Range("Z4").Value) とでもされたら如何ですか。

それでもエラー扱いを受けてしまいました。
実は見直してみるとエラーでなくてもエラーメッセージを通るようになってしまっていたため、Loopの後にEndを入れてみたのですが、結果は同じでした。
最初も今回も代入に失敗しているせいでエラーになっているのだと思っていたら、きちんと調べてみるとCPが0だったりして除算のところでエラーを起こしてしまっているようでした。
Z4に入れている計算式で参照しているセルにはきちんと数値を入れていて、シート上ではZ4には警告等はなく数値が出ています。
251×1+96×0.5+85×0.5+220×1+55×0.2+105×0.1+144×0.5+53×0.1=655
この計算結果655(参照しているセルの値によって変化)をCPに代入したいのですが・・・

>   下記ループは永遠に回り続けますよ
>     r = r + 1 これを追加しなくては駄目ですね。

うっかり忘れていました・・・
指摘ありがとうございます。

【73160】Re:VBAで計算式入りセルの値を取得したい
回答  ウッシ  - 12/11/22(木) 11:13 -

引用なし
パスワード
   こんにちは

Dim CP As Double

としてみては?

251×1+96×0.5+85×0.5+220×1+55×0.2+105×0.1+144×0.5+53×0.1=655

って、答えが違う感じなんですけど?

53×0.1 が入ってないですね。

処理してる対象セルは全てアクティブシートのセルですか?

【73161】Re:VBAで計算式入りセルの値を取得したい
発言  かなたん  - 12/11/22(木) 11:14 -

引用なし
パスワード
   ▼ウッシ さん:
>Dim CP As Double
>としてみては?

Dim CP As Double
CP = Val(Range("Z4").Value)
でも
Dim CP As Double
CP = Range("Z4").Value
でも「0で除算しました」でした。

>251×1+96×0.5+85×0.5+220×1+55×0.2+105×0.1+144×0.5+53×0.1=655
>って、答えが違う感じなんですけど?

すいません。
Z4に入れていた式が間違って(一部不足)いました。
=B5*1+E5*0.5+H5*0.5+K5*1+N5*0.2+Q5*0.1+T5*0.5
ではなく、正しくは
=B5*1+E5*0.5+H5*0.5+K5*1+N5*0.2+Q5*0.1+T5*0.5+W5*1
でした。
なので、正しい計算結果は
251×1+96×0.5+85×0.5+220×1+55×0.2+105×0.1+144×0.5+53×0.1=708
でした。
指摘ありがとうございます。

【73162】Re:VBAで計算式入りセルの値を取得したい
回答  ウッシ  - 12/11/22(木) 11:22 -

引用なし
パスワード
   こんにちは

Range("Z4")
Cells(r, 1)

というのはそれぞれ何というシート上のセルですか?

【73163】Re:VBAで計算式入りセルの値を取得したい
発言  かなたん  - 12/11/22(木) 11:28 -

引用なし
パスワード
   ▼ウッシ さん:

>Range("Z4")
>Cells(r, 1)
>というのはそれぞれ何というシート上のセルですか?

どちらもシート1枚目(シート名 分布表)にあるセルです。

【73165】Re:VBAで計算式入りセルの値を取得したい
回答  ウッシ  - 12/11/22(木) 12:21 -

引用なし
パスワード
   こんにちは

Sub ランク表示()
  Dim CP As Double
  Dim r As Long
  On Error GoTo error_message
  With Worksheets("分布表")
    CP = .Range("Z4").Value 'ここでEmpty値になってしまう
    r = 9
    Do Until .Cells(r, 1) = ""
      If .Cells(r, 1) / CP < 0.8 Then
        .Rows(r).Interior.ColorIndex = 5
      ElseIf .Cells(r, 1) / CP < 1 Then
        .Rows(r).Interior.ColorIndex = 8
      ElseIf .Cells(r, 1) / CP < 1.4 Then
        .Rows(r).Interior.ColorIndex = 4
      ElseIf .Cells(r, 1) / CP < 2 Then
        .Rows(r).Interior.ColorIndex = 6
      ElseIf .Cells(r, 1) / CP < 3 Then
        .Rows(r).Interior.ColorIndex = 46
      Else
        .Rows(r).Interior.ColorIndex = 3
      End If
      r = r + 1
    Loop
  End With
  Exit Sub
error_message: 'そのため、Integerに代入することができずにここに来てしまう
  MsgBox "数値が入力されていない項目があるようです。", vbOKOnly, "ランク表示"
End Sub

こうしても変わりないですか?

【73166】Re:VBAで計算式入りセルの値を取得したい
発言  かなたん  - 12/11/22(木) 13:09 -

引用なし
パスワード
   それでもエラーとなり、原因は「0で除算しました」でした。

【73167】Re:VBAで計算式入りセルの値を取得したい
回答  ウッシ  - 12/11/22(木) 15:18 -

引用なし
パスワード
     With Worksheets("分布表")
    MsgBox .Range("Z4").Value
    CP = .Range("Z4").Value 'ここでEmpty値になってしまう

とすると、メッセージボックスで何と表示されますか?

【73168】Re:VBAで計算式入りセルの値を取得したい
回答  かなたん  - 12/11/22(木) 16:37 -

引用なし
パスワード
   文字など何も出なくて真っ白です。
デバッグしてみたときにRange("Z4").ValueがEmpty値だからだと思います。

【73169】Re:VBAで計算式入りセルの値を取得したい
回答  ウッシ  - 12/11/22(木) 17:12 -

引用なし
パスワード
   >デバッグしてみたときにRange("Z4").ValueがEmpty値だからだと思います。

数式がセットされているんですよね?

Sub test()
  With Worksheets("分布表")
    MsgBox .Range("Z4").Formula
    MsgBox .Range("Z4").Value
  End With
End Sub

とすると数式と値は表示されますか?

【73170】Re:VBAで計算式入りセルの値を取得したい
発言  かなたん  - 12/11/22(木) 17:40 -

引用なし
パスワード
   ▼ウッシ さん:

>    MsgBox .Range("Z4").Formula
>    MsgBox .Range("Z4").Value

どちらとも文字などはなく真っ白です。

【73171】Re:VBAで計算式入りセルの値を取得したい
回答  ウッシ  - 12/11/22(木) 18:48 -

引用なし
パスワード
   ▼かなたん さん:
>▼ウッシ さん:
>
>>    MsgBox .Range("Z4").Formula
>>    MsgBox .Range("Z4").Value
>
>どちらとも文字などはなく真っ白です。

という事は、Worksheets("分布表").Range("Z4")には計算式も値も入っていないと判断するしかないです。

【73173】Re:VBAで計算式入りセルの値を取得したい
質問  かなたん  - 12/11/22(木) 20:33 -

引用なし
パスワード
   ▼ウッシ さん:
>という事は、Worksheets("分布表").Range("Z4")には計算式も値も入っていないと判断するしかないです。

そのようなはずはないのですが・・・
きちんと計算結果がZ4に表示されていますし。
最初に文字が入っていたときは#VALUEのエラーも出てましたし。

アップローダに問題のExcelをアップして―と思いましたが、"迷惑投稿防止のため、URLの入力を制限しています。"とのことで、"ERROR:本文に禁止語句が含まれています。"となり投稿することができませんでした。
h抜きか何かで載せようとも思いましたが、それは問題にならないでしょうか?

【73174】Re:VBAで計算式入りセルの値を取得したい
回答  ウッシ  - 12/11/22(木) 22:09 -

引用なし
パスワード
   こんばんは

http
とかにすれば大丈夫ですよ。

実物見させてもらって理由が分かればいいんですけど・・・

【73175】Re:VBAで計算式入りセルの値を取得したい
回答  かなたん  - 12/11/22(木) 22:31 -

引用なし
パスワード
   ▼ウッシ さん:

>http
>とかにすれば大丈夫ですよ。
>実物見させてもらって理由が分かればいいんですけど・・・

こちらにあるモンスター分布表というExcelブックというのが実物です。
http://ux.getuploader.com/mabinogi_monster/
私は普段Excel2007を使っているので拡張子はxlsmですが、ウッシさんのバージョンを聞いていなかったので、1999-2003でも開くxls版も用意しておきました。

これで解決できるとよいのですが・・・

【73176】Re:VBAで計算式入りセルの値を取得したい
回答  ウッシ  - 12/11/22(木) 22:43 -

引用なし
パスワード
   こんばんは

思った通りでした。

参照すべきセルは、Range("Z5")ですよ。

【73177】Re:VBAで計算式入りセルの値を取得したい
お礼  かなたん  - 12/11/22(木) 22:56 -

引用なし
パスワード
   ▼ウッシ さん:
>こんばんは
>
>思った通りでした。
>
>参照すべきセルは、Range("Z5")ですよ。

あー・・・
作ってから実行させるまでに行を1つ増していたというのに、Range("Z4")を修正するのをすっかり忘れていました・・・
こんなミスのために今まですいませんでした・・・
無事やりたいことをすることができました。
ありがとうございました。

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