MW211 EXIT

devlog
Windowsバッチ/値入力
2017年07月27日
「set /P」を使う。

以下のような感じ。
┌──────────────────────────────────────┐
│@echo off                                                                   │
│cls                                                                         │
│set /P VAR="値を入力してください:"                                         │
│if "%VAR%"=="" (                                                            │
│    echo 入力がありません                                                   │
│) else (                                                                    │
│    echo 入力された値:%VAR%                                                │
│)                                                                           │
│pause;                                                                      │
└──────────────────────────────────────┘
分類:Windows
Windowsバッチ/空行のecho
2017年07月26日
空行のechoは以下ではダメ。
┌──────────────────────────────────────┐
│echo                                                                        │
└──────────────────────────────────────┘
以下のように「.」をつける。
┌──────────────────────────────────────┐
│echo.                                                                       │
└──────────────────────────────────────┘
分類:Windows
Oracle/部分一致結合
2017年07月23日
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM "表1"                                                              │
│        INNER JOIN "表2"                                                    │
│          ON  "表2"."列" = "表1"."列"                                       │
└──────────────────────────────────────┘
上記だと完全一致したものしか結合できない。

例えば表1が「ABC」で表2が「ABC2」の場合も結合したい場合、
「'ABC2' LIKE 'ABC%'」的なことをしたい場合、
「CONCAT()」で「%」を結合させてあげれば実現できる。
(「CONCAT()」の代わりに「||」でもOK)
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM "表1"                                                              │
│        INNER JOIN "表2"                                                    │
│          ON  "表2"."列" LIKE CONCAT("表1"."列", '%');                      │
├──────────────────────────────────────┤
│SELECT *                                                                    │
│    FROM "表1"                                                              │
│        INNER JOIN "表2"                                                    │
│          ON  "表2"."列" LIKE "表1"."列" || '%';                            │
└──────────────────────────────────────┘
分類:Oracle
ExcelVBA/CountIf()で大文字小文字の区別
2017年07月17日
┌──────────────────────────────────────┐
│WorksheetFunction.CountIf(範囲, 値)                                         │
└──────────────────────────────────────┘
上記では、大文字と小文字の区別ができない。

Excel関数なら以下のようにすれば大文字と小文字を区別できる。
┌──────────────────────────────────────┐
│=SUMPRODUCT((EXACT(範囲,値))*1)                                             │
└──────────────────────────────────────┘

しかし、これを、VBAにしようとすると「WorksheetFunction.Exact()」がないので
実装た困難である。

だが、Excel関数を直接実行する「Evaluate()」を使えば実装できなくはない。
┌──────────────────────────────────────┐
│Evaluate("SUMPRODUCT(EXACT(" & 範囲 & "," & Chr(34) & 値 & Chr(34) & ")*1)")│
└──────────────────────────────────────┘
だけど「Evaluate()」は処理速度が遅いのがネックである。

ちなみに範囲の部分は「Selection」だったら「Selection.Address」とかになる。
分類:ExcelVBA
ExcelVBA/デスクトップのパス
2017年07月06日
ファイルをデスクトップへ出力する場合などに、デスクトップのパスを知りたくなるが
その方法は以下の通り。
┌──────────────────────────────────────┐
│Dim objWSH As Object                                                        │
│Set objWSH = CreateObject("WScript.Shell")                                  │
│MsgBox objWSH.SpecialFolders("Desktop")                                     │
└──────────────────────────────────────┘
なお、末尾に「\」はつかないので、続けてファイルを指定する場合には
「\」をはさむ必要がある。
分類:ExcelVBA
ExcelVBA/途中経過の表示
2017年07月05日
大量のデータを処理する場合、現在、どこまで進んでいるか知りたくなる。

そんな場合、以下のように、ステータスバーに件数を表示すればよい。
┌──────────────────────────────────────┐
│For y = 1 To 10000                                                          │
│    If .Rows(y).Row Mod 100 = 0 Then                                        │
│        DoEvents                                                            │
│        Application.StatusBar = .Rows(y).Row                                │
│    End If                                                                  │
│    ' 処理                                                                  │
│Next y                                                                      │
│Application.StatusBar = False  ' 最後に表示をクリア                         │
└──────────────────────────────────────┘
  ・行番号「.Rows(y).Row」を表示するようにしているが、
    もちろんそのまま「y」でもOK。
  ・処理が速めなので、100件ごとに間引いている。
  ・「DoEvents」がないと、途中でステータスバーの表示自体も固まってしまい
    表示されなくなるので、これは必須だ。
分類:ExcelVBA
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
前へ 1 … 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 … 156 次へ