MW211 EXIT

devlog
ExcelVBA/図形のシート間全コピー
2018年07月21日
┌──────────────────────────────────────┐
│Dim i As Integer                                                            │
│Dim 図形名 As String, 上 As Double, 左 As Double, 縦 As Double, 横 As Double│
│With 入力シート                                                             │
│    For i = 1 To .Shapes.Count                                              │
│        With .Shapes(i)                                                     │
│            図形名 = .Name                                                  │
│            上 = .Top                                                       │
│            左 = .Left                                                      │
│            縦 = .Height                                                    │
│            横 = .Width                                                     │
│            .Copy                                                           │
│        End With                                                            │
│        With 出力シート                                                     │
│            .Select                                                         │
│            .Paste                                                          │
│            If VarType(Selection) = vbObject Then                           │
│                Selection.Name = 図形名  ' 日本語既定名は英語になるので注意 │
│            End If                                                          │
│            With .Shapes(図形名)                                            │
│                .Top = 上                                                   │
│                .Left = 左                                                  │
│                .Height = 縦                                                │
│                .Width = 横                                                 │
│            End With                                                        │
│            .Cells(1, 1).Select                                             │
│        End With                                                            │
│    Next i                                                                  │
│End With                                                                    │
└──────────────────────────────────────┘
コピーして名称を合わせて位置も合わせた。

AcitiveXコントロールの場合は、ペーストを選択(Selection)されない代わり
図形名は同じになるので、それ以外の場合のみ図形名を合わせる処理を行い
その後、図形名が同じという前提で、位置を合わせた。

なお、日本語既定名は実体は英語名なので、英語名としてコピーされてしまう。
分類:ExcelVBA
Excel/図形の名前の既定値のなぞ
2018年07月20日
そのオートシェイプを選択した状態で、画面左上の窓(名前ボックス)には
確かに「テキスト ボックス 1」と表示されているのだが、
ExcelVBAの名前取得では「Text Box 1」となってしまう件。

典型的な例が以下。
┌──────────────────────────────────────┐
│MsgBox シート.Shapes("テキスト ボックス 1").Name           '→「Text Box 1」│
└──────────────────────────────────────┘
確かに「テキスト ボックス 1」でオートシェイプを指定できているのにも関わらず
名前属性(.Name)を取得してみたら「Text Box 1」なのだ。

これは既定の場合にのみ起きる怪現象で、名前を変更すれば両者の乖離は解消する。

どうやら、既定値を気を利かして和訳表示したものの、
ExcelVBAと辻褄が合わなくなったことによるようだ。

この場合、名前属性(.Name)で「テキスト ボックス 1」の方を
取得する方法はないようなので、
気になるなら名前属性(.Name)を任意のものに変更するしかないようだ。

任意のものといっても思いつかないという場合には、自身を代入しなおせばよい。
┌──────────────────────────────────────┐
│With シート.Shapes("テキスト ボックス 1")                                   │
│    .Name = .Name                                                           │
│End With                                                                    │
└──────────────────────────────────────┘
すると、「Text Box 1」に名前ボックスの表示も統一される。

以後「テキスト ボックス 1」は使えないが………と思ったら、
以下は引き続き使えてしまった。
┌──────────────────────────────────────┐
│MsgBox シート.Shapes("テキスト ボックス 1").Name           '→「Text Box 1」│
└──────────────────────────────────────┘

ちなみに名前属性(.Name)を関係ないものに変更して実験してみた。
┌──────────────────────────────────────┐
│MsgBox シート.Shapes("テキスト ボックス 1").Name             '→変更した名前│
├──────────────────────────────────────┤
│MsgBox シート.Shapes("Text Box 1").Name                      '→エラー      │
└──────────────────────────────────────┘
つまり、英語側の既定値はまさに既定値で最初だけ有効(変名したそちらへ)なのだが
日本語側の既定値は半永久的に使える存在なのかもしれない。

