|
▼浜口 さん:
おはようがざいます。
私の方では、Excel2000、Excel2002で確認しましたが、
浜口 さんが意図するような結果が表示されています。
>>'===================================
>>Sub test()
>> Dim ans As Range
>> On Error Resume Next
>> Set ans = Range("a2:e2").SpecialCells(xlCellTypeFormulas, xlNumbers)
>> If Err.Number = 0 Then
msgbox ans.address
' これで変数ansにどんなセル範囲が入っていますか?
' こちらで確認すると、「$A$2:$B$2,$D$2:$E$2」と表示されます
>> ans.Copy
>> Range("a4").PasteSpecial xlPasteValues
>> Application.CutCopyMode = False
>> End If
>> on error goto 0
>>End Sub
>>これで確認してみて下さい。
>
>試してみましたが、やはりダメでした。
>
>ちなみに、ご伝授の式にある[Err.Number = 0 ]というのは
>どんなエラーの場合なのでしょうか?
Set ans = Range("a2:e2").SpecialCells(xlCellTypeFormulas, xlNumbers)
でセル範囲A2:E2の中で数式の結果が数値のセル範囲を取得しています。
Err.Number=0は、エラーが発生せずに正常にセル範囲が取得できた場合だけ
処理を行うようにしています。
エラーになる場合は、A2:E2がすべて""だった場合です。
浜口 さんが提示された例だと・・・、
A1:E1が 1,2,0,3,4で
A2:E2の数式が=IF(A1=0,"",A1)と言うことで
結果、1,2,,3,4という表示がされているとの事ですから、
この場合は、変数ansに結果が数値のセル範囲($A$2:$B$2,$D$2:$E$2)
が格納されるはずなのです。
>素人ですみません。
>というのも、ご伝授の式ですと
>エラー0でない場合は、処理を中止するという意味ではないでしょうか?
>
>色々試行錯誤してますが、
>どうも、関数式で得られた空白セルから
>コピー ⇒ 値のみ貼り付け
>ですと、
>空白セルとは、認知していないようです。
>何か方法が、他にないでしょうか?
Excelのバージョンは何でしょうか?
2003だとしたら、確認はしていませんが・・・。
|
|