MW211 EXIT

devlog
複合キーでVLOOKUP(連想配列版)
2021年10月04日
一旦、連想配列にデータをぶちこんで、それで直接アクセスするやり方。
キーをタブ結合(タブじゃなくてもいいけど)で、一つにするのがポイント。
┌──────────────────────────────────────┐
│Dim yMax As Long, y As Long, 連想配列 As Object, キー As String             │
│Set 連想配列 = CreateObject("Scripting.Dictionary")                         │
├──────────────────────────────────────┤
│' 連想配列に格納                                                            │
│With 参照シート                                                             │
│    yMax = .UsedRange.Rows(.UsedRange.Rows.Count).Row                       │
│    For y = 2 To yMax                                                       │
│        キー = .Cells(y, Xキー1).Value & vbTab & .Cells(y, Xキー2).Value    │
│        If Not 連想配列.Exists(キー) Then                                   │
│            連想配列.Add キー, .Cells(y, Xバリュー).Value                   │
│        End If                                                              │
│    Next y                                                                  │
│End With                                                                    │
├──────────────────────────────────────┤
│' 連想配列を検索                                                            │
│キー = キー1 & vbTab & キー2                                                │
│If 連想配列.Exists(キー) Then                                               │
│    MsgBox 連想配列(キー)                                                   │
│End If                                                                      │
└──────────────────────────────────────┘
結構速いし、小難しい処理(該当なしで例外とか)がないのでいいかも。
分類:ExcelVBA
業務連絡
2021年09月18日
MySQLからSQLiteへ移行しました。
jQuery/CSVダウンロード・別ウインドウ表示
2021年09月17日
jQueryでCSVファイルを生成しダウンロードさせるには以下のような感じ。
┌──────────────────────────────────────┐
│const blob = new Blob([CSVデータ], {'type':'text/csv'});                    │
│$('<a></a>', {                                                              │
│    'href'      :window.URL.createObjectURL(blob),                          │
│    'download'  :'エクスポート.csv',                                        │
│    'target'    :'_blank'                                                   │
│})[0].click();                                                              │
└──────────────────────────────────────┘
アンカーリンクを生成し、クリックするようなイメージになる。

なお、UTF-8のBOMを先頭に付加する場合は以下のような感じとなる。
┌──────────────────────────────────────┐
│const bom = new Uint8Array([0xEF, 0xBB, 0xBF]);                             │
│const blob = new Blob([bom, CSVデータ], {'type':'text/csv'});               │
│$('<a></a>', {                                                              │
│    'href'      :window.URL.createObjectURL(blob),                          │
│    'download'  :'エクスポート.csv',                                        │
│    'target'    :'_blank'                                                   │
│})[0].click();                                                              │
└──────────────────────────────────────┘

これと同じように自ら生成したHTMLを別ウインドウに開くこともできる。
┌──────────────────────────────────────┐
│const blob = new Blob([HTMLソースコード], {'type':'text/html'});            │
│$('<a></a>', {                                                              │
│    'href'      :window.URL.createObjectURL(blob),                          │
│    'target'    :'_blank'                                                   │
│})[0].click();                                                              │
└──────────────────────────────────────┘
分類:jQuery
ExcelVBA/図形内の改行
2021年08月27日
図形内Textの改行は「vbCrLf」で入力しても「vbCr」になる模様。
「vbLf」かと思った違った。
なお、正規表現は「\r」で代用できる。
分類:ExcelVBA
VBScript/Outlookメーラ起動
2021年08月03日
以下のような感じで。
┌──────────────────────────────────────┐
│Dim objOutlook: Set objOutlook = CreateObject("Outlook.Application")        │
│Dim objMail:    Set objMail = objOutlook.CreateItem(olMailItem)             │
│With objMail                                                                │
│    .BodyFormat = 1                                     'プレーンテキスト   │
│    .To = "TO宛先アドレス"                                                  │
│    .Cc = "CC宛先アドレス"                                                  │
│    .Subject = "件名"                                                       │
│    .Body = "本文"                                                          │
│    .Attachments.Add("添付ファイルのパス")                                  │
│    .ReplyRecipients.Add(.Session.CurrentUser.Address)  '返信先(自分)       │
│    .ReplyRecipients.Add("返信先アドレス")                                  │
│    .Display                                            '編集中メール起動   │
│End With                                                                    │
└──────────────────────────────────────┘
分類:WSH・VBS
Excel関数/マトリックスLOOKUP
2021年06月08日
┌────────────────┐
│    A   B   C   D   E   F   G   │
│  ┌─┬─┬─┬─┬─┬─┬─┐│
│ 1│B │ 3│B3│  │  │  │  ││
│  ├─┼─┼─┼─┼─┼─┼─┤│
│ 2│  │  │  │  │A │B │C ││
│  ├─┼─┼─┼─┼─┼─┼─┤│
│ 3│  │  │  │ 1│A1│B1│C1││
│  ├─┼─┼─┼─┼─┼─┼─┤│
│ 4│  │  │  │ 2│A2│B2│C2││
│  ├─┼─┼─┼─┼─┼─┼─┤│
│ 5│  │  │  │ 3│A3│B3│C3││
│  └─┴─┴─┴─┴─┴─┴─┘│
└────────────────┘
「A1」に横軸、「B1」に縦軸の座標をぞれぞれ指定した場合に
「C1」に結果を出力する場合、「C1」以下の数式を設定する。
┌───────────────────────────┐
│=VLOOKUP(B1,D:G,MATCH(A1,D2:G2,0),FALSE)              │
└───────────────────────────┘
分類:Excel
ExcelVBA/フォルダ移動
2021年06月03日
┌──────────────────────────────────────┐
│ChDir ThisWorkbook.Path                                                     │
└──────────────────────────────────────┘
上記でフォルダ移動ができない場合…

