こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL2011 Objectに入れたWork…

お世話になります。

どうも
よく、解らない
の、ですが

下記で
コメントアウト、させている
ラインの、内

*印を、付けている
どの行、をも
コメントアウトから、戻すと
☆で、添付映像の
エラーに、なります

コメントアウトの、ままだと
エラーには、なりません

察するに
Wsが
ActiveSheetで、無いと
with Ws
に、対する
.Range(cells(…
が、嫌っぽい
の、ですが

こんな事、当たり前
なのか
疑問、なのです

お教え下さい。
    記
Option Explicit
Option Base 0

Dim Data(100, 100) As Long, Ch As Long, s1 As Long, s2 As Long, Ws As Worksheet, すとり As Range

Sub testMain() ' 簡易テスト
Dim 現状保存 As Worksheet, シート名 As String
 Let シート名 = ActiveSheet.Name
Application.ScreenUpdating = False
 Worksheets(シート名).Copy after:=Worksheets(Worksheets.Count)  '■
 Set 現状保存 = ActiveSheet                            '■
 Set Ws = Worksheets.Add()
' Worksheets(シート名).Copy after:=Worksheets(Worksheets.Count)  '*□
' Set 現状保存 = ActiveSheet                      ’□
' Worksheets(シート名).Select                    '*
 現状保存.Visible = False
' Ws.Visible = False                       '*
Application.ScreenUpdating = True
 Call ダミーデータ作成
 Call testC
 Call testV
 Call testE
Application.DisplayAlerts = False
現状保存.Delete
Ws.Delete
Application.DisplayAlerts = True
End Sub

Sub ダミーデータ作成()
 With Ws.Range("a1:cv100")
  .Formula = "=RANDBETWEEN(1,10000)"
  .Calculate
  .Value = .Value
 End With
 Let Ws.Cells(1, 101).Formula = "=MIN(" & Ws.Name & "!" & Ws.Range("a1:cv100").Address & ")"
 Ws.Cells(1, 101).Calculate
 For s2 = 1 To 100
  For s1 = 1 To 100
   Data(s1, s2) = Ws.Cells(s1, s2).Value
  Next s1
 Next s2
 Let Data(0, 0) = Ws.Cells(1, 101).Value
End Sub

Sub testC()
 Ch = 10000
 With Ws
  For s2 = 1 To 100
   For s1 = 1 To 100
    If Ch > .Cells(s1, s2).Value Then Ch = .Cells(s1, s2).Value
   Next
  Next
 End With
End Sub

Sub testV()
 Ch = 10000
  For s2 = 1 To 100
   For s1 = 1 To 100
    If Ch > Data(s1, s2) Then Ch = Data(s1, s2)
   Next
  Next
End Sub

Sub testE()
 With Ws
  すとり = .Range(Cells(1, 1))                 '☆
 End With
End Sub

(※注:□の2行を コメントから 外す、時は 
同、■の2行を コメントアウトして、下さい)
                      以上

投稿日時 - 2017-05-12 06:15:51

QNo.9328264

困ってます

質問者が選んだベストアンサー

本当ですか、私はコメントのままでも、エラーになりました。「すとり」の所の書き方は間違っているので、エラーになるはずです。エラーにならないとしたら、別の所も直しているはずです。

「すとり」はRange なのでSet が必要です。

Range はパラメータが1つの時と、2つの時では、書き方が違います。
パラメータが1つの場合、
Range("A1") やRange("A1:C3")のように文字列で範囲を示します。
したがって、
Range(Cells(1, 1)) の時は、
Cells(1, 1) の中身が"C3"のようなアドレスを示す文字列でなければなりません。
プログラムを実行したら、Cells(1, 1) は単なる数字でした。
この場合、
Set すとり = .Cells(1, 1)
又は、
Set すとり = .Range(Cells(1, 1), Cells(1, 1))
にすべきです。

投稿日時 - 2017-05-12 07:38:39

補足

今のは
結構、失礼な
言い、方
でしたね
済みません

有り難うございます

すとり
は、元は
すとりんぐ
で、して

.Range(cells(1,1).cells(100,100)).ADDRESS
と、元々は
していた
の、ですが

多領域指定や
アドレスを
突けた、際の
問題を、排除
する、ため

急遽
簡略化した、上
レンジに、した
の、ですが

質問文には
簡略化
等は、した
ものの
Setを、書き忘れました

そんな、次第
です
済みません

投稿日時 - 2017-05-12 08:09:04

お礼

あぁ
失礼

Set 突けても
エラー、なのです

投稿日時 - 2017-05-12 07:55:32

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問