MW211 EXIT

devlog
ExcelVBA/純COUNTIF
2017年09月22日
通常のCOUNTIFではワイルドーカード(*や?)が効いてしまい
正しく算出されない場合用の関数。
┌──────────────────────────────────────┐
│'===========================================================================│
│'  内部関数:純COUNTIF                                                      │
│'===========================================================================│
│Private Function 純COUNTIF(ByVal 範囲 As Range, _                           │
│                           ByVal 検索文字 As String) As Long                │
│''''検索文字 = Replace(検索文字, "~", "~~")     ' COUNTIF系では不要         │
│    検索文字 = Replace(検索文字, "*", "~*")                                 │
│    検索文字 = Replace(検索文字, "?", "~?")                                 │
│    純COUNTIF = WorksheetFunction.CountIf(範囲, 検索文字)                   │
│End Function                                                                │
│'===========================================================================│
└──────────────────────────────────────┘
要は「~」を先頭につければ無効化できるという話。
分類:ExcelVBA
ExcelVBA/複合キー重複チェック関数
2017年09月21日
┌──────────────────────────────────────┐
│'===============================================================================
│'  サブ関数:is複合重複
│'===============================================================================
│Private Function is複合重複(ByVal シート As Worksheet, _
│                            ByVal 第一キー As String, _
│                            ByVal 第二キー As String) As Boolean
│    Const X第一キー As Long = 1
│    Const X第二キー As Long = 2
│    Const yMin As Long = 2
│    Dim yMax As Long
│    Dim obj検索 As Range, 検索範囲 As Range, 起点アドレス As String
│    Dim 検索キー As String
│    検索キー = 第一キー
│    検索キー = Replace(検索キー, "~", "~~")
│    検索キー = Replace(検索キー, "*", "~*")
│    検索キー = Replace(検索キー, "?", "~?")
│    With シート
│        yMax = .UsedRange.Rows(.UsedRange.Rows.Count).Row
│        Set 検索範囲 = .Range(.Cells(yMin, X第一キー), .Cells(yMax, X第一キー))
│        Set obj検索 = 検索範囲.Find( _
│            What:=検索キー, _
│            After:=.Cells(yMin, X第一キー), _
│            LookIn:=xlValues, _
│            LookAt:=xlWhole, _
│            SearchOrder:=xlByRows, _
│            SearchDirection:=xlNext, _
│            MatchCase:=True, _
│            MatchByte:=True _
│        )
│        If obj検索 Is Nothing Then
│            is複合重複 = False
│            Exit Function
│        End If
│        起点アドレス = obj検索.Address
│        Do
│            If .Cells(obj検索.Row, X第二キー).Value = 第二キー Then
│                is複合重複 = True
│                Exit Function
│            End If
│            Set obj検索 = 検索範囲.FindNext(obj検索)
│        Loop Until obj検索.Address = 起点アドレス
│    End With
│    is複合重複 = False
│End Function
│'===============================================================================
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/ゼロの判定
2017年09月20日
「= 0」で判定すると、空欄も真となるので注意。
┌─────┬───┬───┬───┐
│          │= ""  │= "0" │= 0   │
├───┬─┼───┼───┼───┤
│(不問)│  │  真  │  偽  │  真  │
├───┼─┼───┼───┼───┤
│文字列│' │  真  │  偽  │  偽  │
├───┼─┼───┼───┼───┤
│  数値│ 0│  偽  │  真  │  真  │
├───┼─┼───┼───┼───┤
│文字列│ 0│  偽  │  真  │  真  │
├───┼─┼───┼───┼───┤
│文字列│00│  偽  │  偽  │  真  │
├───┼─┼───┼───┼───┤
│  数値│ 1│  偽  │  偽  │  偽  │
├───┼─┼───┼───┼───┤
│文字列│a │  偽  │  偽  │  偽  │
└───┴─┴───┴───┴───┘
分類:ExcelVBA
ExcelVBA/行末尾に追加コピー
2017年09月12日
例えば、複写元シート(一行目は見出行なので除く)を
複写先シートの末尾(最終行の次の行)にコピペするのは、以下のような感じとなる。
┌──────────────────────────────────────┐
│Dim yMax As Long                                                            │
│With 複写元シート                                                           │
│    yMax = .UsedRange.Rows(.UsedRange.Rows.Count).Row                       │
│    .Range(.Rows(2), .Rows(yMax)).Copy                                      │
│End With                                                                    │
│With 複写先シート                                                           │
│    yMax = .UsedRange.Rows(.UsedRange.Rows.Count).Row                       │
│    .Rows(yMax + 1).PasteSpecial                                            │
│End With                                                                    │
│Application.CutCopyMode = False                                             │
└──────────────────────────────────────┘
分類:ExcelVBA
pgAdminのログ
2017年09月11日
以下で設定可能
ファイル>オプション>ロギング設定(タブ)>ログファイル(欄)
分類:PostgreSQL
正規表現/促音・長音
2017年09月04日
秀丸エディタの置換にて。

【促音】(右隣の文字に置換)
                            ┌───┬────┐
                            │置換前│(ッ)(.) │
                            ├───┼────┤
                            │置換後│\2\2    │
                            └┬──┴────┘
  ┌───┐      ┌───┐  │  ┌───┐
  │モット│──→│Moッto│─●→│Motto │
  └───┘      └───┘      └───┘

【長音】(左隣の文字に置換)
                            ┌───┬────┐
                            │置換前│(.)(ー) │
                            ├───┼────┤
                            │置換後│\1\1    │
                            └┬──┴────┘
  ┌───┐      ┌───┐  │  ┌───┐
  │サワー│──→│sawaー│─●→│sawaa │
  └───┘      └───┘      └───┘
分類:正規表現
ExcelVBA/文字列結合に「+」
2017年08月29日
ExcelVBAでは、「文字列 & 文字列」のように文字列結合は「&」も用いるのが一般的。
でも「文字列 + 文字列」のように「+」で代用もできてしまう。
数値の加算と区別する上でも「&」に統一した方がよい。
分類:ExcelVBA
Oracle/EXECUTE IMMEDIATE
2017年08月10日
プレースホルダ的なことができる。
┌──────────────────────────────────────┐
│SQL文 VARCHAR2(256);                                                        │
├──────────────────────────────────────┤
│SQL文 := 'DELETE FROM 表 WHERE キー =:キー';                                │
│EXECUTE IMMEDIATE SQL文 USING 値;                                           │
└──────────────────────────────────────┘
分類:Oracle
Oracle/エラーORA-01779
2017年07月30日
「ORA-01779:キー保存されていない表にマップする列は変更できません」の主な原因。

以下だとOK。
┌──────────────────────────────────────┐
│UPDATE (                                                                    │
│        SELECT "表1"."列1",                                                 │
│               "表2"."列2"                                                  │
│            FROM "表1"                                                      │
│                INNER JOIN "表2"                                            │
│                  ON "表2"."主キー" = "表1"."主キー"                        │
│    )                                                                       │
│    SET "列1" = "列2";                                                      │
└──────────────────────────────────────┘

でも、以下だとNG(本エラー)。
┌──────────────────────────────────────┐
│UPDATE (                                                                    │
│        SELECT "表1"."列1",                                                 │
│               "表2"."列2"                                                  │
│            FROM "表1"                                                      │
│                INNER JOIN "表2"                                            │
│                  ON "表2"."非主キー" = "表1"."非主キー"                    │
│    )                                                                       │
│    SET "列1" = "列2";                                                      │
└──────────────────────────────────────┘
入力元(表2)が複数ある場合を恐れて、制限している。
なお、理論上、単数になることを保証できても、許してくれないようだ。


ヒント句「/*+ BYPASS_UJVC */」で回避(強制実行)できた時代もあったようだが
Oracle11g以降は厳しくなってできなくなっている
┌──────────────────────────────────────┐
│UPDATE (                                                                    │
│        SELECT /*+ BYPASS_UJVC */ "表1"."列1",                              │
│                                  "表2"."列2"                               │
│            FROM "表1"                                                      │
│                INNER JOIN "表2"                                            │
│                  ON "表2"."非主キー" = "表1"."非主キー"                    │
│    )                                                                       │
│    SET "列1" = "列2";                                                      │
└──────────────────────────────────────┘
分類:Oracle
MySQL/更新時における自身のサブクエリ
2017年07月29日
例えば、並び順を末尾に追加したい場合、現状の最大値+1を更新するようにするとする。

ただ、以下だとエラー(1093エラー)となる。
┌──────────────────────────────────────┐
│INSERT INTO `表`                                                            │
│    SET `列` = 値,                                                          │
│        `順` = (SELECT MAX(`順`) + 1                                        │
│                    FROM `表`);                                             │
└──────────────────────────────────────┘

サブクエリに自らの表を使用できないのが原因だ。
この場合、以下のように別表にしてしまえば、これを回避できる。
┌──────────────────────────────────────┐
│INSERT INTO `表`                                                            │
│    SET `列` = 値,                                                          │
│        `順` = (SELECT `順` + 1                                             │
│                    FROM (                                                  │
│                        SELECT MAX(`順`) AS `順`                            │
│                            FROM `表`                                       │
│                    ) AS `別表`);                                           │
└──────────────────────────────────────┘
分類:MySQL
前へ 1 … 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 … 156 次へ