MW211 EXIT

devlog
ExcelVBA/行範囲の指定
2015年03月13日
「Rows("1:3")」をR1C1的に指定したい場合。

△「Rows(1 & ":" & 3)」
  →ちょっとカッコ悪い「Columns()」に応用が効かない

×「Rows(1, 3)」
  →こういう指定はできない

×「Rows(Rows(1), Rows(3))」
  →こういう指定はできない

×「Rows(Cells(1,), Cells(3,))」
  →こういう指定はできない

○「Range(Rows(1), Rows(3))」
  →「Range()」を使うことになる
分類:ExcelVBA
設計/垂直・水平と縦・横
2015年03月12日
「垂直(Vertical)」と「水平(Horizon)」について、
なんとなく「縦」と「横」というイメージがある。

でも、Excelにおけるページ分割、つまりページが縦に並んだ場合は「HPage」、
すなわち「水平(Horizon)」で制御される。

「縦」に並んでいるのだから「VPage」ではないのか?
と思うわけだが、「垂直(Vertical)」と「水平(Horizon)」のイメージにより
一概に「縦」と「横」にあてはめられないということらしい。

で、イメージは以下の通り。
┌───────────────┐
│垂直(Vertical)  水平(Horizon) │
│┌─┬─┬─┐  ┌─────┐│
││  │  │  │  │          ││
││  │  │  │  ├─────┤│
││  │  │  │  │          ││
││  │  │  │  ├─────┤│
││  │  │  │  │          ││
│└─┴─┴─┘  └─────┘│
└───────────────┘

つまり、横は横でも、横に広がるイメージらしい。(水平線ってくらいだから)

なので、ページが縦に並ぶのは、左のイメージで「水平(Horizon)」になるというわけ。
分類:設計
ExcelVBA/ダイアログでファイルを選択
2015年03月11日
ダイアログでファイルを選択する、単純な例(雛形)。
┌──────────────────────────────────────┐
│Sub ファイルを開く()                                                        │
│    Dim ファイル名 As Variant                                               │
│    ファイル名 = Application.GetOpenFilename( _                             │
│                     FileFilter:="Microsoft Excelブック,*.xls?", _          │
│                     FilterIndex:=1, _                                      │
│                     Title:="ファイルを選択してください", _                 │
│                     MultiSelect:=False _                                   │
│                 )                                                          │
│    MsgBox ファイル名                                                       │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
MSSQL/数値変換
2015年03月10日
文字列を数値変換する場合、例えば先頭2文字を抜き出し数値変換する場合、
単純に組み合わせれば以下のような形が考えられる。
┌──────────────────────────────────────┐
│CONVERT(int, LEFT([列], 2))                                                 │
└──────────────────────────────────────┘
しかしながら、これだと数値変換できなイレギュラーなケースでエラーとなってしまう。

そういったことに対応できる堅牢な手段となると、以下がある。
┌──────────────────────────────────────┐
│TRY_CAST(LEFT([列], 2) AS int)                                              │
└──────────────────────────────────────┘
変換に失敗した場合はエラーにせず「NULL」にしてくれる。
但し、うまくいってしまい「0」になる場合もあるから注意。
(ExcelVBAの「Val()」と似たようなものだ)
分類:MSSQL
MSSQL/ストアドプロシージャの戻り値確認
2015年03月09日
「SQL Server Management Studio」のクエリにて、
ストアドプロシージャの戻り値を確認する方法。
┌──────────────────────────────────────┐
│DECLARE @変数 [int];                                                        │
│EXECUTE @変数 = [ストアドプロシージャ];                                     │
│PRINT @変数;                                                                │
└──────────────────────────────────────┘
変数を用意し、代入してPRINT出力する。
代入は「EXECUTE」とストアドプロシージャの間に代入文を挿入する。
分類:MSSQL
MySQL/権限の確認方法
2015年03月08日
自分の権限を確認する場合は以下の通り。
┌──────────────────────────────────────┐
│SHOW GRANTS FOR CURRENT_USER();                                             │
└──────────────────────────────────────┘

「CURRENT_USER()」をユーザ名に置き換えれば他者の権限も確認できる。
分類:MySQL
(業務連絡)
2015年03月07日
サーバ移転手続き完了しました
分類:小ネタ、ブラウザ、SQL
MSSQL/日付変換
2015年03月06日
「日付」と「年・月・日」の変換は以下の通り。
┌──────────────────────────────────────┐
│日付 ← DATEFROMPARTS(年, 月, 日)                                           │
├──────────────────────────────────────┤
│年   ← DATEPART(YEAR, 日付)                                                │
│月   ← DATEPART(MONTH, 日付)                                               │
│日   ← DATEADD(DAY, 日付)                                                  │
└──────────────────────────────────────┘

「日付」を「週(年内週)」(その年の何週目か)に変換するのは以下の通り。
┌──────────────────────────────────────┐
│年内週 ← DATEPART(WEEK, 日付)                                              │
└──────────────────────────────────────┘

その逆(週から週の範囲を求める方法)は以下の通り。
┌──────────────────────────────────────┐
│週頭日付 ← DATEADD(DAY, 1 - DATEPART(WEEKDAY, 日付), 日付)                 │
│週末日付 ← DATEADD(DAY, 6, 週頭日付)                                       │
└──────────────────────────────────────┘

週の範囲がわかれば、「月内週」(その月の月週目か)がわかる。
┌──────────────────────────────────────┐
│年     ← DATEPART(YEAR, 日付)                                              │
│月     ← DATEPART(MONTH, 日付)                                             │
│月内週 ← DATEPART(WEEK, 日付)                                              │
│        - DATEPART(WEEK, DATEFROMPARTS(DATEPART(YEAR, 日付),                │
│                                       DATEPART(MONTH, 日付),               │
│                                       1))                                  │
│        + 1                                                                 │
├──────────────────────────────────────┤
│年     ← DATEPART(YEAR, 週頭日付)                                          │
│月     ← DATEPART(MONTH, 週頭日付)                                         │
│月内週 ← DATEPART(WEEK, 週頭日付)                                          │
│        - DATEPART(WEEK, DATEFROMPARTS(DATEPART(YEAR, 週頭日付),            │
│                                       DATEPART(MONTH, 週頭日付),           │
│                                       1))                                  │
│        + 1                                                                 │
└──────────────────────────────────────┘
分類:MSSQL
MSSQL/厳密なRANK()
2015年03月05日
大文字と小文字を区別する場合、「PARTITION BY」に「COLLATE Japanese」を使用する。
┌──────────────────────────────────────┐
│SELECT [キー]                                                               │
│       [集合キー],                                                          │
│       RANK() OVER(PARTITION BY [集合キー] COLLATE Japanese_CS_AS_KS_WS     │
│                   ORDER BY [キー] ASC) AS [順番]                           │
│    FROM [表];                                                              │
└──────────────────────────────────────┘
分類:MSSQL
MSSQL/厳密な「GROUP BY」
2015年03月04日
実は「GROUP BY」では大文字と小文字を区別しない。
┌──────────────────────────────────────┐
│SELECT [集計項目],                                                          │
│       COUNT([キー]) AS [件数]                                              │
│    FROM (VALUES                                                            │
│        (1, 'ABC'),                                                         │
│        (2, 'ABC'),                                                         │
│        (3, 'abc')                                                          │
│    ) AS [テストD] (                                                       │
│        [キー],                                                             │
│        [集計項目]                                                          │
│    )                                                                       │
│    GROUP BY [集計項目];                                                    │
└──────────────────────────────────────┘
例えば上記の場合、「ABC」が「3件」という結果になり、
「abc」も「ABC」扱いとなってしまう。

ということで、厳密に。
WHERE句で使う「COLLATE Japanese」を流用したいところだが、
「GROUP BY」句に付けたらエラーとなってしまう。

正解は、一旦SELECT文で受けてあげるという形をとればよい。
┌──────────────────────────────────────┐
│SELECT [集計項目],                                                          │
│       COUNT([キー]) AS [件数]                                              │
│    FROM (                                                                  │
│        SELECT [キー],                                                      │
│               [集計項目] COLLATE Japanese_CS_AS_KS_WS AS [集計項目]        │
│            FROM (VALUES                                                    │
│                (1, 'ABC'),                                                 │
│                (2, 'ABC'),                                                 │
│                (3, 'abc')                                                  │
│            ) AS [テストD] (                                               │
│                [キー],                                                     │
│                [集計項目]                                                  │
│            )                                                               │
│    )  AS [中間D]                                                          │
│    GROUP BY [集計項目];                                                    │
└──────────────────────────────────────┘
ある意味、変換関数を介する感じだ。
分類:MSSQL
前へ 1 … 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 … 156 次へ