MW211 EXIT

devlog
Excel/セルの枠線を消す方法
2018年08月02日
【方法1】枠線を消す
  リボンメニュー「表示」の(「表示」の部にある)「■枠線」のチェックをはずす

【方法2】枠線を白色にする
  「セルの書式設定」の「罫線」タブにて、「色」を白として枠線を引く
  なお、これは背景色が白(もしくは色なし)の場合のみ有効で
  他の色に着色した場合には、(白ではなく)それと同色にする必要あり

【方法3】背景色を白色にする
  意外に盲点なのが背景色が着色されている場合に、枠線が消える点だ
  すべてのセルの(背景色が)白色だったりした場合などには、
  何か違うモードとなっているのかと勘違いしてしまいがぢである
  背景色をなくす(塗りつぶしなしにする)と枠線が復活する
分類:Excel
PHP/JSON整形
2018年08月01日
【JSON→PHP配列】
┌──────────────────────────────────────┐
│$PHP配列 = json_decode($JSON, TRUE);                                        │
└──────────────────────────────────────┘

【PHP配列→JSON】
┌──────────────────────────────────────┐
│$JSON = json_encode($PHP配列);                                              │
└──────────────────────────────────────┘

【PHP配列→JSON】(わかりやすいように表示)
┌──────────────────────────────────────┐
│$JSON = json_encode($PHP配列, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);    │
└──────────────────────────────────────┘
  (JSON_UNESCAPED_UNICODE=日本語そのまま、JSON_PRETTY_PRINT=整列)

従って、以下のようにすると、JSONをきれいに整形できる。
┌──────────────────────────────────────┐
│$PHP配列 = json_decode($JSON, TRUE);                                        │
│echo json_encode($PHP配列, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);       │
└──────────────────────────────────────┘
分類:PHP
ExcelVBA/塊ごとに番号
2018年07月31日
キー列の値が同じ行が続くものを塊ともなし、
その塊ごとに番号を振る方法はないようなので、マクロを組んだ。

以下のような番号(二列目)を振りたいわけだ。
┌─┬─┐
│A │ 1│
├─┼─┤
│A │ 1│
├─┼─┤
│B │ 1│
├─┼─┤
│A │ 2│
├─┼─┤
│C │ 1│
├─┼─┤
│A │ 3│
└─┴─┘

┌──────────────────────────────────────┐
│Const X_キー As Long = 1                                                    │
│Const X_番号 As Long = 2                                                    │
│Dim yMax As Long, y1 As Long, y2 As Long                                    │
│Dim 番号 As Long, is違 As Boolean                                           │
│With シート                                                                 │
│    yMax = .UsedRange.Rows(.UsedRange.Rows.Count).Row                       │
│    .Columns(X_番号).ClearContents                                          │
│    For y1 = 1 To yMax                                                      │
│        If .Cells(y1, X_番号).Value = "" Then                               │
│            is違 = False                                                    │
│            番号 = 1                                                        │
│            For y2 = y1 To yMax                                             │
│                If .Cells(y2, X_キー).Value = .Cells(y1, X_キー).Value Then │
│                    If is違 Then                                            │
│                        is違 = False                                        │
│                        番号 = 番号 + 1                                     │
│                    End If                                                  │
│                    .Cells(y2, X_番号).Value = 番号                         │
│                Else                                                        │
│                    is違 = True                                             │
│                End If                                                      │
│            Next y2                                                         │
│        End If                                                              │
│    Next y1                                                                 │
│End With                                                                    │
└──────────────────────────────────────┘
分類:ExcelVBA
MSSQL/MERGE文を片方だけ
2018年07月30日
UPSERT的な以下MERGE文、WHEN句は削ることができる。
(でも一つは残さないとエラーだけど)
┌──────────────────────────────────────┐
│MERGE INTO [出力D]                                                         │
│    USING [入力D]                                                          │
│      ON [入力D].[キー] = [出力D].[キー]                                  │
│    WHEN MATCHED THEN                                                       │
│        UPDATE SET [列] = [入力D].[列]                                     │
│    WHEN NOT MATCHED BY TARGET THEN                                         │
│        INSERT ([列]) VALUES ([入力D].[列])                                │
│;                                                                           │
└──────────────────────────────────────┘

以下だとINSERT同等。(重複していたらINSERTと違ってエラーにはならない)
┌──────────────────────────────────────┐
│MERGE INTO [出力D]                                                         │
│    USING [入力D]                                                          │
│      ON [入力D].[キー] = [出力D].[キー]                                  │
│----WHEN MATCHED THEN                                                       │
│----    UPDATE SET [列] = [入力D].[列]                                     │
│    WHEN NOT MATCHED BY TARGET THEN                                         │
│        INSERT ([列]) VALUES ([入力D].[列])                                │
│;                                                                           │
└──────────────────────────────────────┘

