|
|
|
遊緑地設計 |
|
|
Procedure WS_Util; var Sheet_h, NewSheet_h : handle ; Max_row, Max_col , i , K_col : INTEGER ; CellStr_Array : ARRAY[ 1..100 ] OF string ;
{-----行を列に変換するだけの簡単なプログラムです。一回に1行のみ処理出来ます。応用すれば列ー>行や複数行の処理も可能です。ただし、VectorScriptには選択セル位置を取得する関数が無いので、セル位置の指定は何らかの形で必要になります。 今回は配列を使って、シートからシートへデータを渡す処理を考えましたが、例えばシート二つを同時に開いておいて、リアルタイムでデータを渡していけば配列を使わないで処理可能です。又、今回のように配列を使ったならば、書出しシートを作らずとも既存のシートに上書き処理が可能です。 今回のコードは解答例の一つです。コードを書く人の数だけ処理方法があると思います。-------}
{===================メインルーチン====================} begin {-----開いているワークシートのハンドルを取得-------} Sheet_h := ActSSheet ;
{-----ハンドルがある場合の処理-------} if Sheet_h <> nil then begin {-----ループカウンタ初期化-------} i := 0 ;
{-----ワークシートのサイズを取得-------} SprdSize( Sheet_h, Max_row , Max_col );
{-----ワークシートの何行目を処理するか質問-------} K_col := IntDialog( '何列目を行ー>列変換しますか?' , '1' );
{-----キャンセルで無く、行指定が0より大きく最大行以下で、さらに100以下の場合は処理実行(100の部分は配列宣言により変更可能)-------} if ( not didcancel ) and ( K_col > 0 ) and ( K_col <= Max_col ) and ( K_col <= 100 ) then begin
{-----既存セル数値取得用ループ処理-------} repeat
{-----ループカウンタ増加-------} i := i + 1 ;
{-----セルの値を配列に代入する。配列の番号にはカウンタを代入-------} CellStr_Array[ i ] := GetCellStr( Sheet_h, i, K_col );
{-----カウンタが100か、最大行になったならループ終了-------} until ( i = 100 ) or ( i = Max_row ) ;
{----行列変換後の値を入力するワークシートを新しく製作-------} NewSprdSheet( '行ー>列変換', 0, 0, Max_row , Max_row , false, true );
{-----新しいワークシートのハンドルを取得-------} NewSheet_h := ActSSheet ;
{-----ループカウンタ初期化-------} i := 0 ;
{-----行列変換代入用ループ処理-------} repeat
{-----ループカウンタ増加-------} i := i + 1 ;
{-----行と列を入れ替えて新しいワークシートに入力。配列の番号と列指定にはカウンタを代入-------} LoadCell( 1 , i , CellStr_Array[ i ] );
{-----カウンタが100か、最大行になったならループ終了-------} until ( i = 100 ) or ( i = Max_row ) ;
end ;
{-----指定行が100を超える場合の警告-------} if K_col > 100 then AlrtDialog('100列目以下しか処理できません。');
{-----ハンドルが無い場合の処理-------} end else begin sysbeep; AlrtDialog('ワークシートを開いて下さい!'); end ;
end; run( WS_Util ); |