ここから本文です

VBA勉強中の者です。 以前もお世話になり、皆様に感謝してます。 また、行き...

jag********さん

2010/6/1819:10:25

VBA勉強中の者です。
以前もお世話になり、皆様に感謝してます。
また、行き詰ってしまいました。
お力をお貸しください。よろしくお願いします。
以下の構文でうまく動いていたのですが、

Dim myDic As Object, myKey
Dim myVal, x
Dim i As Long, j As Long, k As Long
Dim mySh As Worksheet
Dim myFlg As Boolean
Dim lastRow As Long, lastCol As Long
Dim myL As Integer
Dim myCnt As Long
' ---(1)元データを配列に格納
lastRow = Worksheets("別仕事").UsedRange.Rows.Count
lastCol = Worksheets("別仕事").UsedRange.Columns.Count
myVal = Worksheets("別仕事").Range(Cells(5, 4), Cells(lastRow, lastCol)).Value
'----キーとする列を指定
myL = 1 →別の数字4や15は動くのに13だと・・・
' ---(2)myDicへデータを格納
Set myDic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(myVal)
If Not myVal(i, myL) = Empty Then
If Not myDic.Exists(myVal(i, myL)) Then
myDic.Add myVal(i, myL), 1
Else
myDic(myVal(i, myL)) = myDic(myVal(i, myL)) + 1
End If
End If
Next
myKey = myDic.Keys
'----シートの有無を確認、なければ最後部に追加
For i = 0 To myDic.Count - 1
For Each mySh In Worksheets
myFlg = False
If mySh.Name = myKey(i) Then
myFlg = True
mySh.Cells.Delete
Exit For
End If
Next mySh
If myFlg = False Then
ActiveWorkbook.Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = myKey(i)
End If
'----値を各シートへ転記
With Worksheets("別仕事")
.Range(.Cells(1, 1), .Cells(1, lastCol)).Copy Worksheets(myKey(i)).Range("A1")
End With
myCnt = 0
ReDim x(1 To lastRow, 1 To lastCol)
For k = 1 To UBound(myVal)
If myVal(k, myL) = myKey(i) Then
myCnt = myCnt + 1
For j = 1 To lastCol
x(myCnt, j) = myVal(k, j)
Next j
End If
Next k
Worksheets(myKey(i)).Cells(2, 1).Resize(UBound(x), lastCol).Value = x
↑ここでエラー
Erase x
Next i
Set myDic = Nothing
End Sub

エラー内容はインデックスが有効範囲にありません。です。
上記の数字以外は変更はしていないのに、1、4、15では動いて、13だとエラー・・・。
何故なんでしょうか?

補足回答有難うございます。
データシートに結合はありますが、データシートも振り分けシートも同じもので、
13以外の数字では作動します。

閲覧数:
287
回答数:
1
お礼:
100枚

違反報告

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

por********さん

編集あり2010/6/1822:04:31

こんにちは。
もともとのデータシート、結合の箇所がないかを確認してみてください。
>補足より
データシートに結合がある<==== 配列を使って、メモリとRangeのコピーをしていますよね、そのとき、結合があると、単純な変数の操作でも、ある場所でだめになる、とか、あります。
最初コピーするのは、シートの途中ですよね、それが、少し上にコピーしています。
(5,4)==> (2,1)ということです。
セルの結合をしないシートで、このコードを実行した場合、13でも、どこでも、正しく動作するかを、確認してください。

質問した人からのコメント

2010/6/19 10:24:51

回答有難うございました。結合は解除しましたが、やはり違う原因があるようです。
もう少し、自分で試行錯誤してみます。

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

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

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

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

閉じる

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

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

閉じる