MW211 EXIT

devlog
ExcelVBA/Type(2)
2017年12月13日
Type(構造体)は配列化できる。
┌─────┬────────────────────────────────┐
│Typeの定義│Type 構造体                                                     │
│          │    列1          As Long                                        │
│          │    列2          As String                                      │
│          │End Type                                                        │
├─────┼────────────────────────────────┤
│Typeの使用│Dim 配列構造体インスタンス(1 To 3) As 構造体                    │
│          │構造体インスタンス(1).列1 = 0;                                  │
│          │MsgBox 構造体インスタンス(1).列1                                │
└─────┴────────────────────────────────┘
もちろん動的配列もOK。

構造体の入れ子もできる。(サブ側を先に宣言しないとエラーとなるので注意)
┌─────┬────────────────────────────────┐
│Typeの定義│Type サブ構造体                                                 │
│          │    副列1        As Long                                        │
│          │    副列2        As String                                      │
│          │End Type                                                        │
│          │Type 構造体                                                     │
│          │    列1          As Long                                        │
│          │    列2          As String                                      │
│          │    列3          As サブ構造体                                  │
│          │End Type                                                        │
└─────┴────────────────────────────────┘
さらには動的配列にもできる。
┌─────┬────────────────────────────────┐
│Typeの定義│Type サブ構造体                                                 │
│          │    副列1        As Long                                        │
│          │    副列2        As String                                      │
│          │End Type                                                        │
│          │Type 構造体                                                     │
│          │    列1          As Long                                        │
│          │    列2          As String                                      │
│          │    列3()        As サブ構造体                                  │
│          │End Type                                                        │
└─────┴────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/クリップボード
2017年12月12日
クリップボードの制御には、参照設定「Microsoft Forms 2.0 Object Library」が必要。

「,」付きの数値をコピーした場合に、
クリップボード上では「,」を除外する方法を模索中。
┌──────────────────────────────────────┐
│Option Explicit                                                             │
│Private Sub Worksheet_SelectionChange(ByVal Target As Range)                │
│    Dim myData As New DataObject                                            │
│    On Error Resume Next                                                    │
│    myData.GetFromClipboard                                                 │
│    myData.SetText Replace(myData.GetText, ",", "")                         │
│    myData.PutInClipboard                                                   │
│End Sub                                                                     │
└──────────────────────────────────────┘
こんな感じか?さてどのイベントで拾おうか。。。

ちなみにショートカットキー「ctrl+c」を登録して
以下の関数を呼び出すというのもありかも。
┌──────────────────────────────────────┐
│Option Explicit                                                             │
│Public Sub ctrlc()                                                          │
│    Dim clipBoard As New DataObject                                         │
│    On Error Resume Next                                                    │
│    clipBoard.SetText Replace(ActiveCell.Value, ",", "")                    │
│    clipBoard.PutInClipboard                                                │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
SVN/機種依存文字は使えない?
2017年12月07日
TortoiseSVNにて「ログを表示」を実行した場合、
「サーバーに接続する際に問題が発生しました。…」というエラーが表示され
コミットしたものを参照できなくなる問題に遭遇した。

どうやら原因はファイル名などに機種依存文字(例「Ⅵ」など)が
含まれている場合に発生するようだ。

実験してみたら位置関係的には以下のような感じだった。
┌───────────────────────┐
│■機種依存文字ありルートフォルダ  →○参照可  │
│├□機種依存文字なしファイル      →○参照可  │
│├■機種依存文字ありファイル      →×参照不可│
│└■機種依存文字ありフォルダ      →×参照不可│
│  ├□機種依存文字なしファイル    →×参照不可│
│  └■機種依存文字ありファイル    →×参照不可│
└───────────────────────┘
分類:SVN
PHP/カンマ連結
2017年12月02日
「echo 'a' . 'b';」(ドット連結)と「echo 'a' , 'b';」(カンマ連結)の違い。

イメージ的に、「echo 'a' . 'b';」は
┌──────────────────────────────────────┐
│$dummy = 'a' . 'b';                                                         │
│echo $dummy;                                                                │
└──────────────────────────────────────┘
なのに対して、「echo 'a' , 'b';」は
┌──────────────────────────────────────┐
│echo 'a';                                                                   │
│echo 'b';                                                                   │
└──────────────────────────────────────┘
といった感じ。

よって、「$dummy = 'a' , 'b';」とかはできなのだけれども、
カンマ連結の方が途中にバッファを持たない分、速くて小さくまとめられる。

