MW211 EXIT

devlog
ExcelVBA/シートまるごとコピー
2017年06月28日
既にある二つのシートのうち、一方を他方へまるごとコピーする方法は以下の通り。
┌──────────────────────────────────────┐
│With ThisWorkbook                                                           │
│    .Worksheets(入力シート名).AutoFilterMode = False                        │
│    .Worksheets(出力シート名).AutoFilterMode = False                        │
│    .Worksheets(入力シート名).Cells.Copy .Worksheets(出力シート名).Cells    │
│    Application.CutCopyMode = False                                         │
│End With                                                                    │
└──────────────────────────────────────┘
念のため事前にオートフィルタを解除しておく方がよい。
なお「Application.CutCopyMode = False」はクリップボードのクリアだ。
分類:ExcelVBA
jQuery/ウインドウのリサイズイベントを完了後に実行
2017年06月26日
┌──────────────────────────────────────┐
│$(function() {                                                              │
│    $(window).resize(function() {                                           │
│        // イベント関数                                                     │
│    });                                                                     │
│});                                                                         │
└──────────────────────────────────────┘
ウインドウのリサイズイベントに応じてイベントを実行するには、
上記のように処理を実装すればよい。

但し、ブラウザによっては、リサイズ中にイベントが多発する可能性がある。

そこで、イベント完了後にのみイベントを実行させる方法。
┌──────────────────────────────────────┐
│var gTimer = false;                                                         │
│$(function() {                                                              │
│    $(window).resize(function() {                                           │
│        if (gTimer !== false) {                                             │
│            clearTimeout(gTimer);                                           │
│        }                                                                   │
│        gTimer = setTimeout(function() {                                    │
│            // イベント関数                                                 │
│        }, 200);                                                            │
│    });                                                                     │
│});                                                                         │
└──────────────────────────────────────┘
リサイズ完了後、0.2秒後に処理を実行するようにしている。
但し、リサイズ中に毎回それがリセットされるので、
本当にリサイズが完了してから、0.2秒後に処理が実行される仕組みとなっている。
分類:jQuery
Excel/名前の範囲を変更する方法
2017年06月23日
メニューバーから「数式」→「名前の管理」を選択し、
変更する名前を選び「参照範囲」を適宜調整する。
分類:Excel
ExcelVBA/複合キー重複チェック
2017年06月21日
単一キーの重複チェックは「COUNTIF()」などを駆使すれば一発だが
複合キーとなると中々めんどくさい。
一番簡単なのは、複合キーを文字列として結合し
単一キーにした上でチェックとなるのだが、どうも煩雑だ。

