MW211 EXIT

devlog
ExcelVBA/Continue文
2015年02月07日
ExcelVBAではContinue文がない。

純粋構造化プログラムの原則に従ってIf文で対処となるが、
とはいえ、Continue文は便利だ。

で、これは禁断のGoTo文で代替するのが最善のようだ。
┌──────────────────────────────────────┐
│For文                                                                       │
│    If 条件 Then                                                            │
│        GoTo Continue                                                       │
│    End If                                                                  │
│    処理                                                                    │
│Continue:                                                                   │
│Next                                                                        │
└──────────────────────────────────────┘

純粋に処理の流れ通りなら、「Continue:」ラベルは前の方がよいかもしれない。
┌──────────────────────────────────────┐
│For文                                                                       │
│Continue:                                                                   │
│    If 条件 Then                                                            │
│        GoTo Continue                                                       │
│    End If                                                                  │
│    処理                                                                    │
│Next                                                                        │
└──────────────────────────────────────┘
しかし、前方へのGoTo文を許すのは、Continue文代替に限ってとしても、
それこそ禁断中の禁断ともいえる(後方ならまだスパゲティコードは避けられる)

よって、前出の対応の方がよいのではないだろうか。
分類:ExcelVBA
MSSQL/エラーログにSQL発行状況を出力
2015年02月04日
SQLの発行状況をリアルタイムでエラーログに出力する方法。

まず、稼働中のインスタンス名を調べる。
「サービス」の「プロパティ」を参照すると
「サービス名」にインスタンス名が表示されている
→例えば「MSSQL$■」

次に、エラーログの位置を調べる。
例えば以下の辺り。
┌──────────────────────────────────────┐
│C:\Program Files\Microsoft SQL Server\MSSQL12.■\MSSQL\Log\ERRORLOG         │
└──────────────────────────────────────┘

準備が出来たら、調査開始。

MSSQLの以下のフラグをONに設定する。
・T3605=トレース結果をエラーログ出力
・T4032=コマンド(SQL文)をトレースする
「T3605」は設定済みなので「T4032」だけ設定し直す

コマンドプロンプト(管理者権限)で、以下の様に停止し再起動する。
┌──────────────────────────────────────┐
│>net stop MSSQL$■                                                          │
│SQL Server (■) サービスを停止中です.                                       │
│SQL Server (■) サービスは正常に停止されました。                            │
│                                                                            │
│>net start MSSQL$■ /T4032                                                  │
│SQL Server (■) サービスを開始します..                                      │
│SQL Server (■) サービスは正常に開始されました。                            │
└──────────────────────────────────────┘

次に「SQL Server Management Studio」以下のコマンドを実行する。
┌──────────────────────────────────────┐
│dbcc traceon(3605, -1)                                                      │
└──────────────────────────────────────┘

これで、ログにコマンド(SQL文)がエラーログにリアルタイムで出力される。

終了するには以下のコマンドを実行する。
┌──────────────────────────────────────┐
│dbcc traceoff(3605, -1)                                                     │
└──────────────────────────────────────┘
フラグも元に戻したい場合には、MSSQL再起動(サーバ再起動)など
分類:MSSQL
MSSQL/FROM句によるUPDATE文
2015年02月03日
  まず、「UPDATE」文による更新先(出力表)と、「FROM」句による更新元(入力表)は
  以下の様に条件式で結合してあげないと、何を何で更新するのか
  訳が分からなくなり正しく動作しない。
┌──────────────────────────────────────┐
│UPDATE [出力表]                                                             │
│    SET [列] = [入力表].[列]                                                │
│    FROM [入力表]                                                           │
│    WHERE [入力表].[キー] = [出力表].[キー];                                │
└──────────────────────────────────────┘
    以下だと更新されたが意図した更新はできない。
  ┌────────────────────────────────────┐
  │UPDATE [出力表]                                                         │
  │    SET [列] = [入力表].[列]                                            │
  │    FROM [入力表]                                                       │
  └────────────────────────────────────┘
    どうも[入力表]の一件目ですべてを更新したりしているようだが(たまたまか)。
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  但し、更新先と更新元が同じ場合は、同じ表を操作することになるので結合条件不要。
┌──────────────────────────────────────┐
│UPDATE [出力表]                                                             │
│    SET [列] = [出力表].[列]                                                │
│    FROM [出力表]                                                           │
│    WHERE [出力表].[キー] = [出力表].[キー];                                │
├──────────────────────────────────────┤
│UPDATE [出力表]                                                             │
│    SET [列] = [出力表].[列]                                                │
│    FROM [出力表];                                                          │
└──────────────────────────────────────┘
  (これだと更新により値が変わらないので意味がないが、原則として覚えておく)

  なお、「FROM」句の表が一つであれば、別名をつけることもできる。
