外出自粛中でも楽しく過ごす!QAまとめ>>

Windows XP SP2, office excel 2003

VBAで自然対数を使うため,Ln()の関数を使おうとしたのですが実行すると「関数が定義されていません」というエラーメッセージが出ます.ネットで調べると,ワークシートでもVBAでも普通,Ln()の関数は使えるようです.

Lnの後ろにカーソルがある状態でF1を押してヘルプを出そうとすると,「キーワードが見つかりません」ではなく,「ページが見つかりません」と表示されます.「キーワードが見つかりません」は,でたらめな文字列のヘルプを出そうとすると表示されるものです.

同様にLog10()も使うことができませんでしたが,EXP()は使えます.なんとかVBAでLn()を使えるようにすることはできないでしょうか?

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

A 回答 (2件)

私のヘルプでも表示されませんよ。


関数は無いと思います。

VBA関数が無くても、ワークシート関数を呼び出して使う事が可能です。

ans = Application.WorksheetFunction.Ln(pram)
    • good
    • 0
この回答へのお礼

すいません.Application.ln(pram)とやればいいだけの話でした.質問したあとすぐにわかりました.それにしても,誤解をまねくようなヘルプの結果はやめてほしいもんです.どっか壊れてるのかと思いました.

お礼日時:2006/08/01 16:51

VBAでの自然対数関数はLog です

    • good
    • 0
この回答へのお礼

それは知りませんでした.締め切られたあとの投稿でしたのでお礼ポイントはあげられませんが,ありがとうございます.

お礼日時:2006/08/02 12:54

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

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

QVBA 自然対数

今,マクロを組み上げており計算上自然対数が必要なのですが,自然対数関数LNを
使用すると,

「コンパイルエラー subまたはfunctionが定義されておりません」

いうエラーが出て困っています.

このエラーを解消する方法,または,自然対数を算出できる別の方法があれば
ご教授願えないでしょうか?

今組んでいる該当部分を下記に転記いたします

y = Ln(Pw / 611.213)

よろしくお願いいたします。

Aベストアンサー

次のようにすればよいでしょう。

y = WorksheetFunction.Ln(Pw/611.213)

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qエクセル STDEVとSTDEVPの違い

エクセルの統計関数で標準偏差を求める時、STDEVとSTDEVPがあります。両者の違いが良くわかりません。
宜しかったら、恐縮ですが、以下の具体例で、『噛み砕いて』教えて下さい。
(例)
セルA1~A13に1~13の数字を入力、平均値=7、STDEVでは3.89444、STDEVPでは3.741657となります。
また、平均値7と各数字の差を取り、それを2乗し、総和を取る(182)、これをデータの個数13で割る(14)、この平方根を取ると3.741657となります。
では、STDEVとSTDEVPの違いは何なのでしょうか?統計のことは疎く、お手数ですが、サルにもわかるようご教授頂きたく、お願い致します。

Aベストアンサー

データが母集団そのものからとったか、標本データかで違います。また母集団そのものだったとしても(例えばクラス全員というような)、その背景にさらならる母集団(例えば学年全体)を想定して比較するような時もありますので、その場合は標本となります。
で標本データの時はSTDEVを使って、母集団の時はSTDEVPをつかうことになります。
公式の違いは分母がn-1(STDEV)かn(STDEVP)かの違いしかありません。まぁ感覚的に理解するなら、分母がn-1になるということはそれだけ結果が大きくなるわけで、つまりそれだけのりしろを多くもって推測に当たるというようなことになります。
AとBの違いがあるかないかという推測をする時、通常は標本同士の検証になるわけですので、偏差を余裕をもってわざとちょっと大きめに見るということで、それだけ確証の度合いを上げるというわけです。

QFunctionの戻り値を配列にしたいのですが

vbを始めたばかりですがよろしくお願いします。

Functionの戻り値を配列にしたいのですが

Function fnc(ByVal a As Byte, ByVal b As Byte) As Integer()
fnc(0) = a + b
fnc(1) = a - b
End Function
というような使い方はできないのでしょうか?
一つのFunctionで二つの計算結果をかえすには
どうしたらよいのでしょうか?
お願いします。

Aベストアンサー

ローカル変数を使えば可能だと思いますよ

VB6.0の場合
Function fnc( byVal a as Byte, Byval b as Byte) as Integer
  dim ar(1) as Integer
  ar(0) = a + b
  ar(1) = a - b
  fnc = ar
End Function

