Excel VBA質問箱 IV

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

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


5680 / 13645 ツリー ←次へ | 前へ→

【49418】教えてください m(__)m prolinea 07/6/4(月) 20:25 質問[未読]
【49419】Re:教えてください m(__)m ponpon 07/6/4(月) 20:31 発言[未読]
【49420】Re:教えてください m(__)m prolinea 07/6/4(月) 20:43 質問[未読]
【49426】Re:教えてください m(__)m ponpon 07/6/4(月) 23:15 発言[未読]
【49506】Re:教えてください m(__)m prolinea 07/6/7(木) 21:43 お礼[未読]
【49508】Re:教えてください m(__)m りん 07/6/8(金) 3:22 発言[未読]
【49509】Re:教えてください m(__)m ichinose 07/6/8(金) 6:51 発言[未読]
【49510】Re:教えてください m(__)m 注意 07/6/8(金) 8:41 発言[未読]

【49418】教えてください m(__)m
質問  prolinea  - 07/6/4(月) 20:25 -

引用なし
パスワード
   VBAで特定のシートに対しLOOKUP関数を使うにはどうすればいいのでしょうか?

【49419】Re:教えてください m(__)m
発言  ponpon  - 07/6/4(月) 20:31 -

引用なし
パスワード
   ▼prolinea さん:
>VBAで特定のシートに対しLOOKUP関数を使うにはどうすればいいのでしょうか?

質問が漠然としていてよくわかりませんが、
手動でできるならやりたいことをマクロの記録でなされたら、
一応のコードができると思いますが・・・

【49420】Re:教えてください m(__)m
質問  prolinea  - 07/6/4(月) 20:43 -

引用なし
パスワード
   シート1(表引き数字)、シート2(計算結果表示用)

FUNCTION テストはシート2から呼び出される

FUNCTION テスト(区別,期間,金額)
   セレクト CASE 区分
     CASE 1
        テスト=LOOLUP(期間,シート1のA1:A11,シート1のB1:B11)
     END of セレクト
End of Function

このときのLOOKUPの()のシート1のA1:A11,シート1のB1:B11の記述はどうすればいいのでしょうか?

【49426】Re:教えてください m(__)m
発言  ponpon  - 07/6/4(月) 23:15 -

引用なし
パスワード
   ▼prolinea さん:
>FUNCTION テスト(区別,期間,金額)
>   セレクト CASE 区分
>     CASE 1
>        テスト=LOOLUP(期間,シート1のA1:A11,シート1のB1:B11)
>     END of セレクト
>End of Function
>
>このときのLOOKUPの()のシート1のA1:A11,シート1のB1:B11の記述はどうすればいいのでしょうか?

よくわかってませんが、
Function テスト(区分, 期間, 金額)
   Select Case 区分
     Case 1
        テスト = WorksheetFunction.Lookup(期間, Sheets("Sheet1").Range("A1:A11"), _
                 Sheets("Sheet1").Range("B1:B11"))
     End Select
End Function

【49506】Re:教えてください m(__)m
お礼  prolinea  - 07/6/7(木) 21:43 -

引用なし
パスワード
   出来ました(^^♪ 本当にありがとうございました。

もうひとつ、教えていただいていいですか?
ROUND()関数をVBAのユーザー定義関数で使用しているのですが、
ある計算値が0.105 これをROUND(計算値,2)とすると
0.1になってしまいます。正解は0.11のはずなのですが
なぜでしょう?

【49508】Re:教えてください m(__)m
発言  りん E-MAIL  - 07/6/8(金) 3:22 -

引用なし
パスワード
   prolinea さん、こんばんわ。

>もうひとつ、教えていただいていいですか?
>ROUND()関数をVBAのユーザー定義関数で使用しているのですが、
>ある計算値が0.105 これをROUND(計算値,2)とすると
>0.1になってしまいます。正解は0.11のはずなのですが
>なぜでしょう?
浮動小数点問題で、0.105ではなく0.104999999みたいな値になってるのだと思います。
なので計算にCurrency(通貨型、下4桁まで保障)を使用するか、Roundをかける時にROUND(計算値+0.000001,2)などとして調整するといいです。

(参考)Excel で浮動小数点演算の結果が正しくない場合がある
htt p://support.microsoft.com/kb/78113/ja

【49509】Re:教えてください m(__)m
発言  ichinose  - 07/6/8(金) 6:51 -

引用なし
パスワード
   おはようございます。

>ROUND()関数をVBAのユーザー定義関数で使用しているのですが、
>ある計算値が0.105 これをROUND(計算値,2)とすると
>0.1になってしまいます。正解は0.11のはずなのですが
>なぜでしょう?

以下のコードを実行してみてください
'===========================================
Sub sample()
  Dim a As Double
  a = 0.105
  MsgBox Round(a, 2)
  MsgBox Application.Round(a, 2)
End Sub


昔、算数で習った四捨五入は、Application.Round こっちです。

Roundは、銀行型の四捨五入と いうんですって!!
意味は「銀行型の四捨五入」で検索してみてください(Google等で)。

このRound違いが原因でしょうか?

但し、Application.Roundでも りんさんが記述されていた

>浮動小数点問題で、0.105ではなく0.104999999みたいな値になってるのだと思います。
>なので計算にCurrency(通貨型、下4桁まで保障)を使用するか、Roundをかける時に>ROUND(計算値+0.000001,2)などとして調整するといいです。

は考慮しないと計算が合わない場合も出てくると思いますよ!!
何らかの演算結果を丸める場合は、対策が必要です。


とにかく、小数を扱う場合は、要注意です!!

【49510】Re:教えてください m(__)m
発言  注意  - 07/6/8(金) 8:41 -

引用なし
パスワード
   VBA質問箱基本ポリシーより

質問者の方へのお願い

タイトルは内容を示すものに
記事のタイトルは、その質問の内容が端的にわかるようなものにしてください。
単に「教えてください」とか「困っています」などといったタイトルでは、回答者があなたの質問をクリックしない可能性が非常に高くなります。すなわち、回答がつかない可能性が高くなる、ということです。

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