- ベストアンサー
Excel2000とExcel2002のVBAの違いについて。
以前、このカテゴリーにて、Excel2000におけるVBAのマクロを教えてもらったのですが、そのマクロ入力済みエクセルファイルをExcel2002へ移植したら、上手くVBAが働きません。 具体的にいうと、シート1に入力したデータの履歴を、シート2にて保存していくマクロなのですが、Excel2002では履歴のシートに上書きしていくことがあります。(たまに発生する) Excel2000ではキチンと履歴のセルが全て残ります。 どなたか、この不具合を認識しておられる方。もしくは、対策をご存知の方がいらっしゃいましたら、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
お手数をおかけいたしました。マクロの記述には、間違えがないと思います。 原因として考えられることは、多分 myRow = Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row この式が実行された際に、myRowにきちんとした値が入らずに常に2になっているために起こる減少であると考えられます。 私はエクセル2002は持っていませんので確認ができません。たまに現象が出るのであれば、その現象が出るまで、ちょっとめんどくさいのですが先程の式のすぐ下に、Msgbox myRow を入れてメッセージボックスにmyRowの値を 表示してみてはいかがでしょうか。何が原因かつかめそうな気がします。 もしかしたら、VBAのバグかもしれません。 申し訳ありませんが、私には今の段階ではこのくらいしか対処の方法が思い浮かびません。 無責任のようで申し訳ありません。お許し下さい。
その他の回答 (1)
- kazuhiko5681
- ベストアンサー率49% (79/159)
こんにちわ。 もしかして私が作ったマクロでしょうか。そうであれば私に責任がありますので、一緒に考えてみたいと思います。 >Excel2002では履歴のシートに上書きしていくことがあります。 ということですが、私には意味が解りません。 不具合の内容とどの様に解消したいのかをもう少し解りやすくお知らせ下さい。 お手数をおかけいたしますが、よろしくお願いいたします。
お礼
こんにちは。 スミマセン!!またご迷惑をおかけします。。。 以前、教えていただいたVBAのマクロを多少変更して上手くいったのですが、 他のPC(Excel2002の組み込まれたPC)で読み取ると、たまに上書きしていくという現象が起こります。 下記に変更したマクロを記入します。(単にセルを増やしただけなのですが) Private Sub Worksheet_Change(ByVal Target As Range) Dim myRow As Long Dim mySyukko As Integer Dim myZaiko As Integer Dim myName As String If Target.Column = 7 Then If Target.Value <> "" Then mySyukko = Target.Value myZaiko = Target.Offset(0, -2).Value Target.Offset(0, -2).Value = myZaiko - mySyukko Target.Value = "" myName = Target.Offset(0, -1).Value Target.Offset(0, -1).Value = "" If Worksheets.Count = 1 Then Worksheets.Add after:=Worksheets(1) Worksheets(2).Range("A1").Value = "P/N" Worksheets(2).Range("B1").Value = "商品名" Worksheets(2).Range("C1").Value = "型式" Worksheets(2).Range("D1").Value = "S/N" Worksheets(2).Range("E1").Value = "持出数" Worksheets(2).Range("F1").Value = "担当者" Worksheets(2).Range("G1").Value = "日付" Worksheets(2).Columns("G:G").ColumnWidth = 10 End If myRow = Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row Target.Offset(0, -6).Copy Destination:=Worksheets(2).Cells(myRow, 1) Target.Offset(0, -5).Copy Destination:=Worksheets(2).Cells(myRow, 2) Target.Offset(0, -4).Copy Destination:=Worksheets(2).Cells(myRow, 3) Target.Offset(0, -3).Copy Destination:=Worksheets(2).Cells(myRow, 4) Worksheets(2).Cells(myRow, 5).Value = mySyukko Worksheets(2).Cells(myRow, 6).Value = myName Worksheets(2).Cells(myRow, 7).Value = Date End If End If End Sub 以上です。 Excel2000だと、シート2の2行目、3行目、4行目・・・と、随時履歴を残していくのですが、Excel2002上にて動作させると、シート2の2行目のセルのみに、シート1で実行したデータが上書きされていきます。しかも、たまにです。 互換性が上手く取れていないのでしょうか?
お礼
お世話になっております。 メッセージボックスにて確認をとったのですが、やはりExcel2000でも同様の不具合は確認できました。 しかも、規則性は無く、9行目までは問題なく履歴は残るが、そこから進まずに上書きを繰り返したりしています。 色々検証してみたのですが、やはりVBAのバグみたいですね。 何回も教えていただいてありがとうございました。