MW211 EXIT

devlog
ExcelVBA/ヘッダフッタ設定いろいろ
2013年11月15日
印刷直前にマクロを実行してヘッダフッタを自動設定する例。
┌──────────────────────────────────────┐
│Option Explicit                                                             │
├──────────────────────────────────────┤
│Private Sub Workbook_BeforePrint(Cancel As Boolean)                         │
│    Dim o As Object                                                         │
│    For Each o In ActiveWorkbook.Sheets                                     │
│        With o.PageSetup                                                    │
│            .LeftHeader = "&""MS ゴシック""&09" & "印刷日付:&I&B&D"       │
│            .CenterHeader = "&""MS ゴシック""&09" & "&Eタイトル &S嘘"     │
│            .RightHeader = "&""MS ゴシック""&09" & "印刷時間:&I&B&T"      │
│            .LeftFooter = "&""MS ゴシック""&09" & "ファイル名:&U&B&F"     │
│            .CenterFooter = "&""MS ゴシック""&09" & "ページ:&B&P/&N"      │
│            .RightFooter = "&""MS ゴシック""&09" & "シート名:&B&A"        │
│        End With                                                            │
│    Next                                                                    │
│End Sub                                                                     │
└──────────────────────────────────────┘
一通り揃っていると思われる。

まずは、以下のプロパティに値を入れることにより所定の位置に出力となる。
┌────────────┬─────────────────────────┐
│.PageSetup.LeftHeader   │左上ヘッダ                                        │
│.PageSetup.CenterHeader │中上ヘッダ                                        │
│.PageSetup.RightHeader  │右上ヘッダ                                        │
│.PageSetup.LeftFooter   │左下フッタ                                        │
│.PageSetup.CenterFooter │中下フッタ                                        │
│.PageSetup.RightFooter  │右下フッタ                                        │
└────────────┴─────────────────────────┘

次に「"&""MS ゴシック""&09"」は、
「MS ゴシック」のフォントサイズ「9」の指定となる。

「&」定数は以下のとおり。
┌─┬────────────────┐┌─┬────────────────┐
│&A│シート名                        ││&B│太字(で修飾)                    │
│&D│日付                            ││&E│二重下線(で修飾)                │
│&F│ファイル名                      ││&I│斜文字(で修飾)                  │
│&N│総ページ数                      ││&S│取消線(で修飾)                  │
│&P│ページ                          ││&U│下線(で修飾)                    │
│&T│時間                            │└─┴────────────────┘
└─┴────────────────┘
分類:ExcelVBA
ExcelVBA/条件付き書式(2)
2013年11月14日
特定の文字が入力された瞬間に色を塗って強調してしまう条件付き書式を
選択したセル全てに追加するマクロ。

「×」と「△」の場合のみ、赤背景白抜文字になる。
┌──────────────────────────────────────┐
│Sub 入力色塗()                                                              │
│    Dim cellAddr As String                                                  │
│    Dim r As Range                                                          │
│    For Each r In Selection                                                 │
│        With r                                                              │
│            cellAddr = .Address(columnabsolute:=False, rowabsolute:=False)  │
│            .FormatConditions.Add Type:=xlExpression, _                     │
│                Formula1:="=OR(" & cellAddr & "=""×""," _                  │
│                            & cellAddr & "=""△"")"                         │
│            .FormatConditions(.FormatConditions.Count).SetFirstPriority     │
│            With .FormatConditions(1)                                       │
│                .Interior.Color = RGB(255, 0, 0)                            │
│                .Font.Color = RGB(255, 255, 255)                            │
│            End With                                                        │
│        End With                                                            │
│    Next                                                                    │
│End Sub                                                                     │
└──────────────────────────────────────┘

Excel関数の条件式で「×」とかを出力させるのと組み合わせるといいかも。
分類:ExcelVBA
ExcelVBA/条件付き書式(1)
2013年11月12日
マクロで条件付き書式を追加してしまおうとい企画。

