Excel VBA質問箱 IV

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

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


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

【60072】cos関数について 海僧 09/1/26(月) 20:22 質問[未読]
【60073】Re:cos関数について 横入り 09/1/26(月) 20:53 発言[未読]
【60075】Re:cos関数について 海僧 09/1/26(月) 21:18 質問[未読]
【60076】Re:cos関数について 横入り 09/1/26(月) 21:45 発言[未読]
【60079】Re:cos関数について 海僧 09/1/26(月) 22:06 質問[未読]
【60080】Re:cos関数について 横入り 09/1/26(月) 22:17 回答[未読]
【60103】Re:cos関数について 海僧 09/1/27(火) 15:19 お礼[未読]

【60072】cos関数について
質問  海僧 E-MAIL  - 09/1/26(月) 20:22 -

引用なし
パスワード
   今まで普通に動いていたプログラムが急に動かなくなりました。
エラーはcos関数の部分で起きており、コードは以下の部分になっています。

fu(angle, count) = fr(angle, dh) * Sin(WorksheetFunction.Radians(angle)) - ft(angle, dh) * cos(WorksheetFunction.Radians(angle))
fv(angle, count) = -(fr(angle, dh) * cos(WorksheetFunction.Radians(angle)) - ft(angle, dh) * Sin(WorksheetFunction.Radians(angle)))


どうやら、cosが関数として機能していないようです。
原因がわからないので、もし解決方法がわかる方がいれば、
ご教授お願い致します。

【60073】Re:cos関数について
発言  横入り  - 09/1/26(月) 20:53 -

引用なし
パスワード
   ▼海僧 さん:
>今まで普通に動いていたプログラムが急に動かなくなりました。
>エラーはcos関数の部分で起きており、コードは以下の部分になっています。
何というエラーですか?
>どうやら、cosが関数として機能していないようです。
その理由は?
使っている変数はどのように宣言されていますか?
全般に情報不足ですね。

【60075】Re:cos関数について
質問  海僧 E-MAIL  - 09/1/26(月) 21:18 -

引用なし
パスワード
   ▼横入り さん:

早急な返信ありがとうございます。情報不足で申し訳ありません。

>何というエラーですか?
「配列がありません」です。

>>どうやら、cosが関数として機能していないようです。
>その理由は?
同じ変数を使っているsin関数の部分ではエラーにならなかったからです。

>使っている変数はどのように宣言されていますか?
Dim angle As Integer
Dim dh, ft(), fr(), fu(), fv(), m(), e() As Double
ReDim ft(180, 180), fr(180, 180), fu(180, 180), fv(180, 180), m(180, 180), e(180, 180)

以上です。お手間をとらせて申し訳ありませんが、宜しくお願い致します。

【60076】Re:cos関数について
発言  横入り  - 09/1/26(月) 21:45 -

引用なし
パスワード
   再現性のある、最低限のコードを省略せずにアップされてはどうでしょうか。

ちなみに、
>Dim dh, ft(), fr(), fu(), fv(), m(), e() As Double
こういう書き方だとDoubleなのは e() だけです。

cosが小文字で、Sinが大文字なのは何か意味がありますか?
別のところで配列cosがあったりしますか?

【60079】Re:cos関数について
質問  海僧 E-MAIL  - 09/1/26(月) 22:06 -

引用なし
パスワード
   ▼横入り さん:
>>Dim dh, ft(), fr(), fu(), fv(), m(), e() As Double
>こういう書き方だとDoubleなのは e() だけです。
ありがとうございます。知りませんでした。

>再現性のある、最低限のコードを省略せずにアップされてはどうでしょうか。
わかりました。以下になります。

Private Sub physics(row As Integer)

Dim r As Double 'カッタ半径

Dim order As String
Dim length As Integer
Dim v As Double '切削速度
v = Worksheets("付加情報").Cells(10, 2).Value
r = Worksheets("付加情報").Cells(2, 2).Value / 2

length = Worksheets("付加情報").Cells(4, 2).Value

order = Worksheets("解析").Cells(row, 6).Value
If order = "" Or order = "早送り" Then
 Exit Sub
End If

'切削幅と切削深さ
Dim width, depth, z, oldz As Double
 If row = 4 Then
  oldz = 0
  z = Worksheets("解析").Cells(row, 5).Value
 Else
 z = Worksheets("解析").Cells(row, 5).Value
 oldz = Worksheets("解析").Cells(row - 1, 5).Value
 End If
 
 If row < 634 Then
  width = 2 * r '荒加工の切削幅は全て2r
 Else
  width = 2 * r * 0.1 '仕上げ加工の切削幅は1/10
 End If
 
 '切削深さの算出
 If oldz > 0 Then
  depth = -z
 Else
  depth = -(oldz - z)
 End If


