Excel VBA質問箱 IV

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

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


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

【59698】「アプリケーション定義またはオブジェクト定義のエラー」について monyo 09/1/2(金) 23:17 質問[未読]
【59700】Re:「アプリケーション定義またはオブジェ... question 09/1/3(土) 0:25 回答[未読]
【59703】Re:「アプリケーション定義またはオブジェ... monyo 09/1/3(土) 8:18 質問[未読]
【59705】Re:「アプリケーション定義またはオブジェ... かみちゃん 09/1/3(土) 8:35 発言[未読]
【59706】Re:「アプリケーション定義またはオブジェ... かみちゃん 09/1/3(土) 8:54 発言[未読]
【59708】Re:「アプリケーション定義またはオブジェ... monyo 09/1/3(土) 9:44 お礼[未読]
【59707】Re:「アプリケーション定義またはオブジェ... monyo 09/1/3(土) 9:28 お礼[未読]
【59709】Re:「アプリケーション定義またはオブジェ... かみちゃん 09/1/3(土) 9:51 発言[未読]
【59710】Re:「アプリケーション定義またはオブジェ... monyo 09/1/3(土) 11:35 お礼[未読]
【59702】Re:「アプリケーション定義またはオブジェ... かみちゃん 09/1/3(土) 7:25 発言[未読]
【59704】Re:「アプリケーション定義またはオブジェ... monyo 09/1/3(土) 8:23 お礼[未読]

【59698】「アプリケーション定義またはオブジェク...
質問  monyo  - 09/1/2(金) 23:17 -

引用なし
パスワード
   初めまして。

sheet1からsheet2に転記するにあたっての質問です。
sheet1の数値を使ってuとzを計算し、それをsheet2に出力したいのですが

「アプリケーション定義またはオブジェクト定義のエラーです」

というエラーが出てしまいます。現在のコードは以下になります。

Worksheets("Sheet2").Cells(n, j + 1).Value = u
Worksheets("Sheet2").Cells(n + 1, j + 1).Value = z

また、ステップインで変数の値を調べてみたところ、
n=4
j=1
u=0
z=0
となっていましたが、sheet2には
4098.34864786929や
-5235.01068699772など、
計算された数値が入力されていました。
エラー表示されるのに数値が出力されています。

どのように直せば良いのか、ご回答お願い致します。

【59700】Re:「アプリケーション定義またはオブジ...
回答  question  - 09/1/3(土) 0:25 -

引用なし
パスワード
   ▼monyo さん:
>「アプリケーション定義またはオブジェクト定義のエラーです」
>
>というエラーが出てしまいます。現在のコードは以下になります。
>
>Worksheets("Sheet2").Cells(n, j + 1).Value = u
>Worksheets("Sheet2").Cells(n + 1, j + 1).Value = z

エラーはどの行で発生するのですか?
コードは2行だけなんですか?
uとかzはどうやって作ったのですか?

>また、ステップインで変数の値を調べてみたところ、
>n=4
>j=1
>u=0
>z=0
>となっていましたが、sheet2には
>4098.34864786929や
>-5235.01068699772など、
>計算された数値が入力されていました。
入力?
どのセルですか?
>エラー表示されるのに数値が出力されています。

>どのように直せば良いのか、ご回答お願い致します。
全体に情報が不足しています。

【59702】Re:「アプリケーション定義またはオブジ...
発言  かみちゃん E-MAIL  - 09/1/3(土) 7:25 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>sheet1からsheet2に転記するにあたっての質問です。
>sheet1の数値を使ってuとzを計算し、それをsheet2に出力したいのですが
>
>「アプリケーション定義またはオブジェクト定義のエラーです」
>
>というエラーが出てしまいます。現在のコードは以下になります。

questionさんも書かれていますが、エラーが発生しているコードは特定できていますか?
提示されたコードと値だけではエラーは発生しないと思います。

新規ブックで以下のコードを試してみてください。

Sub Sample()
 Dim n As Long
 Dim j As Long
 Dim u As Long
 Dim z As Long
 
 n = 4
 j = 1
 u = 0
 z = 0
 
 Worksheets("Sheet2").Cells(n, j + 1).Value = u
 Worksheets("Sheet2").Cells(n + 1, j + 1).Value = z