まずは、選択範囲の重複を塗ってしまうマクロ。
┌──────────────────────────────────────┐
│Sub 重複検出()                                                              │
│    With Selection                                                          │
│        .FormatConditions.AddUniqueValues                           '重複版 │
│        .FormatConditions(.FormatConditions.Count).SetFirstPriority '最優先 │
│        With .FormatConditions(1)                                           │
│            .DupeUnique = xlDuplicate                                       │
│            .Interior.Color = RGB(255, 0, 0)                                │
│            .Font.Color = RGB(255, 255, 255)                                │
│        End With                                                            │
│    End With                                                                │
│End Sub                                                                     │
└──────────────────────────────────────┘
先頭に条件を追加していくので、
同じセルに対して何回も行うと条件がいっぱい追加されるから注意。

なお、すべて一回消してしまう場合には以下のような感じとなる。
┌──────────────────────────────────────┐
│    With Selection                                                          │
│        .FormatConditions.Delete                                            │
│    End With                                                                │
└──────────────────────────────────────┘
当然、既存のものも消されてしまうので注意。
分類:ExcelVBA
ExcelVBA/入力イベント
2013年11月11日
「ThisWorkbook」にて以下のソースを記述。
┌──────────────────────────────────────┐
│Option Explicit                                                             │
├──────────────────────────────────────┤
│Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) │
│    MsgBox "シート名=" & Sh.Name & "(" & Sh.CodeName & ")" & vbLf _         │
│        & "横=" & Target.Column & vbLf _                                    │
│        & "縦=" & Target.Row                                                │
│End Sub                                                                     │
└──────────────────────────────────────┘
入力したセルの情報が取得できる。

シート名と座標で条件分岐すれば、
特定のセルでの入力に対して動作することができる。
分類:ExcelVBA
ExcelVBA/複数ファイル一括処理
2013年09月05日
フォルダ配下に対象ファイルを置いて、まとめて調査する場合のサンプル。
「★」という文字がみつかったら処理を止める。
一ファイル一シートの場合を対象としている。よってCSVファイルが最適。
┌──────────────────────────────────────┐
│Sub ★検索()                                                                │
│    Dim strPath As String, strFile As String                                │
│    Dim cellFind As Range                                                   │
│    Application.ScreenUpdating = False  '処理中非表示                       │
│    ' ───────────────────────────────────│
│    ' パス入力                                                              │
│    strPath = Application.InputBox( _                                       │
│                Prompt:="パス名を入力してください", _                       │
│                Title:="パス名入力")                                        │
│    If strPath = "False" Or strPath = "" Then                               │
│        MsgBox "検索中止"                                                   │
│        Exit Sub                                                            │
│    End If                                                                  │
│    If Right$(strPath, 1) <> "\" Then                                       │
│        strPath = strPath & "\"                                             │
│    End If                                                                  │
│    ' ───────────────────────────────────│
│    ' パス配下ファイルを全て処理                                            │
│    strFile = Dir(strPath)                                                  │
│    Do While strFile <> ""                                                  │
│        'ファイルのOpen                                                     │
│        Workbooks.Open strPath & strFile                                    │
│        ' ─────────────────────────────────│
│        'ファイル毎の処理                                                   │
│        Set cellFind = Cells.Find(What:="★")                               │
│        If Not cellFind Is Nothing Then                                     │
│            cellFind.Activate                                               │
│            Application.ScreenUpdating = True                               │
│            MsgBox "該当あり"                                               │
│            Exit Sub                                                        │
│        End If                                                              │
│        ' ─────────────────────────────────│
│        'ファイルのClose                                                    │
│        Workbooks.Close                                                     │
│        ' 次のファイルへ                                                    │
│        strFile = Dir                                                       │
│    Loop                                                                    │
│    ' ───────────────────────────────────│
│    Application.ScreenUpdating = True                                       │
│    MsgBox "該当なし"                                                       │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/ダラーマーク付き関数
2013年09月04日
文字列操作関数において、末尾に「$」マークが付加されているものを
見かけることはないだろうか?
これは、文字列操作関数を文字列(String型)に特化して使うことを明示しているものだ。
何もつけないと万能型(Variant型)を想定して動作するが、
文字列型に特化した方が対策を限定できるので若干速くなるようだ。
以下がその関数になる。
┌────────────────┬─────────────────────┐
│Chr$()、ChrB$()、ChrW$()        │文字コードからの変換                      │
├────────────────┼─────────────────────┤
│Format$()                       │書式変換                                  │
├────────────────┼─────────────────────┤
│Oct$()、Hex$()                  │8進数、16進数                             │
├────────────────┼─────────────────────┤
│LCase$()、UCase$()              │大文字小文字変換                          │
├────────────────┼─────────────────────┤
│Left$()、Mid$()、Right$()       │文字列の切り出し                          │
│LeftB$()、MidB$()、RightB$()    │                                          │
├────────────────┼─────────────────────┤
│Trim$()、LTrim$()、RTrim$()     │トリム                                    │
├────────────────┼─────────────────────┤
│Environ$()、Error$()、CurDir$() │各種情報                                  │
├────────────────┼─────────────────────┤
│Date$()、Time$()                │日付時刻                                  │
├────────────────┼─────────────────────┤
│Space$()、String$()、Str$()     │その他                                    │
└────────────────┴─────────────────────┘
分類:ExcelVBA
ExcelVBA/抜ける
2013年09月03日
Exit何とかの命令は以下のようなものがある。
┌──────────────────────────────────────┐
│Sub 関数()                                                                  │
│   Exit Sub                                                                 │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Function 関数()                                                             │
│    Exit Function                                                           │
│End Function                                                                │
├──────────────────────────────────────┤
│For i = 1 To 3                                                              │
│    Exit For                                                                │
│Next x                                                                      │
├──────────────────────────────────────┤
│Do                                                                          │
│    Exit Do                                                                 │
│Loop                                                                        │
├──────────────────────────────────────┤
│Exit Property                                                               │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/比較
2013年09月02日
数値で比較すると数値に型変換して判定される。
つまり、「If セルの値 = 0」の場合、空欄も真に判定されてしまう。
よって、「0」のみを比較したい場合には、文字列で比較すればよい。
「If セルの値 = "0"」ってことだ。