┌──────────────────────────────────────┐
│UPDATE [出力表]                                                             │
│    SET [列] = [別名].[列]                                                  │
│    FROM [出力表] AS [別名];                                                │
└──────────────────────────────────────┘
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  自己結合で「FROM」句に複数の更新先(出力表)が出現する場合は
  そのうちどれが「UPDATE」文の更新先(出力表)と一致するのか明示する必要があり
  「UPDATE」文は「AS」で別名をつけられない経緯からして
  「FROM」句側もどれか一つ別名をつけないものを用意する必要がある。
┌──────────────────────────────────────┐
│UPDATE [出力表]                                                             │
│    SET [列] = [別名].[列]                                                  │
│    FROM [出力表],                                                          │
│         [出力表] AS [別名]                                                 │
│    WHERE [別名].[キー] = [出力表].[キー];                                  │
└──────────────────────────────────────┘

  上記はOKだが、以下はお互いに譲り合ってる(別名を名乗ってる)のでNG。
┌──────────────────────────────────────┐
│UPDATE [出力表]                                                             │
│    SET [列] = [別名2].[列]                                                 │
│    FROM [出力表] AS [別名1],                                               │
│         [出力表] AS [別名2]                                                │
│    WHERE [別名2].[キー] = [別名1].[キー];                                  │
├──────────────────────────────────────┤
│UPDATE [出力表]                                                             │
│    SET [列] = [別名2].[列]                                                 │
│    FROM [出力表] AS [別名1]                                                │
│        INNER JOIN [出力表] AS [別名2]                                      │
│          ON [別名2].[キー] = [別名1].[キー];                               │
└──────────────────────────────────────┘
  「INNER JOIN」なら回避できるかと思ったが、やっぱりそれもNG。

  但し、「UPDATE」文で別名を(定義するのではなく)使用するという荒業もある。
┌──────────────────────────────────────┐
│UPDATE [別名1]                                                              │
│    SET [列] = [別名2].[列]                                                 │
│    FROM [出力表] AS [別名1],                                               │
│         [出力表] AS [別名2]                                                │
│    WHERE [別名2].[キー] = [別名1].[キー];                                  │
└──────────────────────────────────────┘
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  従ってまとめると、一件以下の「WHERE」句が必要な気がしないでもないが
  [別名]と[出力表]は(実体として)同じ表なので、必要ないということになる。
┌──────────────────────────────────────┐
│UPDATE [出力表]                                                             │
│    SET [列] = [入力表].[列]                                                │
│    FROM [出力表] AS [別名]                                                 │
│        INNER JOIN [入力表]                                                 │
│          ON [入力表].[キー] = [別名].[キー]                                │
│    WHERE [別名].[キー] = [出力表].[キー];                                  │
├──────────────────────────────────────┤
│UPDATE [出力表]                                                             │
│    SET [列] = [入力表].[列]                                                │
│    FROM [出力表] AS [別名]                                                 │
│        INNER JOIN [入力表]                                                 │
│          ON [入力表].[キー] = [別名].[キー];                               │
└──────────────────────────────────────┘
分類:MSSQL
ソフトウェアフレームワーク
2015年02月02日
┌─────┬─────────┬──────────────────────┐
│Perl      │□Amon2           │                                            │
│          │□Ark             │                                            │
│          │□Catalyst        │                                            │
│          │□Dancer          │                                            │
│          │□Mojolicious     │                                            │
├─────┼─────────┼──────────────────────┤
│PHP       │□Bullet          │                                            │
│          │■CakePHP         │                                            │
│          │■CodeIgniter     │                                            │
│          │□eZ Publish      │                                            │
│          │□Flight          │                                            │
│          │■FuelPHP         │                                            │
│          │□KohanaPHP       │                                            │
│          │□Limonade        │                                            │
│          │□Nette Framework │                                            │
│          │□Phalcon         │                                            │
│          │□PHPixie         │                                            │
│          │□PRADO           │                                            │
│          │□Silex           │                                            │
│          │□Slim            │                                            │
│          │■Symfony         │                                            │
│          │□Yaf             │                                            │
│          │□Yii             │                                            │
│          │■Zend Framework  │                                            │
│          │□Laravel         │                                            │
├─────┼─────────┼──────────────────────┤
│Python    │□Bottle          │                                            │
│          │■Django          │                                            │
│          │□Flask           │                                            │
│          │□Karrigell       │                                            │
│          │□Pylons          │                                            │
│          │□Pyramid         │                                            │
│          │□Quixote         │                                            │
│          │□Tornado         │                                            │
│          │□TurboGears      │                                            │
│          │□Twisted         │                                            │
│          │□web2py          │                                            │
├─────┼─────────┼──────────────────────┤
│Ruby      │□Merb            │                                            │
│          │□Padrino         │                                            │
│          │■Ruby on Rails   │                                            │
│          │□Sinatra         │                                            │
├─────┼─────────┼──────────────────────┤
│JavaScript│□AngularJS       │                                            │
│          │□Backbone.js     │                                            │
│          │□Knockout.js     │                                            │
├─────┼─────────┼──────────────────────┤
│Java      │■Apache Struts   │                                            │
│          │□Apache Wicket   │                                            │
│          │□Dropwizard      │                                            │
│          │□JSF             │                                            │
│          │□Ninja Framework │                                            │
│          │□Play Framework  │                                            │
│          │■Spring Framework│                                            │
│          │□ZK              │                                            │
└─────┴─────────┴──────────────────────┘
分類:IT全般
設計/長音符の省略
2015年02月01日
「コンピューター」「プリンター」「サーバー」「ユーザー」は、
「コンピュータ」「サーバ」「ユーザ」なのかという話。

