Translate

2011年6月25日土曜日

vbscriptメモ

■CUIから実行
cscript ファイル名.vbs で実行

オプション :
//B バッチ モード : スクリプトのエラーおよびプロンプトを非表示にする
//D アクティブ デバッグを使用可能にする
//E:engine スクリプト実行時にエンジンを使用する
//H:CScript 既定のスクリプト ホストを CScript.exe に変更する
//H:WScript 既定のスクリプト ホストを WScript.exe に変更する (既定値)
//I 対話モード (既定値、//B と逆の動作)
//Job:xxxx WSF ジョブを実行する
//Logo ロゴを表示する (既定値)
//Nologo ロゴを表示しない : 実行時に見出しを表示しない
//S このユーザーの現在のコマンド ライン オプションを保存する
//T:nn 秒単位のタイムアウト時間 : スクリプトを実行できる時間の最大値
//X デバッガでスクリプトを実行する
//U コンソールからリダイレクトされた I/O に Unicode を使用する

例えば、実行時にロゴ↓を表示したくなければ・・・
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

cscript ファイル名.vbs //Nologo とすればよい


■算術演算子
msgbox 7 + 5 '12
msgbox 7 - 5 '2
msgbox 7 * 5 '35
msgbox 7 / 5 '1.4
msgbox 7 \ 5 '1(商)
msgbox 7 Mod 5 '2(余り)
msgbox 7 ^ 5 '16807

■制御文
'If文
If 条件1 THen 処理1

If 条件2 Then
    処理2
ElseIf 条件3 Then
    処理3
ELse
    処理4
End If

'Select Case文
Select Case 値
    Case 値1
        処理1

    Case 値2, 値3
        処理2

    Case 値4, 値5, 値6
        処理3
 
    Case Else
        処理4
End Select

'For文
For 変数 = 初期値 To 最終値 [Step 変化量]
    処理
Next

'For Each文
For Each 変数 In コレクションor配列
    処理
Next

'While文
While 条件
    処理(条件がTrueの間ループする)
Wend

'Do Loop文
Do While 条件
    処理(条件がTrueの間ループ)
Loop


Do
    処理(条件がTrueの間ループ)
Loop While 条件


Do Until
    処理(条件がFasleの間ループ)
Loop

Do
    処理(条件がFalseの間ループ)
Loop Until 条件


■エラー処理
'On Error Resume Next から OnError GoTo 0の間は
'エラーを無視する
On Error Resume Next
    エラーの起きそうな処理

    msgbox Err.Number      'エラーの番号 エラーがない時は0
    msgbox Err.Description 'エラーの説明
    Err.Clear 'エラーの初期化 連続してエラーがおきそうな場合はその都度判定し、クリアする

On Error GoTo 0

■文字列操作
・Replace関数
変数 = Replace(引数1、引数2、引数3[、引数4、引数5、引数6]

引数1…置換を実施する文字列を指定
引数2…引数1から探し出す文字列
引数3…引数2と置き換える文字列
引数4…検索開始位置(1以上の整数)
引数5…置換を実施する回数。-1or指定しないは全て置換
引数6…文字列比較モード vbBinaryCompare or vbTextCompare

引数6を指定→引数4,引数5も指定
引数5を指定→引数4も指定


■Timerで100分の1以下を取得する
Timerで表示されるのは0時から現在までの秒を100分の1秒まで返してくれる。
例)85547.14

それ以下の値が欲しい場合は整数部を取り除くと取り出すことができる。
Dim CurrentTime : CurrentTime  = Timer '86274.84
Dim IntegralPart: IntegralPart = Fix(CurrentTime) '86274
Dim FractionPart: FractionPart = CurrentTime - IntegralPart '0.84375

msgbox FractionPart

2011年5月22日日曜日

ちょいとExcelVBAのメモ

■Application.ActiveCell.Address
ReadOnly
意味:現在選択しているセルを返します


