MW211 EXIT

devlog
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
ExcelVBA/別ファイルを開く(1)紐づくアプリで開く
2018年08月25日
ファイルがアプリケーションに紐づいているのであれば、
当該ファイルを以下のように、WSHから.Runしてあげればよい
┌──────────────────────────────────────┐
│Dim objWSH As Object                                                        │
│Set objWSH = CreateObject("Wscript.Shell")                                  │
│objWSH.Run Chr(34) & "C:\説明書.pdf" & Chr(34)                              │
└──────────────────────────────────────┘
パスはスペースが混じるといけないので、Chr(34)で囲っておいた方がよい。

ちなみにシェルから.ShellExecuteでも同様のことができる。
┌──────────────────────────────────────┐
│Dim objShell As Object                                                      │
│Set objShell = CreateObject("Shell.Application")                            │
│objShell.ShellExecute Chr(34) & "C:\説明書.pdf" & Chr(34)                   │
└──────────────────────────────────────┘

また、順番に複数のファイルを開くようにするには、第三引数に「True」を設定する。
これで、一つ目のファイルを閉じた時に二つ目のファイルが開くようにできる。
┌──────────────────────────────────────┐
│Dim objWSH As Object                                                        │
│Set objWSH = CreateObject("Wscript.Shell")                                  │
│objWSH.Run Chr(34) & "C:\説明書1.pdf" & Chr(34), 0, True                    │
│objWSH.Run Chr(34) & "C:\説明書2.pdf" & Chr(34)                             │
└──────────────────────────────────────┘
この指定がない場合には、最初の瞬間に両方のファイルがほぼ同時に開くことになる。
分類:ExcelVBA
削除したiPhoneメールの復活
2018年08月24日
iPhoneのメーラにて、ゴミ箱アイコンをクリックしてしまいメールを削除した場合
ちょっと非表示がわかりにくいので大いに焦る。

ゴミ箱内における当該メールの本文は以下のように表示されたりするのである。
┌──────────────────────────────────────┐
│フォーマットの方法に問題があるため、このメッセージは表示できません。        │
│別のフォーマットまたはメールプログラムを使ってメッセージを再送信するように  │
│送信者へ依頼してください。                                                  │
│                                                                            │
│text/plain                                                                  │
├──────────────────────────────────────┤
│このメッセージには本文がありません。                                        │
└──────────────────────────────────────┘

しかし、焦ることはない。ただ普通にゴミ箱に転送されたのと同じ状態なのだ。

ということで、復活する方法。

(1) ゴミ箱(の最初の画面)のメール一覧にて、右上の「編集」をクリック
(2) メール選択モードになるので、当該メールを選択(チェックを入れる)
(3) フッタメニューより「移動」をクリック
(4) 移動先として「受信」フォルダを選択

すると「受信」フォルダに本文は元のまま復活しているので
後は移動するなり、なんなりすればOK。
分類:iPhone
Office拡張子
2018年08月23日
┌───────────────────────┬────┬────┬────┐
│                 Officeの種類                 │旧式(*1)│マクロ無│マクロ有│
└───────────────────────┴────┴────┴────┘
┌───────────────────────┬────┬────┬────┐
│Word                                          │.doc    │.docx   │.docm   │
├───────────────────────┼────┼────┼────┤
│Wordのテンプレート形式                        │.dot    │.dotx   │.dotm   │
└───────────────────────┴────┴────┴────┘
┌───────────────────────┬────┬────┬────┐
│Excel                                         │.xls    │.xlsx   │.xlsm   │
├───────────────────────┼────┼────┼────┤
│Excelのテンプレート形式                       │.xlt    │.xltx   │.xltm   │
├───────────────────────┼────┼────┼────┤
│Excelのアドイン形式                           │.xla    │   -   │.xlam   │
└───────────────────────┴────┴────┴────┘
┌───────────────────────┬────┬────┬────┐
│PowerPointのプレゼンテーション形式            │.ppt    │.pptx   │.pptm   │
├───────────────────────┼────┼────┼────┤
│PowerPointのスライドショー形式                │.pps    │.ppsx   │.ppsm   │
├───────────────────────┼────┼────┼────┤
│PowerPointのテンプレート形式                  │.pot    │.potx   │.potm   │
├───────────────────────┼────┼────┼────┤
│PowerPointのアドイン形式                      │.ppa    │   -   │.ppam   │
└───────────────────────┴────┴────┴────┘
  *1:Office97からOffice2003までの形式(拡張子ではマクロ有無が判別できない)
分類:Windows
前へ 1 … 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 … 156 次へ