それは、Dドライブとかにそのファイルがある場合で
ドライブ移動も一緒にしないといけないというかもしれない。

ひとまず以下で回避できる。(Dドライブなら)
┌──────────────────────────────────────┐
│ChDir ThisWorkbook.Path                                                     │
│If Left(ThisWorkbook.Path, 1) = "D" Then                                    │
│    ChDrive Left(ThisWorkbook.Path, 1)                                      │
│End If                                                                      │
└──────────────────────────────────────┘

さて、Eドライブやネットワークドライブ(\\)の時はどうしよう?
分類:ExcelVBA
タスクスケジューラ/メッセージが出ない
2021年05月21日
Windowsタスクスケジューラで、
MsgBoxでメッセージがが出力されない場合(タスクが終了しない場合)の解決法
┌セキュリティオプション────────────────┐
│○ユーザがログオンしているときのみ実行する            │
│●ユーザがログオンしているかどうかにかかわらず実行する│
└───────────────────────────┘
  ↓
┌セキュリティオプション────────────────┐
│●ユーザがログオンしているときのみ実行する            │
│○ユーザがログオンしているかどうかにかかわらず実行する│
└───────────────────────────┘
分類:Windows
ExcelVBA/多次元連想配列
2021年04月07日
┌──────────────────────────────────────┐
│Dim ハッシュ As Object                                                      │
│Dim i As Long, キー As Variant                                              │
│Set ハッシュ = CreateObject("Scripting.Dictionary")                         │
│ハッシュ.RemoveAll  ' 参考(全削除)                                          │
│' 値設定                                                                    │
│Set ハッシュ(ハッシュ.Count) = CreateObject("Scripting.Dictionary")         │
│ハッシュ(ハッシュ.Count - 1)("名前") = "織田信長"                           │
│ハッシュ(ハッシュ.Count - 1)("住所") = "安土城"                             │
│Set ハッシュ(ハッシュ.Count) = CreateObject("Scripting.Dictionary")         │
│ハッシュ(ハッシュ.Count - 1)("名前") = "豊臣秀吉"                           │
│ハッシュ(ハッシュ.Count - 1)("住所") = "大阪城"                             │
│Set ハッシュ(ハッシュ.Count) = CreateObject("Scripting.Dictionary")         │
│ハッシュ(ハッシュ.Count - 1)("名前") = "徳川家康"                           │
│ハッシュ(ハッシュ.Count - 1)("住所") = "江戸城"                             │
├──────────────────────────────────────┤
│' 値参照(方法1)                                                             │
│For i = 0 To ハッシュ.Count - 1                                             │
│    MsgBox ハッシュ(i)("名前") & " in " & ハッシュ(i)("住所")               │
│Next i                                                                      │
│' 値参照(方法2)                                                             │
│For Each キー In ハッシュ                                                   │
│    MsgBox ハッシュ(キー)("名前") & " in " & ハッシュ(キー)("住所")         │
│Next キー                                                                   │
└──────────────────────────────────────┘
分類:ExcelVBA
MSSQL/文字列を除外した数値変換の罠
2021年03月02日
数値(実は文字列)と文字列が混在する列から、
数値だけをとりだすには、以下のように
数値以外を除外した上で、数値変換すればよいように思われる。
┌──────────────────────────────────────┐
│SELECT CONVERT([int], [列]) AS [列]                                         │
│    FROM (                                                                  │
│        VALUES ('1'),                                                       │
│               ('a')                                                        │
│    ) AS [表]([列])                                                         │
│    WHERE ISNUMERIC([列]) = 1;                                              │
└──────────────────────────────────────┘
確かに、これ単体だとうまくいく。

ところがこれをVIEWとかサブ表とかにすると、途端にエラーになる
┌──────────────────────────────────────┐
│SELECT [列]                                                                 │
│    FROM (                                                                  │
│        SELECT CONVERT([int], [列]) AS [列]                                 │
│            FROM (                                                          │
│                VALUES ('1'),                                               │
│                       ('a')                                                │
│            ) AS [表]([列])                                                 │
│            WHERE ISNUMERIC([列]) = 1                                       │
│    ) AS [表]                                                               │
│    WHERE [列] = 1;                                                         │
│//→メッセージ 245、レベル 16、状態 1、行 1                                 │
│//  varchar の値 'a' をデータ型 int に変換できませんでした。                │
└──────────────────────────────────────┘

以下のように列として仕分けしてあげないといけないようだ。
┌──────────────────────────────────────┐
│SELECT [列]                                                                 │
│    FROM (                                                                  │
│        SELECT CASE                                                         │
│                 WHEN ISNUMERIC([列]) = 1 THEN                              │
│                   CONVERT([int], [列])                                     │
│                 ELSE                                                       │
│                   NULL                                                     │
│               END AS [列]                                                  │
│            FROM (                                                          │
│                VALUES ('1'),                                               │
│                       ('a')                                                │
│            ) AS [表]([列])                                                 │
│    ) AS [表]                                                               │
│    WHERE [列] = 1;                                                         │
└──────────────────────────────────────┘
分類:MSSQL
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 … 156 次へ