ここから本文です

Excel VBAで実行時エラー'1004'が発生します。原因を教えてください。

tox********さん

2010/4/814:14:05

Excel VBAで実行時エラー'1004'が発生します。原因を教えてください。

下記のコードの◎のところで、"アプリケーション定義またはオブジェクト定義のエラーです。"となってしまいます。


Private Sub CommandButton1_Click()
row = Selection.row '行取得
first_clmn = Cells(row, 2).End(xlToRight).Column '最初のデータの列
col = Cells(row, first_clmn).Interior.ColorIndex ◎
val = Cells(row, first_clmn).Value ◎


変数colやvalで使っているfirst_clmnの値に直接数値を入力するとエラーは起きないので、
変数first_clmnに不具合があると思うのですがどこに不具合があるのかわかりません。
ご存知の方、原因を教えて下さい。
よろしくお願いします。

補足hotosysさん早速の回答ありがとうございます。
>もしかしたら質問のプログラムはエラーが起きたプログラムそのものをコピーしてはいないのでしょうか?
はい、色々省略してしまいました。わかりづらくてすみません。

エラーの前にfirst_clmnとrowの値をMsgBoxでも、デバック中にも確認してみたのですが値が入っていました。

xlToRight,Cells,first_clmn,Selection.Row,Excel VBA,MsgBox row,Dim Row As Long

閲覧数:
56,220
回答数:
1

違反報告

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

hot********さん

2010/4/905:07:31

少なくても宣言(Dim)をしていない場合、valは組み込み関数なので、そのまま変数としては使えないと思います。
実行以前にコンパイルエラーになると思います。
もしかしたら質問のプログラムはエラーが起きたプログラムそのものをコピーしてはいないのでしょうか?
質問のプログラムで
>"アプリケーション定義またはオブジェクト定義のエラーです。"
となるのは、first_clmnやrowのタイプミスで、cells(行,列)の行か列の値がEmptyなどの許されない値になっている場合が多いと思うのですが、間違っていませんか?

またはエラーの前の行に
MsgBox first_clmn
MsgBox Row
を入れて、first_clmnとrowの値を確認してみてください。


【 補足への回答 】
実際には質問のプログラムの
>col = Cells(row, first_clmn).Interior.ColorIndex
ではエラーは起こらないのですが・・・
>val = Cells(row, first_clmn).value
ではval(文字列)は、文字列を数値に変換するVBAの組み込み関数名なので、エラーになると思いますが、違うエラーになると思います。

エラーが起こった時点でデバッグを押して、ウォッチで各変数の値を調べるのが一番わかると思うのですが・・・(画像参照)

または、
>col = Cells(row, first_clmn).Interior.ColorIndex
でエラーで止まるのだったら
On Error Resume Next
col = Cells(row, first_clmn).Interior.ColorIndex
If Err.Number <> 0 Then
MsgBox Err.Description
MsgBox row
MsgBox first_clmn
End If
On Error GoTo 0
に変更してみて、変数の値をチェックしてみてください。


また、下のプログラムはちゃんと動くか試してみて、動くならそこから変更してみてください。
動かない場合は・・・動くと思うのですが。
Private Sub CommandButton1_Click()
Dim row As Long
Dim first_clmn As Integer
Dim col As Integer
Dim val As Variant
row = Selection.row '行取得
first_clmn = Cells(row, 2).End(xlToRight).Column '最初のデータの列
col = Cells(row, first_clmn).Interior.ColorIndex
val = Cells(row, first_clmn).value
MsgBox col
MsgBox val
Cells(row, first_clmn).Select
End Sub

それぐらいしかわかりません、ごめんなさい。

p.s.
それと
>first_clmn = Cells(row, 2).End(xlToRight).Column '最初のデータの列

first_clmn = Cells(row, 1).End(xlToRight).Column
にしないと、最初のデータが1日の場合は選択しないと思います。

それと、画像をアップするために一度回答を削除しました。(修正では画像をアップできないため)

少なくても宣言(Dim)をしていない場合、valは組み込み関数なので、そのまま変数としては使えないと思います。...

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

2010/4/9 14:48:27

笑う 無事解決できました!

質問するときに省略してしまった変数の宣言文が間違えていました。
全部Stringでいいだろうと勝手に思い込んで全ての変数をStringで宣言してました。
参考に省略してないコードを載せてくださったおかげでわかりました。
本当にありがとうございました!

あわせて知りたい

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

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

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

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

閉じる

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

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

閉じる