MW211 EXIT

devlog
ExcelVBA/セルの内容の採取
2013年11月22日
フォルダに当該マクロをもつExcelファイルを置き、
まわりのExcelファイルの特定のシートの特定のセルの内容を取得する。
┌──────────────────────────────────────┐
│Sub 特定シートの特定セルを取得()                                            │
│    Dim y As Long                                                           │
│    Dim strBook As String                                                   │
│    Range(Columns(1), Columns(2)).Clear                                     │
│    y = 0                                                                   │
│    strBook = Dir(ThisWorkbook.Path & "\*.xls")                             │
│    Do While strBook <> ""                                                  │
│        If strBook <> ThisWorkbook.Name Then                                │
│            y = y + 1                                                       │
│            Cells(y, 1) = strBook                                           │
│            Cells(y, 2) = ExecuteExcel4Macro("'" _                          │
│                        & ThisWorkbook.Path & "\" _                         │
│                        & "[" & strBook & "]シート'!R1C1")                  │
│        End If                                                              │
│        strBook = Dir()                                                     │
│    Loop                                                                    │
│End Sub                                                                     │
└──────────────────────────────────────┘
シート名が決まっているのなら「ExecuteExcel4Macro()」で
手軽にできてしまう。

シート名が不定の場合は、シート一覧を取得してどうしてこうしてが
必要となってくるため「CreateObject()」を使うことになりそう。
「ExecuteExcel4Macro()」だけで完結できると速いのだけどね。
分類:ExcelVBA
ExcelVBA/ハイパーリンクの追加削除
2013年11月19日
選択した範囲の文字列をハイパーリンクとして設定してしまうマクロ。
┌──────────────────────────────────────┐
│Sub ハイパーリンク作成()                                                    │
│    Dim r As Range                                                          │
│    For Each r In Selection                                                 │
│        ActiveSheet.Hyperlinks.Add Anchor:=r, Address:=r.Value              │
│    Next                                                                    │
│End Sub                                                                     │
└──────────────────────────────────────┘
URL一覧とかで、実行すればリンク集となる。

選択した範囲のハイパーリンクを削除するマクロ。
┌──────────────────────────────────────┐
│Sub ハイパーリンク削除()                                                    │
│    Dim r As Range                                                          │
│    For Each r In Selection                                                 │
│        r.Hyperlinks.Delete                                                 │
│    Next                                                                    │
│End Sub                                                                     │
└──────────────────────────────────────┘
元々、ハイパーリンクを削除した場合、手動で削除しても
罫線が消えてしまうというバグがあるが、このマクロでも手動を代行するだけなので
罫線が消えてしまうので注意。
分類:ExcelVBA
ExcelVBA/列幅自動調整
2013年11月18日
以下の通り。
┌──────────────────────────────────────┐
│Cells.EntireColumn.AutoFit                                                  │
└──────────────────────────────────────┘

以下のようにすればブック内全部のシートについて行うことができる。
┌──────────────────────────────────────┐
│Dim wSheet As Worksheet                                                     │
│'列幅を揃える                                                               │
│For Each wSheet In Worksheets                                               │
│    wSheet.Cells.EntireColumn.AutoFit                                       │
│Next                                                                        │
└──────────────────────────────────────┘
分類:ExcelVBA
PHP/(追記)formの飛び先パスについての注意
2013年11月17日
formタグのactionパラメータに、飛び先のURLを指定する場合、
それがファイルではなく、ディレクトリであった場合には
しっかり末尾に「/」をつけてあげなければならない。
┌─┬────────────────────────────────────┐
│×│<form method="post" action="/abc">                                      │
├─┼────────────────────────────────────┤
│○│<form method="post" action="/abc/">                                     │
└─┴────────────────────────────────────┘

さもないと、「301転送」が発生してしまう。
┌─┬────────────────┬───────────────────┐
│×│… "POST /abc HTTP/1.1" 301 …  │301 Moved Permanently(転送)           │
├─┼────────────────┼───────────────────┤
│○│… "POST /abc/ HTTP/1.1" 200 … │200 OK(正常)                          │
└─┴────────────────┴───────────────────┘
「301転送」が起きるとどうなるのか?POSTの中身が消えてしまう(引き継がれない)

(といっても、そうならないパスがあったりするから厄介だ)


つまり、formタグの「/」がないだけで、いくらsubmitしても
受信側で$_POSTでデータを拾えないという怪奇現象が発生してしまうのだ。
(といっても、そうならないパスがあったりするから、ますます怪奇現象だ)

【追記】
実はmod_rewriteを使っている場合の話だった。
abcを画面コントローラ名として扱っている場合、
htdocs配下に「abc」というフォルダがあると、
一旦「abc/」に「301転送」がされてしまう。

例えば「manual」というフォルダ配下にマニュアルのpdfか何かを格納しつつ
「Manual」というマニュアル画面の画面コントローラ名を使用すると
「/Manual」は、mod_rewriteが動作する前に、「manual」というフォルダに反応して
「/manual/」に「301転送」され、POSTが空っぽになってしまうわけだ。

教訓
・画面コントローラ名とフォルダ名は同じにしてはいけない
・フォルダ名を末尾の「/」なしで指定すると「301転送」される
分類:PHP
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
MySQL/ひとつだけ
2013年11月09日
所有者が一つだけしたデータを持てない状況の場合。

これから所有者を更新しようとする場合、既に所有者が他に持っていたら
NULLを更新するという条件付きのUPDATE文を考えた。

案1:COUNTして条件分岐する
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 所有者 = (CASE (SELECT COUNT(*)                                     │
│                            FROM (SELECT * FROM 表) AS 一時表               │
│                            WHERE 所有者 = 値)                              │
│                    WHEN 0 THEN 値                                          │
│                    ELSE        NULL                                        │
│                  END)                                                      │
│    WHERE キー = キー値;                                                    │
└──────────────────────────────────────┘

案2:NOT EXISTSを使う
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 所有者 = (SELECT 値                                                 │
│                      FROM DUAL                                             │
│                      WHERE NOT EXISTS (                                    │
│                                SELECT *                                    │
│                                    FROM (SELECT * FROM 表) AS 一時表       │
│                                    WHERE 所有者 = 値))                     │
│    WHERE キー = キー値;                                                    │
└──────────────────────────────────────┘
分類:MySQL
MySQL/更新対象表はサブクエリに使えない
2013年11月08日
INSERT文やUPDATE文で更新する対象の表を、サブクエリで使うとエラーとなる。
┌──────────────────────────────────────┐
│#1093 - You can't specify target table 表 for update in FROM clause         │
└──────────────────────────────────────┘

例えば、「キー」と「所有者」の列からなる表について、
「所有者」が他に所有していない場合のみ、更新できるように条件文を
以下のように付加したとしたら、エラーとなってしまうわけだ。
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 所有者 = 2                                                          │
│    WHERE キー = 1                                                          │
│      AND NOT EXISTS (SELECT *                                              │
│                          FROM 表                                           │
│                          WHERE 所有者 = 2);                                │
└──────────────────────────────────────┘

これの回避方法は一時表を使うこと。以下のような感じ。
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 所有者 = 2                                                          │
│    WHERE キー = 1                                                          │
│      AND NOT EXISTS (SELECT *                                              │
│                          FROM (SELECT * FROM 表) AS 一時表                 │
│                          WHERE 所有者 = 2);                                │
└──────────────────────────────────────┘

循環参照となるので、コピーを一つ用意するような感じだ。
分類:MySQL
前へ 1 … 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 … 156 次へ