以下だとUPDATE同等。(該当がなかったらUPDATE同様無視)
┌──────────────────────────────────────┐
│MERGE INTO [出力D]                                                         │
│    USING [入力D]                                                          │
│      ON [入力D].[キー] = [出力D].[キー]                                  │
│    WHEN MATCHED THEN                                                       │
│        UPDATE SET [列] = [入力D].[列]                                     │
│----WHEN NOT MATCHED BY TARGET THEN                                         │
│----    INSERT ([列]) VALUES ([入力D].[列])                                │
│;                                                                           │
└──────────────────────────────────────┘

ちなみに「WHEN MATCHED THEN」は、「WHEN MATCHED THEN DELETE」(DELETE文)もできる。

なお、いずれも「THEN NEXT SENTENSE」的な空処理はできないようだ。
つまりWHEN句は上記のようにコメントアウトするか文を削除する他ない。

一つ以上WHEN句が必要だけどそれを空処理にすることはできない、
ということになるが、そうなるとまったく意味不明なので
そんなことできなくてよいのかもしれない。
分類:MSSQL
Excel/空白を計算するとエラーなのでブランクに…
2018年07月29日
┌─┬──────┬──────┐
│  │     A      │     B      │
├─┼──────┼──────┤
│ 1│=IF(TRUE,"")│=A1*1       │
└─┴──────┴──────┘
上記のような数式の場合、「B1」セルが「#VALUE!」になってしまう。

かといって、下記の様にした場合、「B1」セルは「#VALUE!」にならない(「0」になる)が
「A1」セルには「0」が表示されてしまう。
┌─┬──────┬──────┐
│  │     A      │     B      │
├─┼──────┼──────┤
│ 1│=IF(TRUE,0) │=A1*1       │
└─┴──────┴──────┘

以下だと、「A1」セルは空欄で「B1」セルも「#VALUE!」にならない(「0」になる)
┌─┬──────┬──────┐
│  │     A      │     B      │
├─┼──────┼──────┤
│ 1│            │=A1*1       │
└─┴──────┴──────┘
これをIF文の結果として実現するにはどうすればよいか?


まず、「A1」は空欄ではあるが空文字「""」ではなくBLANKという状態である。
これはISBLANK()関数で識別することができるのだが
数式が入った時点でBLANKという状態ではなくなるので、ISBLANK()はFALSEになる。
「=IF(TRUE,BLANK定数)」みたいな感じに(BLANK()なども)、
BLANK状態とする(BLANK状態を偽装する)方法はないようだ。
→IF文が入力されていているのに未入力という自己矛盾があるから無理か?


従って他の方法での対応となる。

【案1】あきらめて「0」を表示する(もしくは設定で非表示にする)
┌─┬──────┬──────────────────┐
│  │     A      │                 B                  │
├─┼──────┼──────────────────┤
│ 1│=IF(TRUE,0) │=A1*1                               │
└─┴──────┴──────────────────┘
Excel2010の場合、(リボンメニュー「ファイル」中の)「オプション」を起動し
その中の「詳細設定」を表示し、「次のシートで作業するときの表示設定」における
「■ゼロ値のセルにゼロを表示する」のチェックボックスをはずせば
「0」の表示を消すことができる…が、他への影響が大きそうだ。

【案2】参照側で地道にIF文で対処する
┌─┬──────┬──────────────────┐
│  │     A      │                 B                  │
├─┼──────┼──────────────────┤
│ 1│=IF(TRUE,"")│=IF(A1="",0,A1)*1                   │
├─┼──────┼──────────────────┤
│ 1│=IF(TRUE,"")│=IF(ISNUMBER(A1),A1,0)*1            │
├─┼──────┼──────────────────┤
│ 1│=IF(TRUE,"")│=IF(CELL("type",A1)="v",A1,0)*1     │
├─┼──────┼──────────────────┤
│ 1│=IF(TRUE,"")│=IF(ISERR(A1*1),0*1,A1*1)           │
└─┴──────┴──────────────────┘

【案3】参照側でSUM()を使う
┌─┬──────┬──────────────────┐
│  │     A      │                 B                  │
├─┼──────┼──────────────────┤
│ 1│=IF(TRUE,"")│=SUM(A1)*1                          │
└─┴──────┴──────────────────┘
  SUM()は文字列を無視してくれるという特性を利用する。
  これは使えそう?!
