MW211 EXIT

devlog
設計/法律用語の入れ子
2014年12月30日
「または」と「もしくは」の関係は以下の通り。
┌───────────────────┬──────────────────┐
│■または■                            │■ or ■                            │
├───────────────────┼──────────────────┤
│■、■または■                        │■ or ■ or ■                      │
├───────────────────┼──────────────────┤
│      (■もしくは■)                  │   (■ or ■)                       │
│または(■もしくは■)                  │or (■ or ■)                       │
├───────────────────┼──────────────────┤
│      (        (■もしくは■)         │   (   (■ or ■)                   │
│       もしくは(■もしくは■))        │    or (■ or ■))                  │
│または(        (■もしくは■)         │or (   (■ or ■)                   │
│       もしくは(■もしくは■))        │    or (■ or ■))                  │
└───────────────────┴──────────────────┘
分類:設計
MSSQL/文字列照合(続)
2014年12月29日
照合順序の確認と設定について。

(全体の)既定の照合順序を確認する。
┌──────────────────────────────────────┐
│SELECT SERVERPROPERTY('COLLATION')                                          │
└──────────────────────────────────────┘

特定のDBについて、既定の照合順序を確認する。
┌──────────────────────────────────────┐
│SELECT DATABASEPROPERTYEX(DB名, 'COLLATION')                                │
└──────────────────────────────────────┘

照合順序(JAPANESE_CS_AS_KS_WS)を特定のDBに対して設定する。
┌──────────────────────────────────────┐
│ALTER DATABASE DB名 COLLATE JAPANESE_CS_AS_KS_WS;                           │
└──────────────────────────────────────┘
分類:MSSQL
MSSQL/連番をふる
2014年12月27日
ある列([順番])を基準として並び替えた場合に、連番を1から振り直すUPDATE文。
しかも、特定のグループごと([組No])に振るという条件も加わった場合。

以下の様な感じになる。
┌──────────────────────────────────────┐
│UPDATE [表]                                                                 │
│    SET [連番] = (                                                          │
│        SELECT [連番]                                                       │
│            FROM (                                                          │
│                SELECT [組No],                                              │
│                       [順番],                                              │
│                       ROW_NUMBER() OVER(PARTITION BY [組No]                │
│                                         ORDER BY [順番] ASC) AS [連番]     │
│                    FROM [表]                                               │
│            ) AS [入力D]                                                   │
│            WHERE [入力D].[組No] = [表].[組No]                             │
│              AND [入力D].[順番] = [表].[順番]                             │
│    );                                                                      │
└──────────────────────────────────────┘

これを一歩すすめて早めに抽出を行うと以下のような感じになる。
┌──────────────────────────────────────┐
│UPDATE [表]                                                                 │
│    SET [連番] = (                                                          │
│        SELECT [連番]                                                       │
│            FROM (                                                          │
│                SELECT [入力D].[順番],                                     │
│                       ROW_NUMBER() OVER(ORDER BY [入力D].[順番] ASC)      │
│                                                                   AS [連番]│
│                    FROM [表] AS [入力D]                                   │
│                    WHERE [入力D].[組No] = [表].[組No]                     │
│            ) AS [入力D]                                                   │
│            WHERE [入力D].[順番] = [表].[順番]                             │
│    );                                                                      │
└──────────────────────────────────────┘
分類:MSSQL
SQL/相関副問い合わせの階層
2014年12月26日
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 親表                                                               │
│    WHERE EXISTS (                                                          │
│        SELECT * FROM (                                                     │
│          SELECT * FROM (                                                   │
│            SELECT * FROM (                                                 │
│              SELECT * FROM (                                               │
│                SELECT * FROM (                                             │
│                  SELECT * FROM (                                           │
│                    SELECT * FROM (                                         │
│                      SELECT * FROM (                                       │
│                          SELECT *                                          │
│                              FROM 子表                                     │
│                              WHERE 子表.列 = 親表.列                       │
│                      ) AS [a]                                              │
│                    ) AS [a]                                                │
│                  ) AS [a]                                                  │
│                ) AS [a]                                                    │
│              ) AS [a]                                                      │
│            ) AS [a]                                                        │
│          ) AS [a]                                                          │
│        ) AS [a]                                                            │
│    );                                                                      │
└──────────────────────────────────────┘
上記のようなのもいける。

親表は、子表が深くても効くようだ。
分類:SQL
ExcelVBA/マクロを起動しない
2014年12月25日
マクロを実行しないでExcelを起動する

→Shiftを押しながら起動する


マクロを強制中断する

→Ctrlを押しながらPauseを押す
分類:ExcelVBA
Excel/明細から小計明細をつくる
2014年12月24日
明細一覧から、グループ単位の小計の一覧明細をつくりたい場合、
ピボットテーブルだとちょっとくせがある。
Excelマクロを使ってしまうのも手だが、Excel機能を駆使しして実現する方法。