VB.NETなら
Function fnc( byVal a as Byte, Byval b as Byte) as Integer
  dim ar(1) as Integer
  ar(0) = a + b
  ar(1) = a - b
  return ar
End Function

VB.NETでも fnc = ar と言った記述も出来ます

呼び出し側では 動的配列として返り値を受けます
dim results() as Integer
results = fnc( 5, 3 )
と言った具合です

QエクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?

ワークシート関数で書けば
=IF(OR(F18=0,AND(F15>0,F16>0)),TRUE)です。
これをVBAで書こうとして

If Sheet1.Range("F18") = 0 Or Sheet1.Range("F15") > 0 And Sheet1.Range("F16") > 0 Then
MsgBox True
Else
MsgBox False
End If

とやってみたのですが、正しくないようです。
どのように書けばいいのでしょうか?

Aベストアンサー

>とやってみたのですが、正しくないようです。

式は正しいと思いますよ

ANDとORは、ANDが先に演算されます。/*と+-では、/*が先に演算されるようなものです。

でも、わかり易くするために、#1のかたのように括弧をつけるほうが良いですね。

QエクセルVBA データ型 SingleとDouble

SingleとDoubleともに、整数部分の範囲についてはどのように
考えればよいのでしょうか?例えば、小数点以下4桁までを正確
に計算できれば良く、変数の値が 54321.**** となる場合は
Singleで良いのでしょうか?
SingleとDoubleで対応できる、整数部分の範囲を教えてください。
お手数ですが、よろしくお願いします。

Aベストアンサー

有効桁数で考える必要があります。Singleの有効桁数は7桁(内部的には9桁)で、負の値は -3.4028235E+38 ~ -1.401298E-45、正の値は 1.401298E-45 ~ 3.4028235E+38 の範囲の値をとります。
http://msdn2.microsoft.com/ja-jp/library/xay7978z(VS.80).aspx

54321.1234 = 5.43211234E+4
になり、有効桁数は9桁あります。この場合はDoubleでないと小数点以下7,8桁目は桁落ちします。

QExcelで微分をしたいのですが。。。

題意のままですが・・・(´;ω;`)ウッ…
Excelを使って微分の計算をすることは可能でしょうか・・・?
またExcelで使えるツールなどでももちろんOKです。
ご存知の方が見えましたらお助けお願いします。。。

Aベストアンサー

>エクセルを使って微分の計算をする
とはどういうことでしょうか。
たとえば、(1)y=Xの2乗の導関数のy=2Xを求めるということでしょうか。これは「数式処理」に該当し、エクセルは値を扱う(四則演算が中心)ものなので、お門違いの要求です。他のソフト(ただし原理的にどんな数式・関数に対しても求まるソフトはないようですが)を探しましょう。ただアドインという形だとプログラムを組んで何でもエクセルにぶち込めるようなので、そういう例があったとしたら、話は別です。
積分の原始関数を求めるというのも似たパターンでしょう。
そうではなくて
(2)上記の例で、導関数を、人間が!
(A)エクセルの関数式で与えてやり、
(B)またはその導関数の近似値を与える関数式を与えて
やるなら、
後はエクセルは「電卓の計算を繰り返し高速計算するような」ものですから可能と思います。
ただ1000個の数の足し算をするという風には簡単にいかないケースがあるとは思いますので、勉強がひつようでしょう。収束や近似や速度に合う条件・計算法が必要でしょうから。
y=Xの2乗の(1、1)点の接線の勾配を出すなら
2X1=2で簡単です。
微分でなくて、定積分なら数値計算法を質問する意味はあると思いますが。
エクセルは四則演算といっても初等的三角関数、対数
、行列計算、ガンマ関数などもあります。
上記は原則論ですが、エクセルは全世界の俊秀も使っているとおもわれ、いろいろな機能を付加されているかも知れないので、最低WEB照会程度はして、よく調べてください。またエクセルを入り口や出口の入力・結果表示の道具として使っているケースは多いようですから、そういうケースは「エクセルでできる」に該当しないと思います。

>エクセルを使って微分の計算をする
とはどういうことでしょうか。
たとえば、(1)y=Xの2乗の導関数のy=2Xを求めるということでしょうか。これは「数式処理」に該当し、エクセルは値を扱う(四則演算が中心)ものなので、お門違いの要求です。他のソフト(ただし原理的にどんな数式・関数に対しても求まるソフトはないようですが)を探しましょう。ただアドインという形だとプログラムを組んで何でもエクセルにぶち込めるようなので、そういう例があったとしたら、話は別です。
積分の原始関数を求...続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング