MW211 EXIT

devlog
Excel/検索機能(Ctrl+F)
2019年03月25日
Excelの検索機能(Ctrl+F)について、仕様をまとめてみた。
・初期セル(ActiveCell)の次から検索を始める
・途中該当があればそこで止まる
・一周し初期セルに戻ってきて、初期セルが該当すればそこで止まる
  初期セルが該当しなければ、該当なしメッセージを出力する

なお、該当するのが一つだけの場合は、再度検索してもうんともすんとも言わない
→一周して初期セル(該当セル)に戻るだけ
分類:Excel
MSSQL/CTEで主キー条件不要だっけ問題
2019年03月14日
┌──────────────────────────────────────┐
│WITH [表1]([キー],[バリュー]) AS (                                          │
│         SELECT [キー],                                                     │
│                [バリュー]                                                  │
│             FROM [表0]                                                     │
│     ),                                                                     │
│     [表2]([キー],[バリュー]) AS (                                          │
│         SELECT [キー],                                                     │
│                [バリュー]                                                  │
│             FROM [表1]                                                     │
│     ),                                                                     │
│     [表3]([キー],[バリュー]) AS (                                          │
│         SELECT [キー],                                                     │
│                [バリュー]                                                  │
│             FROM [表2]                                                     │
│     )                                                                      │
└──────────────────────────────────────┘
例えば、CTEをつなげていくと、ふと、「主キーの結合条件っていらなかったっけ」って
不安になることがある
CROSS JOINが繰り返される想定外のレコードができてるんではという不安だ
┌──────────────────────────────────────┐
│     [表2]([キー],[バリュー]) AS (                                          │
│         SELECT [表1].[キー],                                               │
│                [表1].[バリュー]                                            │
│             FROM [表1]                                                     │
│                 INNER JOIN [表0]                                           │
│                   ON [表0].[キー] = [表1].[キー]                           │
│     ),                                                                     │
└──────────────────────────────────────┘
とかしなくていいのかなという不安だ

でも、これは不要
だって、展開すると以下のように自分で自分に結合している訳だから
(「[表0].[キー] = [表1].[キー]」は実質「[表0].[キー] = [表0].[キー]」だ)
こんなものは要らないということになる
┌──────────────────────────────────────┐
│     [表2]([キー],[バリュー]) AS (                                          │
│         SELECT [表1].[キー],                                               │
│                [表1].[バリュー]                                            │
│             FROM (                                                         │
│                 SELECT [キー],                                             │
│                        [バリュー]                                          │
│                     FROM [表0]                                             │
│             ) AS [表1]                                                     │
│                 INNER JOIN [表0]                                           │
│                   ON [表0].[キー] = [表1].[キー]                           │
│     ),                                                                     │
└──────────────────────────────────────┘

ま、あっても悪さしないけど(以下実験例([表0]の内容がそのまま返る(増殖しない)))
┌──────────────────────────────────────┐
│WITH [表1]([キー],[バリュー]) AS (                                          │
│         SELECT [キー],                                                     │
│                [バリュー]                                                  │
│             FROM (                                                         │
│                 VALUES (1, 'A'),                                           │
│                        (2, 'B'),                                           │
│                        (3, 'C')                                            │
│             ) AS [表0]([キー],[バリュー])                                  │
│     ),                                                                     │
│     [表2]([キー],[バリュー]) AS (                                          │
│         SELECT [キー],                                                     │
│                [バリュー]                                                  │
│             FROM [表1]                                                     │
│     ),                                                                     │
│     [表3]([キー],[バリュー]) AS (                                          │
│         SELECT [表2].[キー],                                               │
│                [表2].[バリュー]                                            │
│             FROM [表2]                                                     │
│                 INNER JOIN [表1]                  --本当は不要             │
│                   ON [表1].[キー] = [表2].[キー]  --本当は不要             │
│     )                                                                      │
│SELECT *                                                                    │
│    FROM [表3];                                                             │
└──────────────────────────────────────┘
逆にいうと、気づかなくて厄介といもいえる
分類:MSSQL
ExcelVBA/連想配列の全クリアとその判定方法
2019年03月08日
┌──────────────────────────────────────┐
│Dim 連想配列 As Object                                                      │
│Set 連想配列 = CreateObject("Scripting.Dictionary")                         │
├──────────────────────────────────────┤
│連想配列.RemoveAll  ' 全クリア                                              │
├──────────────────────────────────────┤
│If 連想配列.Count = 0 Then                                                  │
│    MsgBox "空っぽ"                                                         │
│End If                                                                      │
└──────────────────────────────────────┘
分類:ExcelVBA
前へ 1 次へ