can''t get countif function to work in v 3.3 final

I have 2 issues - result value, and syntax. countif description says: --------------------------------------- Counts the number of cells within a range that meet the given criteria. Syntax COUNTIF(range,criteria) range is the range of cells from which you want to count cells. criteria is the criteria in the form of a number, expression, or text that defines which cells will be counted. For example, criteria can be expressed as ">32". ------------------------------------------------ This seems to say that if A1 = 0 and A2 = 1, then =countif(A1:A2,NOT(A0 = 0)) should result in a value of 1 (assume ''using zero row notation'' is on). But my testing shows that it results in a value of 0 on line 1 and 2 on line 2. It''s as if the logic is actually ''return the count of A1:A2 if the current line''s A column is not = 0, otherwise return 0''. Second issue: I can''t just write: =countif(A1:A2,">0") because it complains about the second arg. Also I can''t write: =countif(A1:A2,A0 = 1) because it complains that there are not enough args on the stack, which means it did not recognize ''A0 = 1'' as an expression. I''ve seen this problem before.

3 Replies

AD Administrator Syncfusion Team November 1, 2005 07:09 PM UTC

Where are you seeing these results? If I open \Essential Studio\3.3.0.0\Windows\Calculate.Windows\Samples\DataGridCalculator,and enter this formula into cell B4, it comes back with the value of 2. =countif(a1:a3, ">1")


BT Byron Tate November 1, 2005 08:01 PM UTC

I confirm that the demos work correctly for countif. I apologize for not trying them first. The problem is more complicate because I''m using some unpublished public methods on the engine. I get and use the Parse method like this, as per instructions I got from one of my Direct-trac issues concerning performance for large grids: System.Reflection.MethodInfo ParseFormulaInfo; private string ParseFormula(string formula) { if(ParseFormulaInfo == null) { ParseFormulaInfo = typeof(GridFormulaEngine).GetMethod("Parse", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Public , null, new Type[1]{typeof(string)}, null); } object os = null; if(ParseFormulaInfo != null) { os = ParseFormulaInfo.Invoke(m_Engine, new object[]{formula}); } return os.ToString(); } I call my function, ParseFormula with a string which is one of my named ranges preceeded by ''=''. "count(J1:J2)" works OK as the value of the named range. But in this case the value of the named range is: "countif(J1:J2,\">1200\")" the countif statement gives an ArgumentOutOfRangeException, which occured in mscorlib.dll, with added info "Length cannot be less than zero" I understand that I have a non-standard use of the engine here, and it''s working great so far with all my issues that have been posted in direct-trac. I have not ever tried this particular function up till now, and I know I could write my own. So I don''t expect you to spend a lot of time debugging this since you don''t have my complete code setup.


AD Administrator Syncfusion Team November 2, 2005 09:49 AM UTC

The problem is with using quoted strings inside namedranges. These are not being parsed properly(strings are cached before the namedranges are substituted-meaning that the strings inside namedranges are not properly cached). We will have to fix this in our source code. I do not know of a work around for this.

Loader.
Up arrow icon