[[20181009150802]] 『実行時エラー1004について』(とら) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『実行時エラー1004について』(とら)

お世話になっております。

ご教示いただけますでしょうか?

Sheet2には23名分の名前がB列にあり、C列に乱数を発生させます。
Sheet3には5名分の名前がB列にあり、C列に乱数を発生させます。

それぞれのシートで乱数を昇順に並べて、Sheet1にデータをコピペすることを考えているのですが、なぜか、Sheet2 Sortのところで以下のエラーが出てしまいます。

「実行時エラー1004 オブジェクトRangeメソッドのWorksheetが失敗しました」

これがいくらやっても解決できません。どうかお助けください。

Excel 2016 for Macを使用しています。

Dim i As Long, j As Long

    Dim LastRow2 As Long, LastRow3 As Long
    Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet

    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
    Set ws3 = Worksheets("Sheet3")

    Application.ScreenUpdating = False

    LastRow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
    LastRow3 = ws3.Cells(Rows.Count, 1).End(xlUp).Row

     'Sheet2 の C列に乱数発生
    For i = 2 To LastRow2
         Randomize
        ws2.Cells(i, 3).Value = Rnd
    Next i

     'Sheet3 の C 列に乱数発生
    For j = 2 To LastRow3
        Randomize
        ws3.Cells(i, 3).Value = Rnd
    Next j

     'Sheet2 sort
      ws2.Range(Cells(1, 1), Cells(LastRow2, 3)).Sort key1:=ws2.Cells(2, 3), Order1:=xlAscending, Header:=xlYes

      'Sheet3  sort
     ws3.Range(Cells(1, 1), Cells(LastRow3, 3)).Sort key1:=ws3.Cells(2, 3), Order1:=xlAscending, Header:=xlYes

< 使用 Excel:Excel2016mac、使用 OS:MacOSX >


【間違い】
     ws2.Range(Cells(1, 1), Cells(LastRow2, 3))
     ws3.Range(Cells(1, 1), Cells(LastRow3, 3))
【正しい】
     ws2.Range(ws2.Cells(1, 1), ws2.Cells(LastRow2, 3))
     ws3.Range(ws3.Cells(1, 1), ws3.Cells(LastRow3, 3))

(名無し) 2018/10/09(火) 15:33


まだありました。

【間違い】

    LastRow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
    LastRow3 = ws3.Cells(Rows.Count, 1).End(xlUp).Row

【正しい】

    LastRow2 = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row
    LastRow3 = ws3.Cells(ws3.Rows.Count, 1).End(xlUp).Row

それと大した問題ではありませんが、Randomizeは最初に1回実行するだけで十分です。

(名無し) 2018/10/09(火) 15:36


名無し様

早速のご指摘ありがとうございます。オブジェクトがそこにも必要なんですね...。大変勉強になりました。

このあたりのことをわかりやすく書いているサイト、もしくは本をご存じでしたら、教えていただけませんでしょうか?
(とら) 2018/10/09(火) 16:02


世の中のVBA解説サイトのサンプルは不適切なコードばかりです。

本や解説ページを読んで省略できる条件を理解しても、省略する限りこの失敗は絶対にやるので
Rangeオブジェクトを示すメソッド、プロパティのワークシートは省略しないようにしましょう。

どういうプロパティが引っかかるかと言うと
https://excel-ubara.com/excelvba1/EXCELVBA356.html

覚えておく必要があるとしたらExcelVBAのオブジェクト構造くらいです。

(名無し) 2018/10/09(火) 16:23


名無し様

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

ご紹介いただきましたサイトなどを参考にしっかりと勉強をしたいと思います。

ありがとうございました。
(とら) 2018/10/09(火) 16:27


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.