[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『SPECIALCELLSが正常に働かない』(x11eUser)
テスト用に下記のプログラムを作りました。 TESTCALLを実行すると期待通りの答えが出てきますが、 TESTRUNを任意のセルに「=TESTRUN(B27:B36)」とセットして 計算を実行したところ、Function TESTが実行されますが、 このとき、SPECIALCELLSによって絞込みが行われません。 どこに問題があるのかお手上げの状態になっています。 どなたかお教え頂けないでしょうか。よろしくお願いします。
EXCEL2003、WindowsXPで動かしています。
'------------------------------------------------
Sub TESTCALL()
Dim xRange As Range
Dim Ans
Set xRange = Range("B27:B36") Ans = TEST(xRange) End Sub
'------------------------------------------------
Function TESTRUN(xParam)
Dim xRange As Range
Dim Ans
Set xRange = xParam Ans = TEST(xRange) End Function '-------------------------------------------------------------------- ' 呼ばれるプログラム '-------------------------------------------------------------------- Function TEST(xParams) Dim xErrorMSG As String Dim xObject Dim xRange As Range On Error Resume Next ' Set xObject = Selection Set xObject = xParams If TypeName(xObject) = "Range" Then With xObject Set xRange = .SpecialCells(xlCellTypeAllFormatConditions) Call ErrMSG2(xRange, Err.Number, "AllFormatConditions") Set xRange = .SpecialCells(xlCellTypeAllValidation) Call ErrMSG2(xRange, Err.Number, "AllValidation") Set xRange = .SpecialCells(xlCellTypeBlanks) Call ErrMSG2(xRange, Err.Number, "Blanks") Set xRange = .SpecialCells(xlCellTypeComments) Call ErrMSG2(xRange, Err.Number, "Comments") '--------------------- Set xRange = .SpecialCells(xlCellTypeConstants, xlErrors) Call ErrMSG2(xRange, Err.Number, "Constants, xlErrors") Set xRange = .SpecialCells(xlCellTypeConstants, xlNumbers) Call ErrMSG2(xRange, Err.Number, "Constants, xlNumbers") Set xRange = .SpecialCells(xlCellTypeConstants, xlLogical) Call ErrMSG2(xRange, Err.Number, "Constants, xlLogical") Set xRange = .SpecialCells(xlCellTypeConstants, xlTextValues) Call ErrMSG2(xRange, Err.Number, "Constants, xlTextValues") '--------------------- Set xRange = .SpecialCells(xlCellTypeFormulas, xlErrors) Call ErrMSG2(xRange, Err.Number, "FORMULAS, xlErrors") Set xRange = .SpecialCells(xlCellTypeFormulas, xlNumbers) Call ErrMSG2(xRange, Err.Number, "FORMULAS, xlNumbers") Set xRange = .SpecialCells(xlCellTypeFormulas, xlLogical) Call ErrMSG2(xRange, Err.Number, "FORMULAS, xlLogical") Set xRange = .SpecialCells(xlCellTypeFormulas, xlTextValues) Call ErrMSG2(xRange, Err.Number, "FORMULAS, xlTextValues") '--------------------- Set xRange = .SpecialCells(xlCellTypeLastCell) Call ErrMSG2(xRange, Err.Number, "LastCell") Set xRange = .SpecialCells(xlCellTypeSameFormatConditions) Call ErrMSG2(xRange, Err.Number, "SameFormatConditions") Set xRange = .SpecialCells(xlCellTypeSameValidation) Call ErrMSG2(xRange, Err.Number, "SameValidation") Set xRange = .SpecialCells(xlCellTypeVisible) Call ErrMSG2(xRange, Err.Number, "Visible") End With End If Exit Function NotFound: On Error Resume Next End Function
'------------------------------------------------------------
Sub ErrMSG2(xRange, xErrNo, xOder)
If xErrNo = 0 Then MsgBox xOder & "…OK Special Cell's Count=" & xRange.Cells.Count Else MsgBox xOder & "…NG Err=" & xErrNo Err.Clear End If End Sub
具体的に、どのSpecialCellsで絞り込みが行われなかったのかな? 基本的には、該当のものがあれば領域取得ができるし、なければエラーになるよね。
ところで、該当のものがない場合でも、左辺のオブジェクトはNothingにはならないということは認識してるかな? 左辺に対しては【何も行われない】ので、直前に成功した時のものになっているよ。
あと、これは、Functionプロシジャ仕立てになっていて、だから Ans = TEST(xRange) というコードになっているわけだけど 実際は、SpecialCellsの機能を確認する、プロシジャなんだよね。(テーマとは関係ないけど)
(ぶらっと)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.