■Application.Calculation
値 :xlCalculationManual/xlCalculationAutomatic
意味:xlCalculationManualの時、手動で更新をしないと値がかわりません。
   計算式を多数含む状態のシートに値を大量に入力するのであれば一度手動にしてから実行した方が高速になります。
   ※手動中にマクロが停止すると、手動のままとなるのでエラートラップする
    なりしてマクロが終了する前に必ず戻す必要があります。

■Application.CalculationState
値 :xlDone/xlPending
意味:Excel で実行されているすべての計算について、アプリケーションの計算状態を示すXlCalculationState クラスの定数を返します。値の取得のみ可能です。未計算ありだとxlPending(値:2)、計算済だとxlDone(値0)




■Application.EnableEvents
値 :True/False
意味:Falseの時に発生するイベントは無効となる
   ※手動中にマクロが停止すると、イベント無効のままとなるのでエラートラップする
    なりしてマクロが終了する前に必ず戻す必要があります。

■Application.ScreenUpdating
値 :True/False
意味:Falseの時、描画の更新がストップします。
   別のブックを開きたい時など、こっそり作業したい時にも有効です。
   ※手動中にマクロが停止すると、表示が更新されないままとなるのでエラートラップする
    なりしてマクロが終了する前に必ず戻す必要があります。

■Application.Version
値 :各バージョンを示す値
意味:Excelのバージョンを返す。バージョンによってコードを帰る場合に使う。

Excel 2007 12.0
Excel 2003 11.0
Excel 2002 10.0
Excel 2000 9.0
Excel 97 8.0
Excel 95 7.0
Excel 5.0 5.0

2011年4月17日日曜日

prototypeのメモ

/* Stringにアラートするメソッドを追加 */
String.prototype.say = function(){alert(this)};

var str = new String("すとりんぐ");
str.say(); //すとりんぐ


/* Numberの値を2倍にしてアラートするメソッドを追加 */
Number.prototype.doubleSay = function(){ alert(this * 2) };

var num = new Number(123);
num.doubleSay(); //246


/* Functionに名前をアラートするメソッドを追加 */
Function.prototype.nameSay = function(){ alert(this.name) };

function bar(){};
function foo(){};
bar.nameSay(); //bar
foo.nameSay(); //foo


/* Arrayに要素を全てアラートするメソッドを追加 */
Array.prototype.elementSay = function(){
    for(var i = this.length; i--;){
        alert(this[i]);
    }
};

var list = ["a", "b", "c", "d"];
list.elementSay(); //d → c → b → a

/* カスタムコンストラクタの場合 */
var Person = function(name){
    this.name = name;
}

Person.prototype.say = function(){
    alert("I am " + this.name);
};

var human = new Person("Tarou");
human.say(); //I am Tarou

2011年3月31日木曜日

networkdays

ちゃんと動くか確認していないんだけど、
2000では、分析ツールをいれない限りつかえないNETWORKDAYSの代用コードを書いてみた。
あとで検証する。
Function NETWORKDAY(開始日 As Date, 終了日 As Date, Optional 祭日 As Range)
    Dim 日数 As Integer: 日数 = DateDiff("d", 開始日, 終了日) + 1
    Dim 休日 As Integer: 休日 = Int(日数 / 7) * 2
    Dim temp As Integer: temp = 日数 Mod 7
    
    If temp = 1 Then
        If (Weekday(終了日) = 1 Or Weekday(終了日) = 7) Then 休日 = 休日 + 1
    ElseIf temp = 2 Then
        If (Weekday(終了日) = 7 Or Weekday(終了日) = 2) Then 休日 = 休日 + 1
        If (Weekday(終了日) = 1) Then 休日 = 休日 + 2
    ElseIf temp = 3 Then
        If (Weekday(終了日) = 7 Or Weekday(終了日) = 3) Then 休日 = 休日 + 1
        If (Weekday(終了日) < 3) Then 休日 = 休日 + 2
    ElseIf temp = 4 Then
        If (Weekday(終了日) = 7 Or Weekday(終了日) = 4) Then 休日 = 休日 + 1
        If (Weekday(終了日) < 4) Then 休日 = 休日 + 2
    ElseIf temp = 5 Then
        If (Weekday(終了日) = 7 Or Weekday(終了日) = 5) Then 休日 = 休日 + 1
        If (Weekday(終了日) < 5) Then 休日 = 休日 + 2
    ElseIf temp = 6 Then
        If (Weekday(終了日) = 7 Or Weekday(終了日) = 6) Then 休日 = 休日 + 1
        If (Weekday(終了日) < 6) Then 休日 = 休日 + 2
    End If
    
    Dim i As Integer
    For i = 1 To 祭日.Count
        If 開始日 <= 祭日(i) And 祭日(i) <= 終了日 Then
            If Weekday(祭日(i)) <> 1 And Weekday(祭日(i)) <> 7 Then
                休日 = 休日 + 1
            End If
        End If
    Next

    NETWORKDAY = 日数 - 休日