ややこし過ぎる。
分類:ExcelVBA
ExcelVBA/図形の全削除
2018年07月19日
┌──────────────────────────────────────┐
│Dim i As Integer                                                            │
│With シート                                                                 │
│    For i = .Shapes.Count To 1 Step -1                                      │
│        .Shapes(i).Delete                                                   │
│    Next i                                                                  │
│End With                                                                    │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/オートシェイプ(テキストボックス)のコピー
2018年07月18日
┌──────────────────────────────────────┐
│入力シート.Shapes("テキスト ボックス").Copy                                 │
│With 出力シート                                                             │
│    .Cells(3, 3).Select                                                     │
│    .Paste                                                                  │
│End With                                                                    │
└──────────────────────────────────────┘
テキストボックスに数式(参照先)が設定されていたら
そのまま相対的にコピー先のセル(参照先)を指すことになる。
分類:ExcelVBA
PowerBI/累計
2018年07月17日
      ┌──┬──┬──┐
      │ 月 │ 値 │累計│
      ├──┼──┼──┤
 1件目│   4│   1│   1│
      ├──┼──┼──┤
 2件目│   5│  10│  11│
      ├──┼──┼──┤
 3件目│   6│ 100│ 111│
      └──┴──┴──┘
こういったデータの場合、その月までの累計をとるとして、その数式は
PowerBI(DAX関数)ではどのように設定するか?(ExcelならSUMIF()なのだが)

方法としては二通りある。
┌──────────────────────────────────────┐
│累計 = SUMX(FILTER('クエリ名', [月] <= EARLIER([月])), [値])                │
├──────────────────────────────────────┤
│累計 = CALCULATE(SUM([値]), FILTER('クエリ名', [月] <= EARLIER([月])))      │
└──────────────────────────────────────┘

EARLIER()はその行のみを指す関数である。
ちなみにEARLIER()なしで「FILTER('クエリ名', [月] <= [月])」とすると
自身(月)同士をおのおので比較するのですべて真になってしまう。
分類:PowerBI
Excel関数/累計(SUMIF)
2018年07月16日
         A列   B列   C列
      ┌──┬──┬──┐
 1行目│ 月 │ 値 │累計│
      ├──┼──┼──┤
 2行目│   4│   1│   1│=SUMIF(A:A,"<="&A2,B:B)
      ├──┼──┼──┤
 3行目│   5│  10│  11│=SUMIF(A:A,"<="&A3,B:B)
      ├──┼──┼──┤
 4行目│   6│ 100│ 111│=SUMIF(A:A,"<="&A4,B:B)
      └──┴──┴──┘
上記のようにC列の累計をとりたい場合、
C列の数式は上記のように設定すればよい。
分類:Excel
ExcelVBA/ブックの上書保存(2)
2018年07月15日
では、自前で上書保存か否かの判断を行うには?
┌──────────────────────────────────────┐
│If Dir(保存先) = "" Then                                                    │
│    ' 既存なし(上書保存ではなく新規保存)                                    │
│Else                                                                        │
│    ' 既存あり(上書保存)                                                    │
│End If                                                                      │
└──────────────────────────────────────┘
Dir()で保存先があれば戻り値が帰ってくるので、それがあるか否かで判断できる

例えば、ファイル選択ダイアログと組み合わせた場合には
以下のような処理となる。
(上書を拒否したら再度選択画面に戻る仕組みとなっている)
┌──────────────────────────────────────┐
│Function 保存先選択() As String                                             │
│    Dim メッセージ As String                                                │
│    Dim 保存先 As Variant                                                   │
│    Dim ファイル名 As String                                                │
│    ファイル名 = "初期表示ファイル名.xlsx"                                  │
│    Do                                                                      │
│        保存先 = Application.GetSaveAsFilename( _                           │
│            InitialFileName:=ファイル名, _                                  │
│            FileFilter:="Excelファイル(*.xlsx),*.xlsx" _                    │
│        )                                                                   │
│        ' キャンセル                                                        │
│        If 保存先 = False Then                                              │
│            MsgBox "キャンセルされました。", vbInformation, "処理の中止"    │
│            保存先選択 = ""                                                 │
│            Exit Function                                                   │
│        End If                                                              │
│        ' 新規追加                                                          │
│        If Dir(保存先) = "" Then                                            │
│            Exit Do                                                         │
│        End If                                                              │
│        ' 上書の確認                                                        │
│        ファイル名 = Dir(保存先)                                            │
│        メッセージ = ファイル名 & " は既に存在します。" & vbCrLf _          │
│                   & "上書きしますか?"                                     │
│        If MsgBox(メッセージ, vbYesNo + vbExclamation, "処理の確認") _      │
│                                                                = vbYes Then│
│            Exit Do                                                         │
│        End If                                                              │
│    Loop                                                                    │
│    保存先選択 = 保存先                                                     │
│End Function                                                                │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/ブックの上書保存(1)
2018年07月14日
基本的に、以下のようにブックを保存した場合、保存先のパスに同一ファイル名があると
保存するか否かのダイアログが開いてしまう。
(そこで「いいえ」とかにするとエラーになってしまう)
┌──────────────────────────────────────┐
│ブック.SaveAs Filename:=保存先, _                                           │
│              FileFormat:=XlFileFormat.xlOpenXMLWorkbook                    │
└──────────────────────────────────────┘