ということで、マクロで実装を試みた。
選択した範囲内で特定の列(変数で指定)の複合キー重複チェックを行う例。
┌──────────────────────────────────────┐
│'===========================================================================
│'  複合キー重複チェック                                                     
│'===========================================================================
│Public Sub 複合キー重複チェック()
│    Const X第一キー As Long = 1      '照合キー1の列(値は任意)
│    Const X第二キー As Long = 2      '照合キー2の列(値は任意)
│    Const X第三キー As Long = 3      '照合キー3の列(値は任意)
│    Const X出力     As Long = 0      '結果出力列(値は任意)
│    Dim y As Long, y検索 As Long
│    Dim is重複 As Boolean
│    Dim obj検索 As Range, 検索範囲 As Range
│    Application.ScreenUpdating = False
│    ActiveWorkbook.EnableAutoRecover = False
│    With Selection
│        Range(.Cells(1, X出力), .Cells(.Rows.count, X出力)).ClearContents
│        For y = 1 To .Rows.count - 1
│            If .Cells(y, X第一キー).Value <> "" Then
│                If .Rows(y).Row Mod 100 = 0 Then
│                    DoEvents
│                    Application.StatusBar = .Rows(y).Row
│                End If
│                If .Cells(y, X出力).Value = "" Then
│                    If WorksheetFunction.CountIf( _
│                        Range(.Cells(y + 1, X第一キー), .Cells(.Rows.count, X第一キー)), _
│                        .Cells(y, X第一キー).Value _
│                    ) > 0 Then
│                        is重複 = False
│                        Set 検索範囲 = Range(.Cells(y, X第一キー), .Cells(.Rows.count, X第一キー))
│                        Set obj検索 = 検索範囲.Find( _
│                            What:=.Cells(y, X第一キー).Value, _
│                            After:=.Cells(y, X第一キー), _
│                            LookIn:=xlValues, _
│                            LookAt:=xlWhole, _
│                            SearchOrder:=xlByRows, _
│                            SearchDirection:=xlNext, _
│                            MatchCase:=True, _
│                            MatchByte:=True _
│                        )
│                        Do Until obj検索.Address = .Cells(y, X第一キー).Address
│                            y検索 = obj検索.Row - .Rows(1).Row + 1
│                            If .Cells(y検索, X第二キー).Value = .Cells(y, X第二キー).Value _
│                            And .Cells(y検索, X第三キー).Value = .Cells(y, X第三キー).Value Then
│                                .Cells(y検索, X出力).Value = "重"
│                                is重複 = True
│                            End If
│                            Set obj検索 = 検索範囲.FindNext(obj検索)
│                        Loop
│                        If is重複 Then
│                            .Cells(y, X出力).Value = "重"
│                        End If
│                    End If
│                End If
│            End If
│        Next y
│    End With
│    Application.StatusBar = False
│    ActiveWorkbook.EnableAutoRecover = True
│    Application.ScreenUpdating = True
│End Sub
└──────────────────────────────────────┘
分類:ExcelVBA
PHP配列/すべての要素に同じ処理
2017年06月19日
例えば、(一次元)配列の要素全てを数値変換する場合には、
foreach文を使って以下のように処理する。
┌──────────────────────────────────────┐
│foreach ($配列 as &$value) {                                                │
│    $value = intval($value);                                                │
│}                                                                           │
└──────────────────────────────────────┘
array_map()を使うともっとシンプルに書ける
┌──────────────────────────────────────┐
│$配列 = array_map(function($value) {return intval($value);}, $配列);        │
└──────────────────────────────────────┘
分類:PHP配列
WSH/正規表現
2017年06月17日
WSH(VBScript)で正規表現を行うには「VBScript.RegExp」オブジェクトを利用する。
┌──────────────────────────────────────┐
│Dim REG                                                                     │
│Set REG = WScript.CreateObject("VBScript.RegExp")                           │
│REG.Pattern = "^.*\((\d+)\).*$"                                             │
│If REG.Test(入力) Then                                                      │
│    出力 = REG.Replace(入力, "$1")                                          │
│End If                                                                      │
└──────────────────────────────────────┘
分類:WSH・VBS
ExcelVBA/正規表現
2017年06月15日
ExcelVBAで正規表現を行うには「VBScript.RegExp」オブジェクトを利用する。
┌──────────────────────────────────────┐
│'===========================================================================│
│'  正規表現のテスト(括弧内の数値を取得)                                     │
│'===========================================================================│
│Public Sub 正規表現のテスト()                                               │
│    Dim REG As Object                                                       │
│    Set REG = CreateObject("VBScript.RegExp")                               │
│    REG.Pattern = "^.*\((\d+)\).*$"                                         │
│    Dim theCell As Range                                                    │
│    For Each theCell In Selection                                           │
│        If REG.Test(theCell.Value) Then                                     │
│            theCell.Value = REG.Replace(theCell.Value, "$1")                │
│        End If                                                              │
│    Next theCell                                                            │
│End Sub                                                                     │
│'===========================================================================│
└──────────────────────────────────────┘
「.TEST()」メソッドは、一致するの判定に、
「.Replace()」メソッドは、置換に、それぞれ利用する。
正規表現のパターンは「.Pattern」に代入して使用する。
分類:ExcelVBA
正規表現/日本語
2017年06月14日
正規表現で日本語を洗い出す方法(秀丸エディタにて)。
┌──────────────────────────────────────┐
│[^\x01-\x7E]                                                                │
└──────────────────────────────────────┘
分類:正規表現
jQuery/親要素に対する座標
2017年06月13日
親要素を左上(0, 0)とした場合の座標は以下で取得できる。
┌───┬──────────────────────────────────┐
│Y座標 │$(this).position().top                                              │
├───┼──────────────────────────────────┤
│X座標 │$(this).position().left                                             │
└───┴──────────────────────────────────┘

但し、親座標がスクロールした場合、スクロール後の左上が(0, 0)となるため
もしも、スクロールと関係なく親座標の左上を(0, 0)としたい場合には
親のスクロール値も加味してあげる必要がある。
┌───┬──────────────────────────────────┐
│Y座標 │$(this).position().top  + $(this).parent().scrollTop()              │
├───┼──────────────────────────────────┤
│X座標 │$(this).position().left + $(this).parent().scrollLeft()             │
└───┴──────────────────────────────────┘
分類:jQuery
PHP/session_save_path()
2017年06月12日
┌──────────────────────────────────────┐
│session.save_path = "C:\Windows\Temp"                                       │
└──────────────────────────────────────┘
例えば上記のように、「php.ini」で「session.save_path」を設定すれば、
以下のように「session_save_path()」でその値を取得することができる。
┌──────────────────────────────────────┐
│echo session_save_path();                              →「C:\Windows\Temp」│
└──────────────────────────────────────┘

しかし、以下のように設定しない場合(行自体がない場合も含む)には、
「(no value)」扱いとなってしまう。
┌──────────────────────────────────────┐
│session.save_path =                                                         │
└──────────────────────────────────────┘
よって、「session_save_path()」では値を取得できない。
┌──────────────────────────────────────┐
│echo session_save_path();                                             →「」│
└──────────────────────────────────────┘
但し、既定のパスにセッションは記録されるようだ。

既定のパスは「sys_get_temp_dir()」で取得できるようなので
以下のようにしてあげれば補填できそうだ。
┌──────────────────────────────────────┐
│echo (session_save_path()) ? session_save_path() : sys_get_temp_dir();      │
└──────────────────────────────────────┘
分類:PHP
前へ 1 2 次へ