End Function

Sub Auto_Open()
    Application.MacroOptions Macro:="NETWORKDAY", _
                Description:="開始日と終了日の間にある週の日数を計算します。"
End Sub

2011年3月19日土曜日

Jqueryまとめ

■要素の指定方法
 ・セレクタで指定
  $('#[ID名]')、$('.[クラス名]')、$('[HTML]')

 ・親子関係で指定
  $('基準要素 > 対象')・・・基準要素に対し、
                  1階層下に対象要素があると返します
  $('基準要素 対象')・・・・基準要素に対し、
                  その配下に対象要素があると返します。

■要素の絞り込み
 ・絞り込む(1)
  複数の要素を取得した場合、取得した要素の番号で絞り込む
  $('[複数の要素]:eq(インデックス番号)')・・・番号に一致する要素を返す
  $('[複数の要素]:lt(インデックス番号)')・・・番号未満の要素を返す
  $('[複数の要素]:gt(インデックス番号)')・・・番号より大きい要素を返す
  $('[複数の要素]:even')・・・偶数番目の要素だけ返す
  $('[複数の要素]:odd')・・・奇数番目の要素だけ返す
  $('[複数の要素]:first')・・・最初の要素だけ返す
  $('[複数の要素]:last')・・・最後の要素だけ返す
  $('[複数の要素]:not([条件])')・・・条件で指定した要素以外の要素を返す

 ・絞り込む(2)
  複数の要素を取得した場合、子要素の内容でさらに絞り込む
  $('[複数の要素]:contains([テキスト])')・・・子要素に[テキスト]を持っている場合返す
  $('[複数の要素]:has([セレクタ])')  ・・・子要素に[セレクタ]を持っている場合返す
  $('[複数の要素]:has') ・・・子要素に何かある場合返す
  $('[複数の要素]:empty')・・・子要素に何もない場合返す

 ・絞り込む(3)
  複数の要素を取得した場合、子要素のインデックス番号でさらに絞り込み該当する子要素を返す
  $('[複数の要素]:first-child')・・・最初の子要素を返す
  $('[複数の要素]:last-child')・・・最後の子要素を返す
  $('[複数の要素]:nth-child(インデックス番号)')・・・インデックス番号目の要素を返す。ただし最初の番号は1となる
  $('[複数の要素]:only-child')・・・1つの子要素を持つ場合その要素を返す

 ・絞り込む(4)
  可視状態で絞る
  $('[複数の要素]:hidden')・・・display:none/type="hidden"にマッチ
  $('[複数の要素]:visible')・・・上記以外

 ・絞り込む(5)
  属性で絞る
  $('[属性]')・・・該当する属性全ての要素を返す
  $('[属性 = 値]')・・・該当する属性のうち値に一致する全ての要素を返す
  $('[属性 != 値]')・・・該当する属性のうち値に一致しない全ての要素を返す

  $('[属性 ^= 値]')・・・該当する属性のうち値に前方一致する全ての要素を返す
  $('[属性 *= 値]')・・・該当する属性のうち値に部分一致する全ての要素を返す
  $('[属性 $= 値]')・・・該当する属性のうち値に後方一致する全ての要素を返す

  $('[属性 |= 値]')・・・該当する属性のうち値に該当または直後にハイフン(-)がつく全ての要素を返す
  $('[属性 ~= 値]')・・・該当する属性のうち値に該当または直後にスペースがつく全ての要素を返す
  属性の指定は複数同時可