よって、どちらかというとカンマ連結が推奨される。
分類:PHP
ExcelVBA/正規表現のモンテカルロ法による検証
2017年12月01日
┌──────────────────────────────────────┐
│Option Explicit                                                             │
├──────────────────────────────────────┤
│Public Sub 正規表現のモンテカルロ法による検証()                             │
│    Dim REG As Object: Set REG = CreateObject("VBScript.RegExp")            │
│    Dim i As Long, 検証文字 As String                                       │
│    Dim y1 As Long: y1 = 1                                                  │
│    Dim y2 As Long: y2 = 1                                                  │
│    Cells.ClearContents                                                     │
│    Cells(1, 1).Value = "【一致】"                                          │
│    Cells(1, 2).Value = "【不一致】"                                        │
│    REG.Pattern = "^[A-Z]+$"    ' ここに検証したい正規表現を指定            │
│    Randomize                                                               │
│    For i = 1 To 60000                                                      │
│        検証文字 = ランダム文字生成()                                       │
│        If REG.test(検証文字) Then                                          │
│            y1 = y1 + 1                                                     │
│            Cells(y1, 1).Value = 検証文字                                   │
│        Else                                                                │
│            y2 = y2 + 1                                                     │
│            Cells(y2, 2).Value = 検証文字                                   │
│        End If                                                              │
│    Next i                                                                  │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Private Function ランダム文字生成() As String                               │
│    Dim 結果 As String: 結果 = ""                                           │
│    Dim i As Long, iMax As Long, dw(0 To 2) As String                       │
│    iMax = Int(Rnd * 8) + 4                                                 │
│    For i = 1 To iMax                                                       │
│        dw(0) = Int(Rnd * 10)               ' 数字(0~9)                    │
│        dw(1) = Chr(Int(Rnd * 26) + 65)     ' 英大文字(A~Z)                │
│        dw(2) = Chr(Int(Rnd * 26) + 97)     ' 英小文字(a~z)                │
│        結果 = 結果 & dw(Rnd * 2)                                           │
│    Next i                                                                  │
│    ランダム文字生成 = 結果                                                 │
│End Function                                                                │
└──────────────────────────────────────┘
数値版の場合は以下の通り。
┌──────────────────────────────────────┐
│Option Explicit                                                             │
├──────────────────────────────────────┤
│Public Sub 正規表現のモンテカルロ法による検証数値版()                       │
│    Dim REG As Object: Set REG = CreateObject("VBScript.RegExp")            │
│    Dim i As Long, 検証数値 As Long                                         │
│    Dim y1 As Long: y1 = 1                                                  │
│    Dim y2 As Long: y2 = 1                                                  │
│    Cells.ClearContents                                                     │
│    Cells(1, 1).Value = "【一致】"                                          │
│    Cells(1, 2).Value = "【不一致】"                                        │
│    REG.Pattern = "^(?:0|[1-9]|1[0-2])$"    ' ここに検証したい正規表現を指定│
│    Randomize                                                               │
│    For i = 1 To 60000                                                      │
│        検証数値 = Int(Rnd * 65536)                                         │
│        If REG.test(検証数値) Then                                          │
│            y1 = y1 + 1                                                     │
│            Cells(y1, 1).Value = 検証数値                                   │
│        Else                                                                │
│            y2 = y2 + 1                                                     │
│            Cells(y2, 2).Value = 検証数値                                   │
│        End If                                                              │
│    Next i                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/乱数
2017年11月30日
たとえばこんな感じ。
┌──────────────────────────────────────┐
│Public Sub ランダム文字生成()                                               │
│    Dim result As String: result = ""                                       │
│    Dim i As Long, dw(0 To 2) As String                                     │
│    Randomize                                                               │
│    For i = 1 To 8                                                          │
│        dw(0) = Int(Rnd * 10)               ' 数字(0~9)                    │
│        dw(1) = Chr(Int(Rnd * 26) + 65)     ' 英大文字(A~Z)                │
│        dw(2) = Chr(Int(Rnd * 26) + 97)     ' 英小文字(a~z)                │
│        result = result & dw(Rnd * 2)                                       │
│    Next i                                                                  │
│    MsgBox result                                                           │
│End Sub                                                                     │
└──────────────────────────────────────┘
要点としては以下の通りである。
┌───────┬──────────────────────────────┐
│Randomize     │乱数をシャッフル                                            │
├───────┼──────────────────────────────┤
│Rnd           │0以上1未満                                                  │
├───────┼──────────────────────────────┤
│Int(Rnd * 10) │0~9                                                        │
└───────┴──────────────────────────────┘
分類:ExcelVBA
CSS/点滅
2017年11月29日
CSSで点滅させる方法。
(これだとJavaScriptでタイマを仕込んで定期的にトグルとかしなくてもよくなる)

まず、keyframes定義にて何らかの名称で属性を定義する。
ここでは「BLINK」という名称で定義した。
┌──────────────────────────────────────┐
│@keyframes BLINK {                                                          │
│    0% {                                                                    │
│        opacity :1.0;                                                       │
│    }                                                                       │
│    50% {                                                                   │
│        opacity :0;                                                         │
│    }                                                                       │
│}                                                                           │
└──────────────────────────────────────┘
「opacity」とは不透明度のことであり、「0」が透明となる。
つまり、始点(0%)では不透明(点灯)、終点では透明(消灯)となる指定を
「BLINK」に定義している
なお、本来終点は「100%」だが、後述の様に変化を一段で行うため、
今回は真ん中の「50%」を終点と見立てている