End Sub

【59703】Re:「アプリケーション定義またはオブジ...
質問  monyo  - 09/1/3(土) 8:18 -

引用なし
パスワード
   ▼question さん:

ご回答ありがとうございます。
すみません。情報がたりませんね。

>>「アプリケーション定義またはオブジェクト定義のエラーです」
>>
>>というエラーが出てしまいます。現在のコードは以下になります。
>>
>>Worksheets("Sheet2").Cells(n, j + 1).Value = u
>>Worksheets("Sheet2").Cells(n + 1, j + 1).Value = z
>
> エラーはどの行で発生するのですか?
上の2行でエラーが発生しています。

> コードは2行だけなんですか?
> uとかzはどうやって作ったのですか?
全体のコードは以下になります。

Sub buturis()
Dim n As Integer 'NCブロック数
Dim s As Double '一刃当たり送り
Dim v As Double '切削速度
Dim hasu As Integer '刃数
Dim deep As Double '切り込み深さ
Dim d As Double '1°回転当たりの切込み深さ
Dim a() As Double
Dim kika As Integer '幾何シミュレーションから算出
Dim kt As Double
Dim kr As Double
Dim ft() As Double
Dim fr() As Double
Dim fu() As Double
Dim fv() As Double
Dim u As Double
Dim z As Double
Dim m As Double
Dim e As Double
Dim L As Double
Dim kaiten As Double

Dim r As Double 'カッタ半径
Dim cl As Double
Dim engage As Double
Dim ac As Double 'アークコサイン

Sheets("Sheet1").Activate
r = Cells(3, 3).Value / 2 'アークコサイン算出↓
cl = Cells(10, 3).Value
engage = 1 - (cl / r)
ac = WorksheetFunction.Acos(engage) 'アークコサイン算出↑

s = Cells(5, 3).Value
v = Cells(4, 3).Value
hasu = Cells(6, 3).Value
deep = Cells(9, 3).Value
L = 60
ReDim a(hasu, 361)
ReDim ft(hasu, 361)
ReDim fr(hasu, 361)
ReDim fu(hasu, 361)
ReDim fv(hasu, 361)
If s <= 0.03 Then
 ks = 0.03
Else
 ks = s
End If

d = deep / (360 / hasu)
Cells(3, 5).Select
n = 1
Do While Selection.Cells(n, 1) <> ""
n = n + 1
Loop
n = n + 1

For b = 3 To n Step 1
 kaiten = Cells(n, 10).Value * Cells(8, 3).Value '1ブロック当たりの回転数
 For g = 1 To kaiten Step 1
  For i = 1 To hasu Step 1
   For j = 0 To 360 Step 1
    If j / 180 <= ac Then
     kika = 1
    Else
     kika = 0
    End If
    For h = 0 To deep Step d
     a(i, j) = s * Sin(j / 180) * kika
     If j <= 7.2 And Cells(3, 10).Value <= j / Cells(8, 3).Value Then
      kp = 1.2
     Else
      kp = 1
     End If
     kt = 2165 * kp * (ks / s) ^ 0.5 * (1 - 0.14 * v)
     kr = 1245 * kp * (ks / s) ^ 0.5 * (1 - 0.3 * v)
     ft(i, j) = kt * a(i, j)
     fr(i, j) = kr * a(i, j)
     fu(i, j) = (fr(i, j) * Sin(j / 180) - ft(i, j) * Cos(j / 180))
     fv(i, j) = (fr(i, j) * Cos(j / 180) - ft(i, j) * Sin(j / 180))
     m = fv(i, j) * (L - h)
     e = 0.165 * 1000 * fv(i, j) + 1.04 * 10 ^ -7 * m * (L - h)
     If i < 1 Or j < 0 Then
      i = i + 1
      j = j + 1
     End If
     u = u + fu(i, j)
     z = z + fv(i, j)
    Next
    Worksheets("Sheet2").Cells(n, j + 1).Value = u
    Worksheets("Sheet2").Cells(n + 1, j + 1).Value = z
   Next
  Next
 Next