■[clone]対象要素を複製する
$(対象).clone()

■削除する
 ・[detach]対象要素を削除し、変数にとっておく
  $(対象).detach();
  $(対象).detach([セレクタ]);

 ・[remove]対象要素を削除する
  $(対象).remove();
  $(対象).remove([セレクタ]);

 ・[empty]対象要素の子ノードを削除する
  $(対象).empty();

■対象要素(外側)の前後に追加
 ・[after]新規にテキスト、HTMLを対象要素の後に追加
  $(対象).after(内容);
  $(対象).after(function(){ 処理 });

 ・[before]新規にテキスト、HTMLを対象要素の前に追加
  $(対象).before(内容);
  $(対象).before(function(){ 処理 });

■対象要素(内側)の前後に追加
 ・[append]新規にテキスト、HTMLを対象要素の最後に追加(対象要素の内側最後)
  $(対象).append(内容);
  $(対象).append(function(){ 処理 });

 ・[prepend]新規にテキスト、HTMLを対象要素の最後に追加(対象要素の内側最後)
  $(対象).prepend(内容);
  $(対象).prepend(function(){ 処理 });


■[replaceWith]該当する要素を入れ替える
  $(対象).replaceWith()
  $(対象).replaceWith(function(){ 処理 })

■該当要素をwrapする
 ・[wrap]対象要素を個別に指定要素で包む
  $(対象).wrap(要素)
  $(対象).wrap(function(){ 処理 })

 ・[unwrap]対象要素を個別に包んでる要素を削除する
  $(対象).unwrap(親要素)
  $(対象).unwrap(function(){ 処理 })

 ・[wrapAll]該当する対象要素全てを指定要素で包む
  $(対象).wrapAll(要素)

 ・[wrapInner]対象要素を個別にそれぞれの要素を包む
  $(対象).wrapInner(要素)

■[html]対象要素のhtmlを操作
  ・対象要素のHTMLを取得
   var 変数 = $(対象).html()
  
  ・対象要素のhtmlを変更
   $(対象).html(HTML)
   $(対象).html(function(){ 処理 })

■[text]対象要素のテキストを操作
  ・対象要素のtextを取得
   var 変数 = $(対象).text()
  
  ・対象要素のtextを変更
   $(対象).text(文字列)
   $(対象).text(function(){処理})

■[val]対象要素(input)の値を操作
  ・対象要素(input)の値を取得
   var 変数 = $(対象).val()

  ・対象要素(input)の値を変更
   $(対象).val(値)
   $(対象).val(function(){処理})


■クラスについて
 ・[addClass]対象要素にクラスを追加する
  $(対象).addClass(内容);
  $(対象).addClass(function(){ 処理 });

 ・[removeClass]対象要素にクラスを削除する
  $(対象).removeClass(内容);
  $(対象).removeClass(function(){ 処理 });

 ・[hasClass]対象要素にクラスがあるか調べる
  $(対象).hasClass(クラス名); //true, falseを返す

■属性値について
 ・[attr]属性値を取得
  $(対象).attr(属性)

 ・[attr]属性値を設定
  $(対象).attr(属性, 値)
  $(対象).attr(属性, function(){})
  $(対象).attr({属性1: 値1, 属性2: 値2})

 ・[removeAttr]属性値を削除
  $(対象).removeAttr(属性)


