MW211 EXIT

devlog
SQL/先入先出法の在庫シミュレーション
2020年06月20日
入庫レコードと出庫レコードを先入先出法で紐づける場合には
出庫側を両者の重複区間とすればよい。(例はMSSQL)
┌──────────────────────────────────────┐
│WITH [入庫D]([ID],[数]) AS (                                               │
│         SELECT * FROM (VALUES (1, 3),                                      │
│                               (2, 3),                                      │
│                               (3, 3)) AS [入庫D]([ID],[数])               │
│     ),                                                                     │
│     [出庫D]([ID],[数]) AS (                                               │
│         SELECT * FROM (VALUES (1, 1),                                      │
│                               (2, 4)) AS [出庫D]([ID],[数])               │
│     )                                                                      │
│SELECT [入庫D].[ID] AS [入庫ID],                                           │
│       [出庫D].[ID] AS [出庫ID],                                           │
│       CASE                                                                 │
│         WHEN [出庫D].[始] < [入庫D].[始] THEN [入庫D].[始]              │
│         ELSE                                    [出庫D].[始]              │
│       END AS [始],                                                         │
│       CASE                                                                 │
│         WHEN [出庫D].[終] > [入庫D].[終] THEN [入庫D].[終]              │
│         ELSE                                    [出庫D].[終]              │
│       END AS [終]                                                          │
│    FROM (                                                                  │
│        SELECT [ID],                                                        │
│               ISNULL((SELECT SUM([数])                                     │
│                           FROM [入庫D] AS [他D]                          │
│                           WHERE [他D].[ID] < [入庫D].[ID]),              │
│                      0) + 1 AS [始],                                       │
│               (SELECT SUM([数])                                            │
│                    FROM [入庫D] AS [他D]                                 │
│                    WHERE [他D].[ID] <= [入庫D].[ID]) AS [終]             │
│            FROM [入庫D]                                                   │
│    ) AS [入庫D]                                                           │
│        LEFT JOIN (                                                         │
│            SELECT [ID],                                                    │
│                   ISNULL((SELECT SUM([数])                                 │
│                               FROM [出庫D] AS [他D]                      │
│                               WHERE [他D].[ID] < [出庫D].[ID]),          │
│                          0) + 1 AS [始],                                   │
│                   (SELECT SUM([数])                                        │
│                        FROM [出庫D] AS [他D]                             │
│                        WHERE [他D].[ID] <= [出庫D].[ID]) AS [終]         │
│                FROM [出庫D]                                               │
│        ) AS [出庫D]                                                       │
│          ON  [出庫D].[始] <= [入庫D].[終]                                │
│          AND [出庫D].[終] >= [入庫D].[始]                                │
│    ORDER BY [入庫D].[ID] ASC,                                             │
│             [出庫D].[ID] ASC;                                             │
└──────────────────────────────────────┘
分類:SQL
ExcelVBA/QRコード全削除
2020年05月15日
ひとまず図形として削除できる。
┌──────────────────────────────────────┐
│Dim 図形 As OLEObject                                                       │
│For Each 図形 In ActiveSheet.OLEObjects                                     │
│    図形.Delete                                                             │
│Next 図形                                                                   │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/QRコード作成
2020年05月14日
【必要なもの】
  Excel2013以降とAccessRuntime2013以降
  両者のbit数は同じでなければならない
  →ActiveXコントロールに「Microsoft BarCode Control 15.0」が表示されればOK

【AccessRuntimeの入手先】
  Microsoft Access 2013 Runtime
    https://www.microsoft.com/ja-jp/download/details.aspx?id=39358
  Microsoft Access 2016 Runtime
    https://www.microsoft.com/ja-jp/download/details.aspx?id=50040

【追加方法】
  「Microsoft BarCode Control 15.0」からオブジェクトを追加する
  →通常のバーコードが追加される

  それの右クリックメニュー「Microsoft BarCode Control 15.0 オブジェクト」の
  「プロパティ」を表示する
  その中の「スタイル」を「11 - QRコード」に変更
  →形状がQRコードになる

  右クリックメニュー「プロパティ」中の「LinkedCell」にセル番号を入れるか
  「Value」に直接値を入れるかする
  →QRコードの内容に反映される
分類:ExcelVBA
Python/Webスクレイピング(BeautifulSoup)
2020年05月11日
「urlopen」でHTMLを取得し、「BeautifulSoup」で解析する。
その土台となっているのが「Python」ていう感じ。
┌─────────────────┐    ┌─────────────────┐
│              urllib              │ → │          BeautifulSoup           │
│                                  │    │                                  │
│from urllib.request import urlopen│    │from bs4 import BeautifulSoup     │
│html = urlopen(URL).read()        │    │soup = BeautifulSoup(html,        │
│                                  │    │                     "html.parser")
├─────────────────┴──┴─────────────────┤
│                           Python(文法・関数など)                           │
│                                                                            │
│# 結果をファイル出力                                                        │
│f = open("出力.txt", "w", encoding="utf-8")                                 │
│f.write(文字列)                                                             │
│f.close()                                                                   │
│                                                                            │
│# 取得先に負荷をかけないよう間隔を空けることも忘れずに                      │
│from datetime import datetime                                               │
│from time import sleep                                                      │
│sleep(1)                                                                    │
└──────────────────────────────────────┘
分類:Python
ExcelVBA/図形をセルに収める
2020年05月07日
図形(オートシェイプ、ActiveXコントロール)の左上が属するセルに
その図形を収めるマクロ。
┌──────────────────────────────────────┐
│Dim 図形 As Shape                                                           │
│For Each 図形 In ActiveSheet.Shapes                                         │
│    With 図形                                                               │
│        .Left = .TopLeftCell.Left                                           │
│        .Top = .TopLeftCell.Top                                             │
│        .Width = .TopLeftCell.Offset(, 1).Left - .TopLeftCell.Left          │
│        .Height = .TopLeftCell.Offset(1).Top - .TopLeftCell.Top             │
│    End With                                                                │
│Next 図形                                                                   │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/セル結合への値代入
2020年03月26日
セル結合した領域に値を代入するとエラーとなる。(値のクリアも同様)
┌───────────────────┐
│実行時エラー'1004':                   │
│この操作は結合したセルには行えません。│
└───────────────────┘