実際に試してみると、以下のような傾向がある。
┌─────┬───┬───┬───┬───┬───┬───┐
│  比較対象│FALSE │数値0 │文字0 │文字0.0  空欄 │=""   │
│比較方法  │      │書式0.0 '0    │'0.0  │      │      │
├─────┼───┼───┼───┼───┼───┼───┤
│= False   │  ◎  │  ○  │  ○  │  ○  │  ○  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= 0       │  ○  │  ◎  │  ○  │  ○  │  ○  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= "0"     │  ×  │  ○  │  ◎  │  ×  │  ×  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= Empty   │  ○  │  ○  │  ×  │  ×  │  ◎  │  ○  │
├─────┼───┼───┼───┼───┼───┼───┤
│IsEmpty() │  ×  │  ×  │  ×  │  ×  │  ◎  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= ""      │  ×  │  ×  │  ×  │  ×  │  ◎  │  ○  │
└─────┴───┴───┴───┴───┴───┴───┘
比較対象を論理型、文字型、数値型に換算して比較しているので、
本来想定しているもの以外にも該当するものがでてくるといった感じだ。
少々毛色が違うのが「= Empty」。
これは比較対象の型に自身を換算している感じだ。
よって、数値0の場合は自身を数値0に変換するため一致する一方で
文字列0の場合は、自身は元々文字列""なので不一致となる。

それじゃ文字列の「"0"」と数値の「0」を判別したい場合には?
上記からもわかるように「If セルの値 = Empty」が一つの候補だ。

それ以外に「If WorksheetFunction.IsNumber(セルの値)」で
厳密に「数値0」(真)と「文字列0」(偽)を判別する方法などがある。
分類:ExcelVBA
ExcelVBA/代入の基本
2013年08月19日
┌──────────────────────────────────────┐
│Cells(y, x).Value   = "abc"     →値                                        │
│Cells(y, x).Formula = "=a1+b2"  →数式                                      │
│Cells(y, x).Text    = "001"     →表示された状態(書式付)                    │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/乱数設定
2013年08月18日
選択した範囲に、適当な値を入力するマクロ。
┌──────────────────────────────────────┐
│Sub 乱数設定()                                                              │
│    Randomize                                                               │
│    Dim i As Range                                                          │
│    For Each i In Selection                                                 │
│        i.Value = Int(Rnd * 10)                                             │
│    Next i                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
前へ 1 … 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 次へ