ここから本文です

エクセルのVBAで「インデックスが有効範囲にありません」とエラーが出てしまいます...

gog********さん

2015/11/1014:25:25

エクセルのVBAで「インデックスが有効範囲にありません」とエラーが出てしまいます。
以下のようなマクロを組んだのですがエラーが出てしまいます。

Sub depth()
Dim latdeg(1000)
Dim latmin(1000)
Dim lngdeg(1000)
Dim lngmin(1000)
Dim depth(1000, 1000)
Dim depthcount(1000, 1000)

lat_min = 33
lat_max = 34
lng_min = 132
lng_max = 134

step_lat = 1
step_lng = 1


k = 3
For i = lat_min To lat_max
For j = 0 To 59 Step step_lat
Worksheets("DEPTH").Cells(k, 1) = i
Worksheets("DEPTH").Cells(k, 2) = j
latdeg(k) = i
latmin(k) = j
k = k + 1
Next j
Next i

k = 3
For i = lng_min To lng_max
For j = 0 To 59 Step step_lng
Worksheets("DEPTH").Cells(1, k) = i
Worksheets("DEPTH").Cells(2, k) = j
lngdeg(k) = i
lngdeg(k) = j
k = k + 1
Next j
Next i

Worksheets("140529-0").Activate

ActiveCell.SpecialCells(xlLastCell).Select
d_endRow = ActiveCell.Row

nxdeg = 60 / step_lng
nydeg = 60 / step_lat

i = 1
While i < d_endRow + 1

d = Cells(i, 9)
lad = Cells(i, 5)
lam = Cells(i, 6)
lnd = Cells(i, 7)
lnm = Cells(i, 8)

x = (lnd - lng_min) * nxdeg + Int(lnm / step_lng) + 1
y = (lad - lat_min) * nydeg + Int(lam / step_lat) + 1

depth(x, y) = depth(x, y) + d
depthcount(x, y) = depthcount(x, y) + 1

i = i + 1
Wend

For i = 1 To (lng_max - lng_min + 1) * nxdeg
For j = 1 To (lat_max - lat_min + 1) * nydeg
If depthcount(i, j) > 0 Then
Worksheets("DEPTH").Cells(j + 2, i + 2) = depth(i, j) / depthcount(i, j)
Else
Worksheets("DEPTH").Cells(j + 2, i + 2) = 0

End If
Next j
Next i
End Sub

使用しているデータは
2014/5/29 0:00 512 20140528 145959 33 51.7999 132 42.5349 6 -99999.9
2014/5/29 0:00 216 20140528 145959 33 51.7999 132 42.5349 6 -99999.9
2014/5/29 0:00 20 20140528 150000 33 51.7999 132 42.5348 6 -99999.9
日時 緯度 経度 水深
のようなものでこの緯度、経度に従いlat_min lat_max lng_min ing_maxを決めているつもりです。
このマクロで動くときもあるのですが半分近くのデータでエラーが出てしまいます。
この原因や解決法があればぜひおしえてください。

補足これはデータを変換して緯度経度の表に水深の値を入れるマクロを組んだつもりです

この質問は、kik********さんに回答をリクエストしました。

閲覧数:
289
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

kik********さん

リクエストマッチ

2015/11/1015:34:43

デバッグ要員ではないんですけど・・・

> 「インデックスが有効範囲にありません」
この箇所の提示もないのでしょうか?

雰囲気わかった所だけ

変数 i, j, k を使っているところではエラーは出なさそう
x, y の所でしょうね

> x = (lnd - lng_min) * nxdeg + Int(lnm / step_lng) + 1

lnd < lng_min があれば、* xndeg で 60 倍され
Int(lnm / step_lng) でも 42 位にしかならない?
lnd - lng_min が -1 なら、-60 + 42 + 1 で -17 ?

ということで、現状では
5列目、7列目のデータで、33, 132 以下のデータがあるか探してみる

または、lnd < lng_min / lad < lat_min ならデータは捨てる処理にする、とか

※ Int(lnm / step_lng) の計算はOK?
60分割した中のどこか・・・ですか?
なら違うような?
(lnm の Max が 60 ならそのままで)

以上

  • 質問者

    gog********さん

    2015/11/1016:03:51

    depth(x, y) = depth(x, y) + d
    の部分が誇示されてます。
    lnmは59がMAXで60になると繰り上がるようにするのが正しいです。

    >5列目、7列目のデータで、33, 132 以下のデータがあるか探してみる
    これは一応すべてのデータで確認していて大丈夫なはずです

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる