MW211 EXIT

devlog
VC#/ListViewのヘッダ設定
2018年07月08日
以下のように親フォームのロード時に、列を追加することによりヘッダ列が設定できる。
┌──────────────────────────────────────┐
│private void フォーム_Load(object sender, EventArgs e)                      │
│{                                                                           │
│    リストビュー.View = View.Details;                                       │
│    リストビュー.Columns.Add("一列目");                                     │
│    リストビュー.Columns.Add("二列目");                                     │
│    リストビュー.Columns.Add("三列目");                                     │
│}                                                                           │
└──────────────────────────────────────┘
なお、詳細表示モード(View.Details)でないとヘッダは表示されない。
分類:VC#
VC#/列幅を自動調整する方法
2018年07月07日
境界線でダブルクリックすると値に応じで自動で伸縮するが、
それをC#のListViewで行う方法。

┌──────────────────────────────────────┐
│ヘッダカラム.Width = -1;                                                    │
└──────────────────────────────────────┘
ヘッダカラムの横幅(.Width)に「-1」を代入すればよい。

全ての列にそれを適用する例は以下の通り。
┌──────────────────────────────────────┐
│foreach (ColumnHeader ヘッダカラム in リストビュー.Columns)                 │
│{                                                                           │
│    ヘッダカラム.Width = -1;                                                │
│}                                                                           │
└──────────────────────────────────────┘
分類:VC#
VC#/textBoxの縦幅を拡大する
2018年07月06日
既定では一行なので、複数行OKに変更すればよい。
┌──────────┐
│動作                │
│┌─────┬───┤
││Multiline │True  │(←False)
└┴─────┴───┘
分類:VC#
SQL/親子表と外部キーの関係
2018年07月05日
以下の関係になる。
┌ 子表 ────────┐┌ 親表 ──┐
│┌───┐┌────┐││┌───┐│
││主キー││外部キー├──┤主キー││
│└───┘└────┘││└───┘│
│                      │└─────┘
│                      │┌ 親表 ──┐
│          ┌────┐││┌───┐│
│          │外部キー├──┤主キー││
│          └────┘││└───┘│
└───────────┘└─────┘
分類:SQL
Oracle/プレースホルダのもう一つの利点
2018年07月04日
プレースホルダを使用する利点はSQLインジェクション対策以外に
SQL文の画一化により解析を共有できるという点もあるよ。

以下は別ものとして解析されてしまうが…
・「SELECT * FRON 表 WHERE 列 = 1」
・「SELECT * FRON 表 WHERE 列 = 2」

以下にすれば、一つとして解析されて実績も増えるよということ。
・「SELECT * FRON 表 WHERE 列 = %」
分類:Oracle
ExcelVBA/続・セル選択イベントを一つのセルで
2018年07月03日
┌──────────────────────────────────────┐
│Private Sub Worksheet_SelectionChange(ByVal Target As Range)                │
│    If Target.CountLarge <> 1 Then                                          │
│        Exit Sub                                                            │
│    End If                                                                  │
│    If Target.Column = 対象列番号 Then                                      │
│        Call イベント                                                       │
│    End If                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘
だと、セル結合された一塊を選択した場合にはじかれてしまう。

上記を克服したものは以下である。
┌──────────────────────────────────────┐
│Private Sub Worksheet_SelectionChange(ByVal Target As Range)                │
│    If Target.CountLarge <> Target(1).MergeArea.Count Then                  │
│        Exit Sub                                                            │
│    End If                                                                  │
│    If Target.Column = 対象列番号 Then                                      │
│        Call イベント                                                       │
│    End If                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘
全体の選択数と左上のセル結合数が一致した場合にのみイベント発動としている。
セル結合がないひとつのセルを選択した場合には「1=1」でイベントう発動。
分類:ExcelVBA
ExcelVBA/セル選択イベントを一つのセルで
2018年07月02日
セル選択に伴いイベントを駆動するには以下のような形になる。
┌──────────────────────────────────────┐
│Private Sub Worksheet_SelectionChange(ByVal Target As Range)                │
│    If Target.Column = 対象列番号 Then                                      │
│        Call イベント                                                       │
│    End If                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘

但し「Target」はセル範囲なので、一つのセルとは限らない。

セルが一つの場合に限定するには、「.CountLarge」の値を見る。
┌──────────────────────────────────────┐
│Private Sub Worksheet_SelectionChange(ByVal Target As Range)                │
│    If Target.CountLarge <> 1 Then                                          │
│        Exit Sub                                                            │
│    End If                                                                  │
│    If Target.Column = 対象列番号 Then                                      │
│        Call イベント                                                       │
│    End If                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘
なお、旧バージョン(.xls)では「.Count」というのがあったが
新バージョン(.xlsm)対応の「.CountLarge」を使った方がよい。
(さもないとず~っと右端のセルを選択した場合にはオーバフローでエラーとなる)
分類:ExcelVBA
ExcelVBA/二次元配列の行抽出
2018年07月01日
セル範囲を二次元配列に格納して、特定の列の特定の値の行のみ抽出する関数。
もっとスマートな方法がありそうだが。
┌──────────────────────────────────────┐
│Private Function 二次元配列行抽出(ByVal 入力配列 As Variant, _              │
│                                  ByVal x抽出 As Long, _                    │
│                                  ByVal 値 As String) As Variant            │
│    Dim 出力配列 As Variant                                                 │
│    Dim y出力 As Long, y入力 As Long, x As Long                             │
│    ' 該当件数調査                                                          │
│    y出力 = 0                                                               │
│    For y入力 = LBound(入力配列, 1) To UBound(入力配列, 1)                  │
│        If 入力配列(y入力, x抽出) = 値 Then                                 │
│            y出力 = y出力 + 1                                               │
│        End If                                                              │
│    Next y入力                                                              │
│    ' 該当なしの場合は空の一行を返却                                        │
│    If y出力 = 0 Then                                                       │
│        ReDim 出力配列(1, 1 To UBound(入力配列, 2))                         │
│        二次元配列行抽出 = 出力配列                                         │
│        Exit Function                                                       │
│    End If                                                                  │
│    ' 抽出                                                                  │
│    ReDim 出力配列(1 To y出力, 1 To UBound(入力配列, 2))                    │
│    y出力 = 0                                                               │
│    For y入力 = LBound(入力配列, 1) To UBound(入力配列, 1)                  │
│        If 入力配列(y入力, x抽出) = 値 Then                                 │
│            y出力 = y出力 + 1                                               │
│            For x = LBound(入力配列, 2) To UBound(入力配列, 2)              │
│                出力配列(y出力, x) = 入力配列(y入力, x)                     │
│            Next x                                                          │
│        End If                                                              │
│    Next y入力                                                              │
│    二次元配列行抽出 = 出力配列                                             │
│End Function                                                                │
└──────────────────────────────────────┘
分類:ExcelVBA
前へ 1 2 3 次へ