Next

End Sub


>>また、ステップインで変数の値を調べてみたところ、
>>n=4
>>j=1
>>u=0
>>z=0
>>となっていましたが、sheet2には
>>4098.34864786929や
>>-5235.01068699772など、
>>計算された数値が入力されていました。
>入力?
すみません。出力でした。

>どのセルですか?
sheet2の(3,1)から(3,361)と、(4,1)から(4,361)までです。

長くなって申し訳ありませんが、ご指摘お願い致します。

【59704】Re:「アプリケーション定義またはオブジ...
お礼  monyo  - 09/1/3(土) 8:23 -

引用なし
パスワード
   ▼かみちゃん さん:
ご回答ありがとうございました。
quetionさんとかみちゃんさんのご指摘どおり、情報が不足していました。

全体のコードや、不足している情報を投稿しましたので
是非、ご回答お願い致します。

【59705】Re:「アプリケーション定義またはオブジ...
発言  かみちゃん E-MAIL  - 09/1/3(土) 8:35 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 情報がたりませんね。

提示されたコードが記述されているモジュールの先頭行に
Option Explicit
を記述して、変数の宣言を強制するようにして、コンパイルチェックすると、
変数ks、b、g、i、j、h、kpが宣言されていません。
ここは、宣言するクセをつけたほうがいいです。

あと、Sheet1のサンプルデータを提示していただけませんか?

  A  B  C
1
2
3
4
5

コードを再現しようとしても、値が提示されていないので、できません。
掲示板を見ている者には、monyoさんのシートは見えていないということに配慮
していただきたいと思います。

私が提示したSampleマクロでは、エラーが出ないことは確認していただけましたか?
つまり、変数の値の内容に問題があると思うのですが。

【59706】Re:「アプリケーション定義またはオブジ...
発言  かみちゃん E-MAIL  - 09/1/3(土) 8:54 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>>Worksheets("Sheet2").Cells(n, j + 1).Value = u
>>>Worksheets("Sheet2").Cells(n + 1, j + 1).Value = z
>>
>> エラーはどの行で発生するのですか?
>上の2行でエラーが発生しています。

もう一度、ステップインで、エラーが発生したときの j と n の値を教えていただけませんか?

少なくとも、

> ステップインで変数の値を調べてみたところ、
> n=4
> j=1

では、エラーにならないと思います。(私が提示したSampleコードのとおり)

もしかして、Excelのバージョンは、2003以下ですか?
それであれば、
For j = 0 To 360 Step 1
は、jが255を超えると、エラーになると思います。
これは、
Cells(n, j + 1).Value
で j は、列番号に使っていますので、j + 1 が256 を超えるとエラーになります。

なお、Excel2007では、最大列が16384列ですので、この部分だけの原因ではないと思います。

【59707】Re:「アプリケーション定義またはオブジ...
お礼  monyo  - 09/1/3(土) 9:28 -

引用なし
パスワード
   ▼かみちゃん さん:
ご回答ありがとうございます。

>提示されたコードが記述されているモジュールの先頭行に
>Option Explicit
>を記述して、変数の宣言を強制するようにして、コンパイルチェックすると、
>変数ks、b、g、i、j、h、kpが宣言されていません。
>ここは、宣言するクセをつけたほうがいいです。

勉強不足ですみません。
上記の変数を宣言して実行してみましたがやはり同じ場所で同じエラーが出ました。

>あと、Sheet1のサンプルデータを提示していただけませんか?
すみません。sheet1で使ったデータは以下になります。

  A  B  C     D  E  F  G  H  I    J
1              
2              
3       16       1  0  0  0  0
4       120       2  10  0  0  10  0.020933
5       0.1
6       2
7       447.707
8       2388.535
9       5
10      5

>私が提示したSampleマクロでは、エラーが出ないことは確認していただけましたか?
>つまり、変数の値の内容に問題があると思うのですが。

確認いたしました。ありがとうございます。ということは、変数の値でしょうか。
どの変数がおかしいか、一つずつ確認してみます。