対処法としては、「.MergeArea」をかませればよい。
┌────────────────────────────┐
│×セル.Value = 値     →  ○セル.MergeArea.Value = 値   │
│×セル.ClearContents  →  ○セル.MergeArea.ClearContents│
└────────────────────────────┘
分類:ExcelVBA
MSSQL/リンクサーバーでエラー
2020年02月20日
【現象】
  リンクサーバを用いて、Oracleの内容をMSSQLに引っぱってくる場合
  テーブル項目にtimestamp型の列が含まれていると以下エラーとなる
  →SELECTでその列を指定しなくともエラーが発生する
┌──────────────────────────────────────┐
│メッセージ 7354、レベル 16、状態 1、行 1                                    │
│リンク サーバー "■" の OLE DB プロバイダー "OraOLEDB.Oracle" により、      │
│無効なメタデータが列 "(timestamp型列)" に指定されました。                   │
│The data type is not supported.                                             │
└──────────────────────────────────────┘

【対策】
  OPENQUERYを用いる
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM OPENQUERY(■, 'SELECT * FROM "表"');                               │
└──────────────────────────────────────┘
分類:MSSQL
MSSQL/一時表の削除方法
2020年01月22日
事前に存在チェックをしてから削除する方法。
┌──────────────────────────────────────┐
│IF OBJECT_ID(N'tempdb..#一時表', N'U') IS NOT NULL                          │
│BEGIN                                                                       │
│    DROP TABLE #一時表;                                                     │
│END;                                                                        │
└──────────────────────────────────────┘
分類:MSSQL
ExcelVBA/日時型
2019年12月20日
ExcelVBAの日時型はDateTime型ではなく、Date型である。
「日付+時間」型みたいなイメージと思ってよいようだ。
┌──────────────────────────────────────┐
│Dim 日時 As Date                                                            │
│日時 = "2019/12/20 12:34:56"                                                │
│MsgBox DateValue(日時)                    '→「2019/12/20」                 │
│MsgBox TimeValue(日時)                    '→「12:34:56」                   │
│MsgBox DateValue(日時) + TimeValue(日時)  '→「2019/12/20 12:34:56」        │
│MsgBox TimeValue(DateValue(日時))         '→「0:00:00」(2019/12/20 0:00:00)│
│MsgBox DateValue(TimeValue(日時))         '→「0:00:00」                    │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/矩形図形の重なりを着色
2019年12月19日
┌──────────────────────────────────────┐
│Sub 矩形図形の重なりを着色()                                                │
│    '-----------------------------------------------------------------------│
│    '  一旦クリア                                                           │
│    '-----------------------------------------------------------------------│
│    Dim 図形 As Shape                                                       │
│    With ActiveSheet                                                        │
│        For Each 図形 In .Shapes                                            │
│            If 図形.Type = msoShapeRectangle Then                           │
│                図形.Fill.ForeColor.RGB = RGB(255, 255, 255)                │
│            End If                                                          │
│        Next 図形                                                           │
│    End With                                                                │
│    '-----------------------------------------------------------------------│
│    '  重なりを着色                                                         │
│    '-----------------------------------------------------------------------│
│    Dim 図形1 As Shape, 図形2 As Shape                                      │
│    Dim i1 As Long, i2 As Long                                              │
│    With ActiveSheet                                                        │
│        For i1 = 1 To .Shapes.Count                                         │
│            If .Shapes(i1).Type = msoShapeRectangle Then                    │
│                Set 図形1 = .Shapes(i1)                                     │
│                For i2 = i1 + 1 To .Shapes.Count                            │
│                    If .Shapes(i2).Type = msoShapeRectangle Then            │
│                        Set 図形2 = .Shapes(i2)                             │
│                        If is重層(図形1.Top, _                              │
│                                  図形1.Top + 図形1.Height, _               │
│                                  図形1.Left, _                             │
│                                  図形1.Left + 図形1.Width, _               │
│                                  図形2.Top, _                              │
│                                  図形2.Top + 図形2.Height, _               │
│                                  図形2.Left, _                             │
│                                  図形2.Left + 図形2.Width) Then            │
│                            図形1.Fill.ForeColor.RGB = RGB(255, 0, 0)       │
│                            図形2.Fill.ForeColor.RGB = RGB(255, 0, 0)       │
│                        End If                                              │
│                    End If                                                  │
│                Next i2                                                     │
│            End If                                                          │
│        Next i1                                                             │
│    End With                                                                │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Private Function is重層( _                                                  │
│    ByVal 上1 As Single, ByVal 下1 As Single, _                             │
│    ByVal 左1 As Single, ByVal 右1 As Single, _                             │
│    ByVal 上2 As Single, ByVal 下2 As Single, _                             │
│    ByVal 左2 As Single, ByVal 右2 As Single _                              │
│) As Boolean                                                                │
│    is重層 = IIf(左1 < 右2 And 左2 < 右1 And 上1 < 下2 And 上2 < 下1, _     │
│                 True, _                                                    │
│                 False)                                                     │
│End Function                                                                │
└──────────────────────────────────────┘
分類:ExcelVBA
前へ 1 … 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 … 156 次へ