Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2013)
変数の設定について
投稿日時: 20/01/03 15:34:09
投稿者: OkabeS

以下コードを実行すると、"オブジェクトが必要です"とエラーが出ます。
どの部分が間違っているのか分かりません。。
どなたか教えていただけますか?
 
Sub A()
  
dim ActiveRow As Long, stock As Long,stock2 As Long,alt As Long
 
set ActiveRow = ActiveCell.Row
set stock = Rows(1).Find("STOCK").Column
set stock2 = Rows(1).Find("Stock2").Column
set alt = Rows(1).Find("alt").Column
  
 
LastRow = Range("A" & Rows.Count).End(xlUp).Row
Range("G2:G" & LastRow).SpecialCells(xlCellTypeVisible).Select
 
    For Each r In Selection
        r.Formula = "=" & r.Value & "+VLOOKUP(" & Cells(ActiveRow, alt).Address(False, False) & ",A:P," & stock & ",0)"
    Next r
     
 
 End Sub

回答
投稿日時: 20/01/03 16:29:06
投稿者: WinArrow
投稿者のウェブサイトに移動

Set 命令の使い方が間違っています。
 
オブジェクト型ではない変数に「値」を格納する場合、
Set命令は使えません。
 
Set を外してみてください。

投稿日時: 20/01/03 16:35:35
投稿者: OkabeS

WinArrow様
 
ご確認ありがとうございます。
ただ、Setをはずしたところ、以下エラーが出てしまいます。
"オブジェクト変数またはWithブロック変数が設定されていません"
 

回答
投稿日時: 20/01/03 16:44:12
投稿者: WinArrow
投稿者のウェブサイトに移動

追記
 
(1)
掲示板にコードを記述する場合、
手入力せずに、コードペインからコピペしましょう。
 
(2)変数は、必ず宣言する習慣にしましょう。
モジュールの先頭に
Option Explicit
を記述すれば、変数が未宣言は、EXCEL君が教えてくれます。
 
「ツール」「オプション」⇒「変数の宣言を強制する」にチェックを入れておくと便利です。
 
(3)
セルは「Select」しない記述を心がけましょう。
シート名で修飾するようにしましょう。
 
 
 
 
 

回答
投稿日時: 20/01/03 16:54:37
投稿者: WinArrow
投稿者のウェブサイトに移動

OkabeS さんの引用:
WinArrow様
 
ご確認ありがとうございます。
ただ、Setをはずしたところ、以下エラーが出てしまいます。
"オブジェクト変数またはWithブロック変数が設定されていません"
 

 
回答者は、貴方のPCの画面はみえません。
修正したコードとエラーの出たところ(行が黄色になっている)を
掲示して貰わないと、回答できません。

回答
投稿日時: 20/01/03 17:50:24
投稿者: WinArrow
投稿者のウェブサイトに移動

>"オブジェクト変数またはWithブロック変数が設定されていません"
推測ですが
 
セルの「値」が、FINDで指定した「値」と違うのではないでしょうか?
 
"STOCK"
"STOCK2"
"Alt"
が入っているセルが1行目に存在しない

回答
投稿日時: 20/01/03 17:54:59
投稿者: WinArrow
投稿者のウェブサイトに移動

少し、コードが乱暴ではないかと思います。
 
↓のようにすれば、うっかりミスもはっきりするでしょう。
 
    If WorksheetFunction.CountIf(Rows(1), "STOCK") > 0 Then
        stock = Rows(1).Find("STOCK").Column
    Else
        MsgBox "STOCKが存在しません。"
    End If

回答
投稿日時: 20/01/03 19:46:20
投稿者: WinArrow
投稿者のウェブサイトに移動

エラーになる、もう一つの可能性は、
 
検索しようとしているシートがアクテイブになっていない。
Rows(1)
がシートで修飾されていないので
この時、アクティブになっているシートが検索されます。
 
現状のコードを壊さない範囲内で
最初に
Sheets()検索対象シート名).Activate
のようなコードを実行すれば、確実にヒットするかも

投稿日時: 20/01/03 21:48:22
投稿者: OkabeS

WinArrow様
 
色々とご指摘、ご指導ありがとうございます。
今確認できない環境ですが、FINDで指定した「値」が違う可能性が高い
気がしています。
確認いたします。

投稿日時: 20/01/03 22:00:28
投稿者: OkabeS

WinArrow様
 
ご指摘頂いた通り、FINDで指定した「値」が違っていたことが原因でした。
その他教えていただいた点も気をつけるようにいたします。
ありがとうございました。