MW211 EXIT

devlog
Excel/シートが表示されない
2018年09月06日
画面中央のシート部分が全く表示されず灰色(背景色)の場合。

【症状1】シートのウインドウが画面の外側へ移動してしまっている
  解決方法としては、メニューバー「表示」の「整列」で「並べて表示」などを実行

【症状2】右クリックメニューなどが効き単純に描画だけがないような状態
  メニューバー「表示」の「新しいウィンドウを開く」を実行すると
  二つ目のウインドウには正しく表示されたりする
  解決方法としては、(Excelの)画面表示の最大化をやめると正しく表示されたので
  そのまま保存したら再現しなくなった
  →バグだろうか?
分類:Excel
ソフトウェア工程図
2018年09月05日
【ソフトウェア工程図】
┌────────────────────────────────────┬─┐
│      ┌───────────────┐                                ├─┤
│      │基本設計文書作成              │※要件定義(洗い出し)            │設│
│      └┬─┬─┬──────────┘                                │計│
│        │  │┌↓─────────┐                  ┌──────┐│  │
│        │  ││基本設計文書レビュー├────────→│基本設計承認││  │
│        │  │└──────────┘                  └──────┘│  │
│        │┌↓─────────┐                                      │  │
│┌───│┤総合評価項目作成    │      ※要件の網羅を確認              │  │
││      │└──┬───────┘                                      │  │
││      │    ┌↓─────────┐                                  │  │
││      │    │総合評価項目レビュー│  ※出戻り防止対策                │  │
││      │    └──────────┘    (設計の二重チェックも兼ねる)  │  │
││    ┌↓──────────────┐                                │  │
││    │概要設計文書作成              │※外部設計・内部設計            │  │
││    └┬─┬─┬──────────┘                                │  │
││      │  │┌↓─────────┐                  ┌──────┐│  │
││      │  ││概要設計文書レビュー├────────→│概要設計承認││  │
││      │  │└──────────┘                  └──────┘│  │
││      │┌↓─────────┐                                      │  │
││┌──│┤結合評価項目作成    │                                      │  │
│││    │└──┬───────┘                                      │  │
│││    │    ┌↓─────────┐                                  │  │
│││    │    │結合評価項目レビュー│  ※出戻り防止対策                │  │
│││    │    └──────────┘    (設計の二重チェックも兼ねる)  │  │
│││  ┌↓──────────────┐                                ├─┤
│││  │詳細設計文書作成・コーディング│※詳細設計文書はコーディングの  │製│
│││  └┬─┬─┬──────────┘      補助資料のためレビュー不要│造│
│││    │  │┌↓─────────┐                                  │  │
│││    │  ││コードレビュー      │  ※技術的なレビュー              │  │
│││    │  │└──────────┘                                  │  │
│││    │┌↓─────────┐                                      │  │
│││    ││単体評価項目作成    │      ※セルフチェックのため          │  │
│││    │└┬─────────┘                          レビュー不要│  │
│││    │┌↓─────────┐                                      │  │
│││    ││単体評価実施        │      ※セルフチェック                │  │
│││    │└──────────┘                                      │  │
│││    │※コーディングの成果は結合評価で確認(流出有無で真価を判定)    │各│
│││    │  (内部の詳細は各自で管理(低品質の場合は是正勧告・介入))      │自│
│││  ┌↓──────────────┐                                ├─┤
││└→│結合評価実施                  │                                │検│
││    └┬───┬──────────┘                                │査│
││      │    ┌↓─────────┐                  ┌──────┐│  │
││      │    │結合評価結果レビュー├────────→│結合評価承認││  │
││      │    └──────────┘                  └──────┘│  │
││    ┌↓──────────────┐                                │  │
│└─→│総合評価実施                  │                                │  │
│      └────┬──────────┘                                │  │
│              ┌↓─────────┐                  ┌──────┐│  │
│              │総合評価結果レビュー├────────→│総合評価承認││  │
│              └──────────┘                  └──────┘├─┤
└────────────────────────────────────┴─┘
分類:設計
ExcelVBA/印刷が要求順で出力されない
2018年09月04日
いろいろ原因があるようだが、遭遇したものを一つ
・給紙が異なっていた
  「給紙A系(1)→給紙A系(2)→給紙B系(1)」の順に処理(印刷)したら
  「給紙A系(1)→給紙B系(1→給紙A系(2))」の順で印刷された
分類:ExcelVBA
Excel/文字色と背景色の印刷
2018年09月03日
文字色を透明にする(無色化する)ため、背景色と同色を設定した。

画面表示やPDF変換では意図した通りに透明になるのだが、
一部のプリンタの場合、文字色が背景色より若干濃く印刷される場合がある。
(但し、白の場合は除く)

これは、カラーでもモノクロでも同じである。

原因はプリンタドライバや印刷品質の設定にあるようだ。

例えばCanonの複合機の場合、
印刷品質(印刷目的)が「一般」だとその問題が起きるが、
「高精細文書」にすると解決する(文字色が背景色と同じ色で印刷される)。

こういったことがあるということだけは押さえておいた方がよさそうだ。
→文字色を背景色と同色にして無色化する手法は汎用的でない
分類:Excel
ExcelVBA/文字色を透明にする
2018年09月02日
文字色を透明にするパラメータというのはない。
よって、背景色と同色にする対応となる。
以下のような感じ。
┌──────────────────────────────────────┐
│With Cells(1, 1)                                                            │
│    .Font.Color = .Interior.Color                                           │
│End With                                                                    │
└──────────────────────────────────────┘

