[[20051001202618]] 『実行時エラー』(hori) ページの最後に飛ぶ

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

 

『実行時エラー』(hori)
お世話になります。教えてください。

RangeA2にVLOOKUP関数で別シートのリストから抽出しオートフィルで下にコピーするマクロを組みました。

Range("A2").Select

ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[4],リスト!R[-14]C[-5]:R[-13]C[-],2,0)"

 hani = Range("B65536").End(xlUp).Row

 Range("A2").AutoFill Destination:=Range("A2:A" & hani)

リストにないものは#N/Aとなるので、エラー行を空白とするために、下記の様に変更したところ「実行時エラー’1004'」
「アプリケーション定義または、オブジェクト定義のエラーです。」
となりました。

何処が悪いのか判りません。
何方か教えていただければ幸いです。

Range("A2").Select

ActiveCell.FormulaR1C1 = "=IF(ISNA(VLOOKUP(RC[4],リスト!R[-14]C[-5]:R[-13]C[-4],2,0)),"",VLOOKUP(RC[4],リスト!R[-14]C[-5]:R[-13]C[-4],2,0))"

hani = Range("B65536").End(xlUp).Row

Range("A2").AutoFill Destination:=Range("A2:A" & hani)


 ActiveCell.FormulaR1C1 = "=IF(ISNA(VLOOKUP(RC[4],リスト!R[-14]C[-5]:R[-13]C[-4],2,0))," ←ここまでで
 セルに入力する数式と認識されてしまうのではないですか?
 ""の代わりに null としたらどうなりますか?
(純丸)(o^-')b

(hori)
純丸さんありがとうございます。

""をnullとしたところ、実行時エラーは無くなりました。

が、リストにないものは空白とならず#NAME?となりました。

リストにあるものは正しく抽出できました。


 私の浅い知識で、null が使えると思ったのですがだめでしたか。
 そうか、直接のコードじゃなくて、セルに数式で入るからですね、多分。
 困った時はマクロの記録、ということで検証してみたら、"" の代わりに
 """" とすればよさそうです。
(純丸)(o^-')b

おはようございます。遅くまでありがとうございました。

実際の作業用シートで早速NULLを""""に変更しました。

ところがリストに無いものは空白となり良いのですが、

今度はリストに有って正しく抽出されていたものが、

#REF!となってしまいました。

式が入ったセルを見て不思議なことに気づいたのですが、

リストに有るもののセルには

=IF(ISNA(VLOOKUP(A2,リスト!#REF!,2,0)),"",VLOOKUP(A2,リスト!#REF!,2,0))

が入っています。

リストに無いもののセルには

=IF(ISNA(VLOOKUP(A2,リスト!D65524:E65525,2,0)),"",VLOOKUP(A2,リスト!E65524:E65525,2,0))

となっており、参照するリストの範囲が変わって、しかも""""としたのが""になっているのです。

なぜでしょうか?不思議です。


 不思議ですね。そろそろ私のスキルではお手上げかもしれません。
 正しい数式を手入力する作業をマクロの記録したら どうなるでしょうか?
 あと全然別のことですが、VLOOKUPの参照範囲が相対参照でいいのですか?
(純丸)(o^-')b 

 下から、失礼します。			

 >ActiveCell.FormulaR1C1 =	
 では無く、		
 ActiveCell.Formula =	
 で、記入してみるには如何でしょう?		

 例:		
 ActiveCell.Formula = "=IF(ISNA(VLOOKUP(A2,リスト!範囲,2,0)),"""",VLOOKUP(A2,リスト!範囲,2,0))"

 純丸さんが仰っている、
 >VLOOKUPの参照範囲が相対参照でいいのですか?
 が関係しているだけかも・・・

 (キリキ)(〃⌒o⌒)b

純丸さんキリキさん

おっしゃるとおり参照範囲が相対参照だったことが原因でした。

絶対参照に変更が解決しました。

ありがとうございました。

(hori)


 出掛けている間に解決してよかったです。(´o`)>ホッ 
 拙い回答で失礼しました。キリキさんもありがとう。
 ひとつだけ(懲りずに)追加すると、特にフィルをする理由が
 なければ、範囲を指定して一遍に入力させる方が普通と思います。
(純丸)(o^-')b

 hani = Range("B65536").End(xlUp).Row
 Range("A2:A" & hani").Formula = "=IF(ISNA(VLOOKUP(A2,・・・・ 


コメント返信:

[ 一覧(最新更新順) ]


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