Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10277 / 13646 ツリー ←次へ | 前へ→

【22654】関数がエラーとなってしまう もぐ 05/2/25(金) 16:54 質問[未読]
【22656】Re:関数がエラーとなってしまう G-Luck 05/2/25(金) 17:52 回答[未読]
【22710】Re:関数がエラーとなってしまう もぐ 05/3/1(火) 1:29 お礼[未読]
【22715】Re:関数がエラーとなってしまう G-Luck 05/3/1(火) 8:21 回答[未読]
【22776】Re:関数がエラーとなってしまう もぐ 05/3/3(木) 1:01 お礼[未読]

【22654】関数がエラーとなってしまう
質問  もぐ  - 05/2/25(金) 16:54 -

引用なし
パスワード
   はじめまして。列削除とリンクの関係についての質問です。

マクロで列削除を行うと、削除した列のセルを参照している別シートの関数が「#REF」となってしまいます。

    列NからOをマクロで削除
    Sheets(SHEET1).Columns("N:O").Delete Shift:=xlToLeft

    この処理を実行すると、別シートの関数
    「=IF(I$4="","",INDEX(SHEET1!$N$12:$O$12,I$4))」の
    「$N$12:$IV$12」の部分が#REFとなってしまう。

マクロでなく、手作業で列を削除するとこのような現象は起こりません。
お分かりになる方、よろしくお願いいたします。

【22656】Re:関数がエラーとなってしまう
回答  G-Luck  - 05/2/25(金) 17:52 -

引用なし
パスワード
   ▼もぐ さん:
>はじめまして。列削除とリンクの関係についての質問です。
>
>マクロで列削除を行うと、削除した列のセルを参照している別シートの関数が「#REF」となってしまいます。
>
>    列NからOをマクロで削除
>    Sheets(SHEET1).Columns("N:O").Delete Shift:=xlToLeft
>
>    この処理を実行すると、別シートの関数
>    「=IF(I$4="","",INDEX(SHEET1!$N$12:$O$12,I$4))」の
>    「$N$12:$IV$12」の部分が#REFとなってしまう。
>
>マクロでなく、手作業で列を削除するとこのような現象は起こりません。
>お分かりになる方、よろしくお願いいたします。

G-Luckといいます。

式のタイプミスではないですか?
=IF(I$4="","",INDEX(SHEET1!$N$12:$O$12,I$4))
=IF(I$4="","",INDEX(SHEET1!$N$12:$IV$12,I$4))

IVですと、私の環境(Excel2003,WinXP)では、
Excel上からの削除も、VBAからの削除も正常に計算してくれるのですが。

【22710】Re:関数がエラーとなってしまう
お礼  もぐ  - 05/3/1(火) 1:29 -

引用なし
パスワード
   ▼G-Luck さん:
お答えをいただき、ありがとうございます。

IVで以下のように実行してみましたが、うまくいきませんでした。
  Sheets(SHEET1).Columns("N:IV").Delete Shift:=xlToLeft
  別シートのセル
  =IF(I$4="","",INDEX(SHEET1!$N$12:$IV$12,I$4)) ←エラー

ただ以下のように、削除を2回に分けたらうまくいきました。
  Sheets(SHEET1).Columns("IV:IV").Delete Shift:=xlToLeft
  Sheets(SHEET1).Columns("N:IU").Delete Shift:=xlToLeft
  別シートのセル
  =IF(I$4="","",INDEX(SHEET1!$N$12:$IV$12,I$4)) ←OK

ちなみにEXCEL2000です。2000と2003では違うのでしょうか。
お手数をおかけいたしました。


>▼もぐ さん:
>>はじめまして。列削除とリンクの関係についての質問です。
>>
>>マクロで列削除を行うと、削除した列のセルを参照している別シートの関数が「#REF」となってしまいます。
>>
>>    列NからOをマクロで削除
>>    Sheets(SHEET1).Columns("N:O").Delete Shift:=xlToLeft
>>
>>    この処理を実行すると、別シートの関数
>>    「=IF(I$4="","",INDEX(SHEET1!$N$12:$O$12,I$4))」の
>>    「$N$12:$IV$12」の部分が#REFとなってしまう。
>>
>>マクロでなく、手作業で列を削除するとこのような現象は起こりません。
>>お分かりになる方、よろしくお願いいたします。
>
>G-Luckといいます。
>
>式のタイプミスではないですか?
>=IF(I$4="","",INDEX(SHEET1!$N$12:$O$12,I$4))
>=IF(I$4="","",INDEX(SHEET1!$N$12:$IV$12,I$4))
>
>IVですと、私の環境(Excel2003,WinXP)では、
>Excel上からの削除も、VBAからの削除も正常に計算してくれるのですが。

【22715】Re:関数がエラーとなってしまう
回答  G-Luck  - 05/3/1(火) 8:21 -

引用なし
パスワード
   ▼もぐ さん:
失礼しました。思い違いをしていました。

セル参照範囲も、列削除範囲も、$N$12:$IV$12なのですね。
であるなら、マクロ実行でも手作業で実行しても、式は#REF!になると思います。

参照範囲自身に手を加えると、Excel自身が自動で判定してしまうからです。
(コピーや移動の時は便利なんですが)
なので、INDIRECT関数を使われてはいかがですか?


A2に、SHEET1!$N$12:$IV$12 と入力
式は
=IF(I$4="","",INDEX(INDIRECT(A2),I$4))
に変更。

もぐさんの削除の分割もいいと思います。後は、どのようなことを実現したいのかによって、いろいろな方法があると思います。

【22776】Re:関数がエラーとなってしまう
お礼  もぐ  - 05/3/3(木) 1:01 -

引用なし
パスワード
   ▼G-Luck さん:

分かりにくい記述で申し訳ありませんでした。
教えていただいたINDIRECT関数を使ったらうまくいきました。
処理によって、どの関数を使うのが最適かを判断するのは難しいですね。
お答え、本当にありがとうございました。

10277 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free