私はDelphiXE3を使用しており、Excelから数値タイプのセルを読み取るためのアプリケーションを開発しています。TStringGrid
このインポートに使用しています。
それらを文字列グリッドに移動する方法はすでに知っていますが、Excelのような数学関数を実行することはできません。文字列グリッドの選択したセル値の最小値、最大値、平均値を計算するにはどうすればよいですか?
私はDelphiXE3を使用しており、Excelから数値タイプのセルを読み取るためのアプリケーションを開発しています。TStringGrid
このインポートに使用しています。
それらを文字列グリッドに移動する方法はすでに知っていますが、Excelのような数学関数を実行することはできません。文字列グリッドの選択したセル値の最小値、最大値、平均値を計算するにはどうすればよいですか?
次の機能を試すことができます。現在の文字列グリッドの選択で見つかった数値の数を返します。渡された宣言されたパラメーターに、現在の選択の数値(ある場合)から最小値、最大値、および平均値を返します。
uses
Math;
function CalcStats(AStringGrid: TStringGrid; var AMinValue, AMaxValue,
AAvgValue: Double): Integer;
var
Col, Row, Count: Integer;
Value, MinValue, MaxValue, AvgValue: Double;
begin
Count := 0;
MinValue := MaxDouble;
MaxValue := MinDouble;
AvgValue := 0;
for Col := AStringGrid.Selection.Left to AStringGrid.Selection.Right do
for Row := AStringGrid.Selection.Top to AStringGrid.Selection.Bottom do
begin
if TryStrToFloat(AStringGrid.Cells[Col, Row], Value) then
begin
Inc(Count);
if Value < MinValue then
MinValue := Value;
if Value > MaxValue then
MaxValue := Value;
AvgValue := AvgValue + Value;
end;
end;
Result := Count;
if Count > 0 then
begin
AMinValue := MinValue;
AMaxValue := MaxValue;
AAvgValue := AvgValue / Count;
end;
end;
使用例は次のとおりです。
procedure TForm1.Button1Click(Sender: TObject);
var
MinValue, MaxValue, AvgValue: Double;
begin
if CalcStats(StringGrid1, MinValue, MaxValue, AvgValue) > 0 then
Label1.Caption :=
'Min. value: ' + FloatToStr(MinValue) + sLineBreak +
'Max. value: ' + FloatToStr(MaxValue) + sLineBreak +
'Avg. value: ' + FloatToStr(AvgValue)
else
Label1.Caption := 'There is no numeric value in current selection...';
end;
もう1つの章は、文字列グリッドの選択が変更されたときに通知を受け取る方法です。のようなイベントを実装するためのイベントも仮想メソッドもありませんOnSelectionChange
。しかし、それは別の質問のトピックになります。