【59708】Re:「アプリケーション定義またはオブジ...
お礼  monyo  - 09/1/3(土) 9:44 -

引用なし
パスワード
   ▼かみちゃん さん:

ご回答ありがとうございます。

>>>>Worksheets("Sheet2").Cells(n, j + 1).Value = u
>>>>Worksheets("Sheet2").Cells(n + 1, j + 1).Value = z
>>>
>>> エラーはどの行で発生するのですか?
>>上の2行でエラーが発生しています。
>
>もう一度、ステップインで、エラーが発生したときの j と n の値を教えていただけませんか?
ご指摘いただいた変数を宣言した後、エラーが発生したときの値は以下になります。

j=256
n=4

>もしかして、Excelのバージョンは、2003以下ですか?
2003です。

>それであれば、
>For j = 0 To 360 Step 1
>は、jが255を超えると、エラーになると思います。
>これは、
>Cells(n, j + 1).Value
>で j は、列番号に使っていますので、j + 1 が256 を超えるとエラーになります。

ありがとうございます!
行と列を逆にして出力したら、解決しました!

>なお、Excel2007では、最大列が16384列ですので、この部分だけの原因ではないと思います。

また何かあったらお世話になるかもしれません。
よろしくお願いいたします。
ご親切に教えていただき、ありがとうございました。

【59709】Re:「アプリケーション定義またはオブジ...
発言  かみちゃん E-MAIL  - 09/1/3(土) 9:51 -

引用なし
パスワード
   こんにちは。かみちゃん です。

解決されたようですが、

>>提示されたコードが記述されているモジュールの先頭行に
>>Option Explicit
>>を記述して、変数の宣言を強制するようにして、コンパイルチェックすると、
>>変数ks、b、g、i、j、h、kpが宣言されていません。
>>ここは、宣言するクセをつけたほうがいいです。
>
>上記の変数を宣言して実行してみましたがやはり同じ場所で同じエラーが出ました。

いえいえ、これは、エラーの原因の対処を説明したわけではなく、
VBAの基本である変数の宣言をきちんとすることをお勧めしただけです。
これで、エラーが回避されるというわけではありません。

本題とは関係ない部分をコメントして、混乱するようであれば、すみません。

でも、変数の宣言はなくても動きますが、しておいたほうが不具合の発生を少なく
することができるので、ぜひお勧めします。
時間があるときに、以下の読み物をご覧になってみてください。
http://pc.nikkeibp.co.jp/article/NPC/20070802/278891/

>>あと、Sheet1のサンプルデータを提示していただけませんか?
>すみません。sheet1で使ったデータは以下になります。

サンプルデータの提示ありがとうございます。

変数jの値に問題があることに気づいていただいてよかったです。

 Dim n As Integer 'NCブロック数

は、

 Do While Selection.Cells(n, 1) <> ""
  n = n + 1
 Loop

という使い方をするならば、
nが32767を超えると、「オーバーフロー」のエラーになります。

でも、[59708]で
> 行と列を逆にして出力したら、解決しました!
とのことですが、それであれば、今度は、
nが256を超えないようにしないといけないと思いますので、むしろ、そちらのほうの
エラー対策を考えたほうがよさそうですね。

【59710】Re:「アプリケーション定義またはオブジ...
お礼  monyo  - 09/1/3(土) 11:35 -

引用なし
パスワード
   ▼かみちゃん さん:

ご返答ありがとうございます。

>でも、変数の宣言はなくても動きますが、しておいたほうが不具合の発生を少なくすることができるので、ぜひお勧めします。
>時間があるときに、以下の読み物をご覧になってみてください。
>http://pc.nikkeibp.co.jp/article/NPC/20070802/278891/
今後の参考にさせていただきます。
わざわざありがとうございます!


>nが256を超えないようにしないといけないと思いますので、むしろ、そちらのほうの
>エラー対策を考えたほうがよさそうですね。

nについては今のところ100を越える心配はないと思います。
しかしこういったケースは今後も出てくるかもしれないので、
後々考えたいと思います。

それでは、ご指導ありがとうございました!

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