(1) 明細シートを複写する(以後、「小計シート」とする)

(2) 小計シートで、キーを基準に明細を抽出する
    →「データ>重複の削除」で、キーを選択し、
      キーが重複しないように明細を抽出する
      #キー以外の列については、一件目の内容が残るので、
        誤解を避けるために適宜クリアする

(3) 集計する列にSUMIFS関数を入れれば出来上がり
    例)キーがA列とB列で、集計する列がC列の場合、
        二行目の集計する列に以下のような数式を入力し、コピーで三行目以降に展開
        「=SUMIFS(明細!C:C,明細!A:A,A2,明細!B:B,B2)」
分類:Excel
ExcelVBA/サブウインドウのみの入力にする
2014年12月23日
サブウインドウ(UserFrom)以外の入力ができなくするには、
以下の様にパラメータを設定すればよい。
┌──────────────────────────────────────┐
│UserFrom.ShowModal = True                                                   │
└──────────────────────────────────────┘

逆に、本体のExcelシートが入力できる余地を残すのは以下の設定となる。
┌──────────────────────────────────────┐
│UserFrom.ShowModal = False                                                  │
└──────────────────────────────────────┘

但し、同一サブウインドウを続けて開くと厄介なことになりそうなので
以下のようなガードを入れたりする必要が出てくる。
┌──────────────────────────────────────┐
│If UserForms.Count = 0 Then                                                 │
│    UserForm.Show                                                           │
│End If                                                                      │
└──────────────────────────────────────┘
ま、利用者の柔軟性が高い分、考慮も必要だということだ。
分類:ExcelVBA
MSSQL/トランザクションのネスト
2014年12月22日
トランザクションをネストして、ロールバックとかしてしまうと
ネスト関係なく全てロールバックしてしまうので注意。
┌───────────────┐
│BEGIN TRY                     │
│    BEGIN TRANSACTION         │
│      ┌─────────────┐
│      │BEGIN TRY                 │
│      │    BEGIN TRANSACTION     │
│      │    COMMIT TRANSACTION    │
│      │END TRY                   │
│      │BEGIN CATCH               │
│      │    ROLLBACK TRANSACTION  ──┐全てをロールバックしてしまう
│      │    RETURN ERROR_NUMBER() │  │
│      │END CATCH                 │  │
│      │RETURN (0);               │  │
│      └─────────────┘  │
│    COMMIT TRANSACTION        │      │
│END TRY                       │      │
│BEGIN CATCH                   │      │
│    ROLLBACK TRANSACTION      ←───┘二重ロールバック扱いでエラーとなる
│    RETURN ERROR_NUMBER()     │
│END CATCH                     │
│RETURN (0);                   │
└───────────────┘
ネストは基本使わない方が賢明のようだ。
もしくはセーブポイント(SAVE TRANSACTION)を使うとか。
分類:MSSQL
Windows/致命的エラーの戻り値
2014年12月21日
「%ERRORLEVEL%」で直前に実行された結果を戻り値として取得できるが、
根本的な誤りを犯した場合の戻り値は以下の様になる。
┌─────┬────────────────────────────────┐
│戻り値    │3                                                               │
├─────┼────────────────────────────────┤
│winerror.h│ERROR_PATH_NOT_FOUND                                            │
├─────┼────────────────────────────────┤
│メッセージ│指定されたパスが見つかりません。                                │
├─────┼────────────────────────────────┤
│原因      │・存在しないパス(の実行ファイル)を実行した場合(*1)              │
│          │  *1:フルパスの中に「\」を含んでいる場合                       │
└─────┴────────────────────────────────┘
┌─────┬────────────────────────────────┐
│戻り値    │9009                                                            │
├─────┼────────────────────────────────┤
│winerror.h│DNS_ERROR_RCODE_NOTAUTH                                         │
├─────┼────────────────────────────────┤
│メッセージ│'■' は、内部コマンドまたは外部コマンド、                       │
│          │操作可能なプログラムまたはバッチファイルとして                  │
│          │認識されていません。                                            │
├─────┼────────────────────────────────┤
│原因      │・存在しない実行ファイルを実行した場合                          │
│          │  (=適当な文字列をコマンド入力した場合(但し「\」を含むと「3」))│
└─────┴────────────────────────────────┘
分類:Windows
Excel/入力規則の確認
2014年12月20日
データの入力規則を設定したものの、どこのセルに設定したのか忘れてしまった場合
それを検索する方法。

ホーム>検索と選択>ジャンプ
#ショートカットキーから「CTRL+G」→「セル選択」で
┌────────────────────┐
│選択オプション                          │
├────────────────────┤
│                                        │
│                                        │
│                                        │
│                      ●データの入力規則│
│                        ●すべて        │
│                        ○同じ入力規則  │
└────────────────────┘
分類:Excel
前へ 1 2 3 次へ