■イベント
 ・クリック
  $(対象).click(function(e){ 処理 });
   $(対象).click();で強制的にクリックを発生できる

 ・ダブルクリック
  $(対象).dblclick(function(e){ 処理 });
   $(対象).dblclick();で強制的にダブルクリックを発生できる

 ・マウス移動
  $(対象).mousemove(function(e){ 処理 });

 ・マウスボタン
  $(対象).mousedown(function(e){ 処理 });
  $(対象).mouseup(function(e){ 処理 });

 ・マウスインアウト
  $(対象).mouseenter(function(e){ 処理 });
  $(対象).mouseleave(function(e){ 処理 });
  $(対象).hover(function(e){ 入る処理 },function(e){ 出る処理 });

 ・キー
  $(対象).keydown(function(e){ 処理 });
  $(対象).keyup(function(e){ 処理 });

 ・フォーカス
  $(対象).focus(function(e){ 処理 });
  $(対象).blur(function(e){ 処理 });
  $(対象).focusin(function(e){ 処理 }); イベントがバブリングする
  $(対象).focusout(function(e){ 処理 });イベントがバブリングする

 ・フォーム変更
  $(対象).change(function(e){ 処理 });
  input/textarea/select

 ・テキスト選択
  $(対象).select(function(e){ 処理 });
  input type="text"/textarea
  キャレット等はプラグインでも探すっと。

 ・送信
  $(対象).submit(function(e){ 処理 });

 ・エラー
  $(対象).error(function(e){ 処理 });

 ・リサイズ
  $(対象).resize(function(e){ 処理 });

 ・スクロール
  $(対象).scroll(function(e){ 処理 });

 ・ロード
  $(対象).load(function(e){ 処理 });
  $(window).unload(function(e){ 処理 });
  $(document).read(function(e){ 処理 });

 ・イベントセット
  $(対象).bind(たいぷ、[データ]、処理);
  $(対象).bind({たいぷ: 処理, たいぷ: 処理})

 ・イベント解除
  $(対象).unbind(たいぷ、処理);
  $(対象).unbind(たいぷ);
  $(対象).unbind();


e.target・・・発生時点の要素
e.timestamp・・・発生時刻(秒)
e.pageX・・・X座標
e.pageY・・・Y座標
e.type・・・イベントの種類
e.which・・・キー情報

e.preventDefault()・・・・・・・・・デフォルト操作キャンセル
e.stopPropagation()・・・・・・・・ バブリングキャンセル、イベント実行
e.stopImmediatePropagetion()・・・・バブリング、イベントキャンセル
e.isDefaultPrevented()・・・・・・・preventDefaultを実行したか判定
e.isPropagationStopped()・・・・・・PropagationStoppedを実行したか判定
e.isImmediatePropagationStopped()・・ImmediatePropagationStoppedを実行したか判定

■CSS
 ・取得/変更
  var 変数 = $(対象).css(プロパティ名);
  $(対象).css(プロパティ, 値);
  $(対象).css({プロパティ:値, プロパティ:値, プロパティ:値});
  プロパティ名にハイフンはあるものは、ハイフンとって大文字にする

 ・高さ/幅(1)[height/widthを返す]
  var 変数 = $(対象).height();
  $(対象).height(値);
  var 変数 = $(対象).width();
  $(対象).width(値);

 ・高さ/幅(2)[height/width + paddingを返す]
  var 変数 = $(対象).innerHeight();
  var 変数 = $(対象).innerWidth();

 ・高さ/幅(3)[height/width + padding + borderを返す]
  var 変数 = $(対象).outerHeight();
  var 変数 = $(対象).outerWidth();

 ・高さ/幅(4)[height/width + padding + border + marginを返す]
  var 変数 = $(対象).outerHeight(true);
  var 変数 = $(対象).outerWidth(true);

 ・絶対位置/相対位置(基準は、親要素)
  var 変数 = $(対象).offset(); //変数.top, 変数.leftを持つ
  $(対象).offset({top:値, left:値});
  var 変数 = $(対象).position(); //変数.top, 変数.leftを持つ
  $(対象).position({top:値, left:値});

 ・スクロール 縦/横
  var 変数 = $(対象).scrollTop();
  $(対象).scrollTop(値);

  var 変数 = $(対象).scrollLeft();
  $(対象).scrollLeft(値);

 ・クラスのトグル
  $(対象).toggleClass(クラス);

■$.each(配列, 関数)
途中で抜ける時は、return false;