分類:Excel
ExcelVBA/現在日から初日の求め方
2018年07月28日
┌──────────────────────────────────────┐
│Dim nowDate As Date: nowDate = Date                                         │
├──────────────────────────────────────┤
│月初日 = DateSerial(Year(nowDate), Month(nowDate), 1)                       │
├──────────────────────────────────────┤
│Const 期首月 As Long = 4                                                    │
│期首日 = IIf(Month(nowDate) < 期首月, _                                     │
│             DateSerial(Year(nowDate) - 1, 期首月, 1),                      │
│             DateSerial(Year(nowDate), 期首月, 1))                          │
├──────────────────────────────────────┤
│年初日 = DateSerial(Year(nowDate), 1, 1)                                    │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/図形をセルに合わせて配置
2018年07月27日
┌──────────────────────────────────────┐
│With シート                                                                 │
│    .図形.Top = .セル.Top                                                   │
│    .図形.Left = .セル.Left                                                 │
│End With                                                                    │
└──────────────────────────────────────┘
上記のように縦位置(.Top)と横位置(.Left)を合わせてあげればよい。

もう少し具体的に記述するなら以下のような感じ。
┌──────────────────────────────────────┐
│With ThisWorkbook.Worksheets("シート")                                      │
│    .Shapes("テキスト ボックス").Top = .Cells(y, x).Top                     │
│    .Shapes("テキスト ボックス").Left = .Cells(y, x).Left                   │
│End With                                                                    │
└──────────────────────────────────────┘
分類:ExcelVBA
主なウェブブラウザエンジン
2018年07月26日
┌──────────────────────────────────────┐
│┌────┬────────┐  ┌────┬────────┐              │
││Trident │Microsoft(IE)   │→│EdgeHTML│Microsoft(Edge) │              │
│└────┴────────┘  └────┴────────┘              │
│┌────┬────────┐  ┌────┬────────┐              │
││Gecko   │Mozilla(Firefox)│→│Servo   │Mozilla(Firefox)│              │
│└────┴────────┘  └────┴────────┘              │
│┌────┐                                                                │
││KHTML   │                                                                │
│└────┘                                                                │
│  │  ┌────┬────────┐                                        │
│  └→│WebKit  │Apple(Safari)   │                                        │
│      └────┴────────┘                                        │
│        │  ┌────┬────────┐                                  │
│        └→│Blink   │Google(Chrome)  │                                  │
│            └────┴────────┘                                  │
│┌────┬───┐  ┌      ┐  ┌      ┐  ┌────┐                  │
││Presto  │Opera │→│WebKit│→│Blink │←│Vivaldi │                  │
│└────┴───┘  └      ┘  └      ┘  └────┘                  │
└──────────────────────────────────────┘
分類:ブラウザ
Oracle/空文字への置換は注意
2018年07月25日
REPLACE()は検索文字に一致した部分を置換する関数だが
TRANSLATE()は検索文字のいずれかに一致した部分を置換してくれる関数だ。
┌──────────────────────────────────────┐
│TRANSLATE(列, '0123456789', ' ')                                            │
└──────────────────────────────────────┘
数値だけを空白に置換する場合には、以下のようにすればよい。

┌──────────────────────────────────────┐
│TRANSLATE(列, '0123456789', '')                                       →NULL│
└──────────────────────────────────────┘
でも、空文字に置換してしまうと、結果は(如何なる場合も)NULLになってしまう。
これは空文字をNULLと同一とみなすOracle特有の事情のようだ。

従って、一回適当な文字(ここでは「0」)に置換して統一した上で
REPLACE()でまとめて置換するのがよいようだ。
┌──────────────────────────────────────┐
│REPLACE(TRANSLATE(列, '0123456789', '0'), '0', '')                          │
└──────────────────────────────────────┘
REPLACE()の場合は、空文字に置換しても問題はない。

数字のみで構成されるかを確認する場合には、TRIM()を使って簡素化できる。
┌──────────────────────────────────────┐
│TRIM(TRANSLATE(列, '0123456789', ' '))                                      │
└──────────────────────────────────────┘
NULLだった場合(IS NULLが真の場合)、数字のみだった訳だ。
→置換して空欄(=NULL)となった訳だから
分類:Oracle
ExcelVBA/マクロを強制的に中断させる方法
2018年07月24日
┌─────────┬────────────────────────────┐
│Ctrl+Pause       │→「コードの実行が中断されました。」                    │
├─────────┼────────────────────────────┤
│ESC(を押し続ける) │同上                                                    │
└─────────┴────────────────────────────┘

中断させないようにする方法もある。(冒頭で設定を変えてしまう)
┌──────────────────────────────────────┐
│Application.EnableCancelKey = xlDisabled       ' 既定「xlInterrupt」から変更│
└──────────────────────────────────────┘
但し、これをすると制御不能となってしまう(*1)ので、注意。
*1:タスク(プロセス)の終了で強制終了させる他なくなる。
分類:ExcelVBA
前へ 1 … 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 … 156 次へ