「JIS Z8301:2005」より前までは以下のルールで末尾の長音符を省略としていた。
┌──────────────────────────────────────┐
│・(末尾の長音符号なしで)3音以上の場合には末尾に長音符号を付けない           │
│  →「プリンタ」                                                            │
│・(末尾の長音符号なしで)2音以下の場合には末尾に長音符号を付ける             │
│  →「カバー」                                                              │
│・複合語はそれぞれの成分語について適用する                                  │
│  →「モータカー」                                                          │
│・(文中の)長音符号・撥音(ん)・促音(っ)は1音扱いとして上記を適用する         │
│  →「サーバ」「ダンパ」「ニッパ」                                          │
│・拗音(ゃ・ゅ・ょ)は1音扱いとしないで上記を適用する                         │
│  →「シャワー」                                                            │
└──────────────────────────────────────┘
但し、「JIS Z8301:2005」において、省略してもしなくても
どちらでもよいことになった。

なお、1991年6月28日の内閣告示第二号「外来語の表記」にて
「長音は、原則として長音符号「ー」を用いて書く」とされた。
マイクロソフトは2008年、これに従って表記法を変更した。

いずれにしろ各社の対応はまちまちのようである。
分類:設計
Excel/下線の影響範囲
2015年01月24日
「Ctrl+End」で全範囲の末端まで移動する場合、
通常は文字が入力されているところまで移動する。

下線の場合も、下線のセル、つまり下線の上の行まで移動する。

ところが、下線の中でも以下の下線については、
その下線の下まで移動してしまう。
  ・二重線
  ・太線(一番太い線)

恐らく、下のセルまで(跨いで)影響のある線ということなのだろう。

微妙な盲点だ。
分類:Excel
MSSQL/特定の文字数で区切る
2015年01月22日
例えば、'あ1い2う3え4お'を「4文字」で区切る場合。
┌─────────┬─────────────────┬────────┐
│すべて            │SELECT [列]                       │'あ1い2う3え4お'│
┌─────────┬─────────────────┬────────┐
│左から 4文字の左側│SELECT LEFT([列], 4)              │'あ1い2'        │
├─────────┼─────────────────┼────────┤
│左から 4文字の右側│SELECT RIGHT([列], LEN([列]) - 4) │      'う3え4お'│
├─────────┼─────────────────┼────────┤
│右から 4文字の左側│SELECT LEFT([列], LEN([列]) - 4)  │'あ1い2う'      │
├─────────┼─────────────────┼────────┤
│右から 4文字の右側│SELECT RIGHT([列], 4)             │        '3え4お'│
└─────────┴─────────────────┴────────┘
[列]の文字数を超える指定をしても問題ない(RIGHT()の場合も)。
但し、負数となるような指定をするとエラーとなる。
(上記で[列]が3文字の場合は、「LEN([列]) - 4」が「-1」(負数)となりエラー)
分類:MSSQL
MSSQL/表のマッチング
2015年01月19日
表の差異を比較し検出するSQL文。
┌──────────────────────────────────────┐
│SELECT ISNULL([右表].[キー], [左表].[キー]) AS [キー],                      │
│       [左表].[比較列]                      AS [左列],                      │
│       [右表].[比較列]                      AS [右列]                       │
│    FROM [左表]                                                             │
│        FULL JOIN [右表]                                                    │
│          ON [右表].[キー] = [左表].[キー]                                  │
│    WHERE [右表].[比較列] IS NULL              -- 左のみのもの              │
│       OR [左表].[比較列] IS NULL              -- 右のみのもの              │
│       OR [右表].[比較列] <> [左表].[比較列];  -- 差異があるもの            │
└──────────────────────────────────────┘
分類:MSSQL
ExcelVBA/色の型
2015年01月18日
「RGB()」で指定する色を変数で保持する場合、そのデータ型は何なのか?

┌──────────────────────────────────────┐
│Dim 色 As Long = RGB(255, 255, 255)                                         │
└──────────────────────────────────────┘
Long型でOK。
分類:ExcelVBA
Windows/ファイル検索
2015年01月17日
コマンドプロンプトで、ファイルの位置を検索するには。
┌──────────────────────────────────────┐
│C:\>dir /b /s | find "ファイル名"                                           │
└──────────────────────────────────────┘
  (上記はCドライブ配下全てを検索する場合(cdで任意の場所に移動して実行のこと))

フルパスでファイル名が出力される。


「dir /b /s」でフルパス一覧が出力され、「find」で抽出ということだ。
分類:Windows
前へ 1 … 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 … 156 次へ