複数範囲の場合は以下のような感じでもいけるのだが。
┌──────────────────────────────────────┐
│With Range(Cells(1, 1), Cells(2, 2))                                        │
│    .Font.Color = .Interior.Color                                           │
│End With                                                                    │
├──────────────────────────────────────┤
│With Union(Cells(1, 1), Cells(2, 2))                                        │
│    .Font.Color = .Interior.Color                                           │
│End With                                                                    │
└──────────────────────────────────────┘
範囲内の背景色に相違があると、黒(値0=RGB(0, 0, 0))になってしまうので
うまくいかない

そういった場合もあるので、For Eachで個別に対応していった方が安全なようだ。
┌──────────────────────────────────────┐
│Dim セル As Range                                                           │
│For Each セル In Union(Cells(1, 1), Cells(2, 2))                            │
│    セル.Font.Color = セル.Interior.Color                                   │
│Next セル                                                                   │
├──────────────────────────────────────┤
│Dim セル As Range                                                           │
│For Each セル In Range(Cells(1, 1), Cells(2, 2))                            │
│    セル.Font.Color = セル.Interior.Color                                   │
│Next セル                                                                   │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/Range型の右下
2018年08月31日
Range型のデータが矩形範囲の場合、そのまま行もしくは列を参照すると
左上基準で値が取得される
┌──────────────────────────────────────┐
│矩形範囲.Row    → 左上の上                                                 │
│矩形範囲.Column → 左上の左                                                 │
└──────────────────────────────────────┘

この場合以下のようにしてあげれば右下基準で値を取得できる。
┌──────────────────────────────────────┐
│矩形範囲.Cells(矩形範囲.Cells.Count).Row    → 右下の下                     │
│矩形範囲.Cells(矩形範囲.Cells.Count).Column → 右下の右                     │
└──────────────────────────────────────┘

つまり、以下のように取得できる。
┌──────────────────────────────────────┐
│Range("B3").Row                                          '→3               │
│Range("B3").Column                                       '→2               │
├──────────────────────────────────────┤
│Range("B3:C4").Row                                       '→3               │
│Range("B3:C4").Column                                    '→2               │
├──────────────────────────────────────┤
│Range("B3:E6").Cells(Range("B3:E6").Cells.Count).Row     '→6               │
│Range("B3:E6").Cells(Range("B3:E6").Cells.Count).Column  '→5               │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/A1形式の文字列をRange型に変換
2018年08月30日
A1形式の文字列(例えば「B3」)をRange型に変換する方法は実は簡単。
Range()にぶち込めばよいのだ。

すなわち「Range("B3")」でOK。

つまり、以下みたいな感じにできる。
┌──────────────────────────────────────┐
│Const 文字列 As String = "B3"                                               │
│Dim 範囲 As Range                                                           │
│範囲 = Range(文字列)                                                        │
│MsgBox 範囲.Column  '→2                                                    │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/Excel関数でPHPのimplode()代替
2018年08月28日
┌──────────────────────────────────────┐
│IMPLODE = Join(配列, 区切文字)                                              │
└──────────────────────────────────────┘
ExcelVBAにおけるPHPのimplode()と同等の関数は「Join()」なのだが
Excel関数には同等の関数が見当たらない。

ということで、VBA側の関数として実装してみる。
┌──────────────────────────────────────┐
│Public Function IMPLODE(ByVal 範囲 As Range, ByVal 区切文字 As String)      │
│    Dim 配列 As Variant, セル As Variant                                    │
│    配列 = Array()                                                          │
│    For Each セル In 範囲                                                   │
│        If セル.Value <> "" Then                                            │
│            ReDim Preserve 配列(UBound(配列) + 1)                           │
│            配列(UBound(配列)) = セル.Value                                 │
│        End If                                                              │
│    Next セル                                                               │
│    IMPLODE = Join(配列, 区切文字)                                          │
│End Function                                                                │
└──────────────────────────────────────┘
使用方法としては以下のようになる。
┌──────────────────────────────────────┐
│=IMPLODE(A1:B3,",")                                                         │
└──────────────────────────────────────┘
セル範囲を左上から右へそして下段へという範囲で空欄以外が抽出される。
分類:ExcelVBA
ExcelVBA/ActiveXコントロールのコピー
2018年08月27日
┌──────────────────────────────────────┐
│入力シート.Shapes("TextBox").Copy                                           │
│With 出力シート                                                             │
│    .Cells(1, 1).Select                                                     │
│    .Paste                                                                  │
│End With                                                                    │
└──────────────────────────────────────┘
上記のような感じでいけた。

但し、オブジェクト名は初期化されるようで「TextBox1」とかになる。
分類:ExcelVBA
ExcelVBA/別ファイルを開く(2)空のファイル
2018年08月26日
ちなみに、空のファイルを開く、というかアプリケーションを新規起動するには
以下のように「Shell()」(起動成功有無の戻り値あり)を実行してあげればよい。
┌─────┬────────────────────────────────┐
│Word      │Call Shell("winword.exe", vbNormalFocus)                        │
├─────┼────────────────────────────────┤
│Excel     │Call Shell("excel.exe", vbNormalFocus)                          │
├─────┼────────────────────────────────┤
│PowerPoint│Call Shell("powerpnt.exe", vbNormalFocus)                       │
├─────┼────────────────────────────────┤
│メモ帳    │Call Shell("notepad.exe", vbNormalFocus)                        │
└─────┴────────────────────────────────┘
いずれもパスが通っているという前提である。

これらを応用して、紐づいていないアプリで無理やりファイルを開くこともできる。
┌──────────────────────────────────────┐
│Call Shell("winword.exe " & Chr(34) & "C:\説明書.pdf" & Chr(34), _          │
│           vbNormalFocus)                                                   │
└──────────────────────────────────────┘
上記は、PDFファイルを無理やりメモ帳で開いた場合の例。
分類:ExcelVBA
前へ 1 … 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 … 156 次へ