'エンゲージ角
Dim engage As Double
Dim cos As Double 'コサインの値

  If Worksheets("解析").Cells(row, 6).Value = "円弧切削(時計回り)" Then
   cos = 1 - width / r - (width * (r - 0.5 * width)) / ((Worksheets("解析").Cells(row, 9).Value) * r)
  ElseIf Worksheets("解析").Cells(row, 6).Value = "円弧切削(反時計回り)" Then
   cos = 1 - width / r - (width * (r - 0.5 * width)) / ((Worksheets("解析").Cells(row, 9).Value) * r)
  ElseIf Worksheets("解析").Cells(row, 6).Value = "直線切削" Then
   cos = 1 - (width / r)
  End If
  
  engage = WorksheetFunction.Acos(cos) 'アークコサイン(ラジアン)
  engage = WorksheetFunction.Degrees(engage) 'ラジアン⇒度
 
  If engage >= 180 Then
   engage = 360 - engage
  End If
 

'一刃当りの送り
Dim rev, feed, edge As Integer
Dim anedge As Double
 feed = Worksheets("解析").Cells(row, 8).Value
 rev = Worksheets("解析").Cells(row, 7).Value
 anedge = feed / (edge * rev)


Dim ks, kp, kt, kr As Double

'ksの決定
If anedge <= 0.03 Then
 ks = 0.03
Else
 ks = anedge
End If


Dim angle, encounter As Integer

For angle = 1 To 180
 'kpの決定
 If angle <= 7.2 Then
  kp = 1.2
 Else
  kp = 1
 End If
 
 '接触しているか否か
 If angle <= engage Then
  encounter = 1
 Else
  encounter = 0
 End If

 'ktとkrの算出
 kt = 2165 * kp * (ks / anedge) ^ 0.5 * (1 - 0.14 * v / 60)
 kr = 1245 * kp * (ks / anedge) ^ 0.5 * (1 - 0.3 * v / 60)


 '微少切れ刃当たりの切削力Aの算出
 Dim h, A() As Double
 ReDim A(180)
 h = depth / 360
 A(angle) = anedge * Sin(WorksheetFunction.Radians(angle)) * encounter * h
 
 
 '角度angleにおける切削力の算出
 Dim dh, ft(), fr(), fu(), fv(), m(), e() As Double
 ReDim ft(180, 180), fr(180, 180), fu(180, 180), fv(180, 180), m(180, 180), e(180, 180)
 Dim count As Integer
 count = 0
 For dh = 0 To depth Step h
  count = count + 1
  ft(angle, count) = kt * A(angle)
  fr(angle, count) = kr * A(angle)
  
  
  fu(angle, count) = fr(angle, dh) * Sin(WorksheetFunction.Radians(angle)) - ft(angle, dh) * cos(WorksheetFunction.Radians(angle))
  fv(angle, count) = -(fr(angle, dh) * cos(WorksheetFunction.Radians(angle)) - ft(angle, dh) * Sin(WorksheetFunction.Radians(angle)))


>cosが小文字で、Sinが大文字なのは何か意味がありますか?
Sinは関数として機能しているので、自動で大文字になります。

>別のところで配列cosがあったりしますか?
ほかの場所でcosは使っていません。

以上になります。お忙しい中申し訳ありませんが、宜しくお願い致します。

【60080】Re:cos関数について
回答  横入り  - 09/1/26(月) 22:17 -

引用なし
パスワード
   Dim cos As Double 'コサインの値
が悪さをしていると思いますよ。
予約語を変数に使ってはいけません。


以下、参考までに書きますと、
>>再現性のある、最低限のコードを省略せずにアップされてはどうでしょうか。
>わかりました。以下になります。
データが提示されていないので、再現性がまったくありません。
再現性とは、回答者がエラーを再現できることを言います。

しかも、これは最低限ではありません。
不要な部分を削って、エラーが発生するもっと小さいものを提示すべきですね。

【60103】Re:cos関数について
お礼  海僧 E-MAIL  - 09/1/27(火) 15:19 -

引用なし
パスワード
   ▼横入り さん:
>Dim cos As Double 'コサインの値
>が悪さをしていると思いますよ。
>予約語を変数に使ってはいけません。
ありがとうございます。解決しました。

>
>以下、参考までに書きますと、
>>>再現性のある、最低限のコードを省略せずにアップされてはどうでしょうか。
>>わかりました。以下になります。
>データが提示されていないので、再現性がまったくありません。
>再現性とは、回答者がエラーを再現できることを言います。
>
>しかも、これは最低限ではありません。
>不要な部分を削って、エラーが発生するもっと小さいものを提示すべきですね。
すみません。データも提示しないと意味がありませんでしたね。
次回以降参考にいたします。
ご教授ありがとうございました。

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