後は、それを各要素に対して、animation属性として定義してあげればOK。
┌──────────────────────────────────────┐
│div.light {                                                                 │
│    background-color    :#FFFF00;                                           │
│    animation           :BLINK 1.0s steps(1,end) 0s infinite normal;        │
│}                                                                           │
└──────────────────────────────────────┘
パラメータの詳細は以下のような感じ。
┌──────┬───────────────────────────────┐
│BLINK       │keyframes定義で定義した「BLINK」属性を用いる                  │
├──────┼───────────────────────────────┤
│1.0s        │処理周期1秒(1秒で点灯から消灯まで行われる)                    │
├──────┼───────────────────────────────┤
│steps(1,end)│変化の度合い                                                  │
│            │緩やかに変化させることもできるが、点滅なので、変化は一段のみ  │
├──────┼───────────────────────────────┤
│0s          │開始までの時間0秒(つまり、すぐ開始)                           │
├──────┼───────────────────────────────┤
│infinite    │繰り返し回数、無限(永久)                                      │
├──────┼───────────────────────────────┤
│normal      │順方向のみ                                                    │
└──────┴───────────────────────────────┘
分類:HTML5+CSS3
ExcelVBA/存在チェックいろいろ
2017年11月22日
存在チェックのやり方を遅い順に列挙してみた。
┌──────────────────────────────────────┐
│Set 検索 = 範囲.Find( _                                                     │
│    What:=セル.Value, _                                                     │
│    After:=セル, _                                                          │
│    LookIn:=xlValues, _                                                     │
│    Lookat:=xlWhole, _                                                      │
│    SearchOrder:=xlByRows, _                                                │
│    SearchDirection:=xlNext, _                                              │
│    MatchCase:=True, _                                                      │
│    MatchByte:=True _                                                       │
│)                                                                           │
│If 検索.Address <> セル.Address Then                                        │
│    ' 重複あり                                                              │
│Else                                                                        │
│    ' 重複なし                                                              │
│End If                                                                      │
├──────────────────────────────────────┤
│If WorksheetFunction.CountIf(範囲, セル.Value) > 0 Then                     │
│    ' 重複あり                                                              │
│Else                                                                        │
│    ' 重複なし                                                              │
│End If                                                                      │
├──────────────────────────────────────┤
│On Error Resume Next                                                        │
│Call WorksheetFunction.VLookup(セル.Value, 範囲, 1, False)                  │
│If Err.Number = 0 Then                                                      │
│    ' 重複あり                                                              │
│Else                                                                        │
│    ' 重複なし                                                              │
│End If                                                                      │
│On Error GoTo 0                                                             │
├──────────────────────────────────────┤
│On Error Resume Next                                                        │
│Call WorksheetFunction.Match(範囲, セル.Value, 0)                           │
│If Err.Number = 0 Then                                                      │
│    ' 重複あり                                                              │
│Else                                                                        │
│    ' 重複なし                                                              │
│End If                                                                      │
│On Error GoTo 0                                                             │
└──────────────────────────────────────┘
分類:ExcelVBA
Windows/delコマンドのエラーの違い
2017年11月17日
「del」コマンドでファイルを削除しようとしたら、以下のエラーが発生した。
  ・「■■■■が見つかりませんでした。」
  ・「指定されたファイルが見つかりません。」
  ・「指定されたパスが見つかりません。」
  ・「アクセスが拒否されました。」
それぞれの違いは何か?

例えば「del "C:\a\b\c.txt"」の場合

・「■■■■が見つかりませんでした。」
  →フォルダまでは存在するが、ファイルが見つからない場合
    「C:\a\b」までは存在するが、「c.txt」が存在しない場合

・「指定されたファイルが見つかりません。」
  →フォルダ自体が存在しない場合(但し、直前のフォルダまで存在する場合)
    「C:\a」までは存在するが、「b」が存在しない場合

・「指定されたパスが見つかりません。」
  →フォルダ自体が存在しない場合(但し、直前のフォルダも存在しない場合)
    「C:\a」が存在しない場合

・「アクセスが拒否されました。」
  →読み取り専用属性が設定されている場合
    「del /f」コマンドに切り替える必要あり
分類:Windows
ExcelVBA/Type
2017年11月15日
Type(構造体)のいろいろ。こんな感じということで。
┌─────┬────────────────────────────────┐
│Typeの定義│Type 構造体                                                     │
│          │    列1          As Long                                        │
│          │    列2          As String                                      │
│          │End Type                                                        │
├─────┼────────────────────────────────┤
│Typeの使用│Dim 構造体インスタンス As 構造体                                │
│          │構造体インスタンス.列1 = 0;                                     │
│          │MsgBox 構造体インスタンス.列1                                   │
│          │Call 関数(構造体インスタンス)                                   │
│          │────────────────────────────────│
│          │Sub 関数(ByVal 引数インスタンス As 構造体)                      │
│          │    MsgBox 構造体インスタンス.列1                               │
│          │End Sub                                                         │
└─────┴────────────────────────────────┘
分類:ExcelVBA
前へ 1 … 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 … 156 次へ