これを避けるためには、その前後で、
警告メッセージ(DisplayAlerts)を一時的に切ればよい。
┌──────────────────────────────────────┐
│Application.DisplayAlerts = False                                           │
│ブック.SaveAs Filename:=保存先, _                                           │
│              FileFormat:=XlFileFormat.xlOpenXMLWorkbook                    │
│Application.DisplayAlerts = True                                            │
└──────────────────────────────────────┘
シート削除(こちらも確認ダイアログが開く)時と同じ要領だ。
分類:ExcelVBA
HTML/ulタグとliタグ
2018年07月11日
単純に見出しと項目の場合は以下の通り。
┌──────────────────────────────────────┐
│<ul>天下人                                                                  │
│  <li>織田信長</li>                                                         │
│  <li>豊臣秀吉</li>                                                         │
│  <li>徳川家康</li>                                                         │
│</ul>                                                                       │
└──────────────────────────────────────┘

入れ子にする場合は以下のような感じ。
┌──────────────────────────────────────┐
│<ul>戦国武将                                                                │
│  <li>織田信長</li>                                                         │
│  <li>豊臣秀吉</li>                                                         │
│  <li>徳川家康                                                              │
│    <ul>                                                                    │
│      <li>酒井忠次</li>                                                     │
│      <li>本多忠勝</li>                                                     │
│      <li>榊原康政</li>                                                     │
│      <li>井伊直政</li>                                                     │
│    </ul>                                                                   │
│  </li>                                                                     │
│</ul>                                                                       │
└──────────────────────────────────────┘


CSS的には以下のような感じか。
┌──────────────────────────────────────┐
│ul {                                                                        │
│    padding-left        :0;                                                 │
│}                                                                           │
│ul > li {                                                                   │
│    margin-left         :1em;                                               │
│}                                                                           │
└──────────────────────────────────────┘
  ・特にしていないとulタグの左横に適当に余白(padding)ができる
  ・liタグには「・」等の印が先頭につくが、範囲外の左側につくので
    左にmarginを開けた方がよい
    なお、前述のulタグの適当な余白と組み合わせれば見えるが
    その余白をなくしてしまうと、左詰めで「・」が見えなくなる
                                  ┌────────┐
  既定の表示イメージ              │    ulタグ      │
                                  │  ・liタグの内容│
                                  │  ・liタグの内容│
                                  └────────┘
                                  ┌────────┐
  paddingを無くした場合のイメージ │ulタグ          │
                                  │liタグの内容    │
                                  │liタグの内容    │
                                  └────────┘
                                  ┌────────┐
  上記CSSのイメージ               │ulタグ          │
                                  │・liタグの内容  │
                                  │・liタグの内容  │
                                  └────────┘
  なお、主な印は以下の通り
  ┌────────────┬──────┬──────┐
  │list-style-type:none;   │なし        │            │
  ├────────────┼──────┼──────┤
  │list-style-type:disc;   │小さい黒丸  │一階層目    │
  ├────────────┼──────┼──────┤
  │list-style-type:circle; │小さい白丸  │二階層目    │
  ├────────────┼──────┼──────┤
  │list-style-type:square; │小さい黒四角│三階層目以降│
  └────────────┴──────┴──────┘
分類:HTML
VC#/listViewのセルに入力するには
2018年07月10日
ダブルクリックすると入力モードになるには以下のパラメータを変えればよい。
┌──────────┐
│動作                │
│┌─────┬───┤
││LabelEdit │True  │(←False)
└┴─────┴───┘
でも、F2は効かないようだ。

ただ、参照専用にしたいのであればこれはいじらない方がよいかも。
分類:VC#
前へ 1 2 3 次へ