MW211 EXIT

devlog
ExcelVBA/翻訳
2015年08月11日
Google翻訳を利用した英和・和英の一括翻訳マクロ。
セル選択(複数可)して実行すると、右隣に翻訳結果が出力される。
┌──────────────────────────────────────┐
│Public Sub Google翻訳英和()                                                 │
│    Dim i As Long                                                           │
│    Dim theCell As Range                                                    │
│    Dim objIE As Object                                                     │
│    For Each theCell In Selection                                           │
│        If theCell.Value <> "" Then                                         │
│            Application.Wait Now + TimeValue("00:00:01")  ' スリープ約1秒   │
│            Set objIE = CreateObject("InternetExplorer.Application")        │
│            With objIE                                                      │
│                .Navigate "https://translate.google.co.jp/#en/ja/" _        │
│                        & theCell.Value                                     │
│                Do While .Busy Or .ReadyState <> 4                          │
│                    DoEvents                                                │
│                Loop                                                        │
│                With .Document.getElementById("result_box")                 │
│                    For i = 1 To 10000  ' リトライ                          │
│                        If .innerText <> "" Then                            │
│                            Exit For                                        │
│                        End If                                              │
│                        DoEvents                                            │
│                    Next i                                                  │
│                    theCell.Offset(, 1).Value = .innerText                  │
│                End With                                                    │
│                .Quit                                                       │
│            End With                                                        │
│        End If                                                              │
│    Next theCell                                                            │
│    MsgBox "完了"                                                           │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Public Sub Google翻訳和英()                                                 │
│    Dim i As Long                                                           │
│    Dim theCell As Range                                                    │
│    Dim objIE As Object                                                     │
│    For Each theCell In Selection                                           │
│        If theCell.Value <> "" Then                                         │
│            Application.Wait Now + TimeValue("00:00:01")  ' スリープ約1秒   │
│            Set objIE = CreateObject("InternetExplorer.Application")        │
│            With objIE                                                      │
│                .Navigate "https://translate.google.co.jp/#ja/en/" _        │
│                        & theCell.Value                                     │
│                Do While .Busy Or .ReadyState <> 4                          │
│                    DoEvents                                                │
│                Loop                                                        │
│                With .Document.getElementById("result_box")                 │
│                    For i = 1 To 10000  ' リトライ                          │
│                        If .innerText <> "" Then                            │
│                            Exit For                                        │
│                        End If                                              │
│                        DoEvents                                            │
│                    Next i                                                  │
│                    theCell.Offset(, 1).Value = .innerText                  │
│                End With                                                    │
│                .Quit                                                       │
│            End With                                                        │
│        End If                                                              │
│    Next theCell                                                            │
│    MsgBox "完了"                                                           │
│End Sub                                                                     │
└──────────────────────────────────────┘
「.Busy Or .ReadyState <> 4」の条件でIEの読込完了を待つのだが、
ID指定で要素を読み込むためにはさらに若干タイムラグがある模様。

それが未だだと空欄取得となってしまうので、リトライを用意した。

なお、クローラみたいなものなので1秒間をあけて実行するようにした。
分類:ExcelVBA
ExcelVBA/UTF-8出力
2015年08月10日
ExcelVBAでは、通常「Shift-JIS」で出力されるが、これを「UTF-8」にしたい場合。

「ADODB.Stream」を使用する。
まず、参照設定にて
「Microsoft ActiveX Data Object6.1 Library」にチェックを入れること。


そしてサンプルソースとしては以下のような感じに処理を行えばよい。
┌──────────────────────────────────────┐
│Public Sub UTF8出力()                                                       │
│    Dim 出力先 As New ADODB.Stream                                          │
│    With 出力先                                                             │
│        .Type = adTypeText                                                  │
│        .Charset = "UTF-8"                                                  │
│        .LineSeparator = adCRLF                                             │
│        .Open                                                               │
│    End With                                                                │
│    出力先.WriteText Cells(1, 1).Value                                      │
│    出力先.SaveToFile ActiveWorkbook.Path & "\output.txt", _                │
│                      adSaveCreateOverWrite                                 │
│    出力先.Close                                                            │
│    MsgBox "完了"                                                           │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/ダブルクォーテーション
2015年08月09日
ダブルクォーテーションをダブルクォーテーションとして使用したい場合。

┌──────────────────────────────────────┐
│""                                                                          │
└──────────────────────────────────────┘
二つ並べる。

しかし、長文になると混乱しがちなので、
┌──────────────────────────────────────┐
│Chr(34)                                                                     │
└──────────────────────────────────────┘
と、文字コード指定としてしまった方がわかりやすいだろう。
分類:ExcelVBA
PHP/MSSQL連携
2015年08月08日
PHPからMSSQL(SQL Server)にアクセスできるようにするには
別途「Microsoft Drivers for PHP for SQL Server」dllを入手しアサインする

(1) Microsoft公式サイトから「SQLSRVxx.EXE」をダウンロードする
    https://www.microsoft.com/en-us/download/details.aspx?id=20098
    →以下のバージョンが取得可能(PHPやWindowsバージョンに合わせて選択)
      ・4.0(SQLSRV40.EXE)
      ・3.2(SQLSRV32.EXE)
      ・3.1(SQLSRV31.EXE)
      ・3.0(SQLSRV30.EXE)

(2) 上記EXEを実行すると、ファイルが取得(解凍)される
    途中で、解凍先を聞いてくるので任意のフォルダを選択

(3) 解凍された一式から「php_sqlsrv_xx.dll」と「php_pdo_sqlsrv_xx.dll」を
    条件に応じて一組だけ選び、
    extフォルダ(「C:\Program Files\PHP\ext」など)へ置く(コピーする)
    ┌────┬────────────┬──────────────┐
    │SQLSRV30│php_sqlsrv_53_ts.dll    │php_pdo_sqlsrv_53_ts.dll    │
    │        │php_sqlsrv_53_nts.dll   │php_pdo_sqlsrv_53_nts.dll   │
    │        ├────────────┼──────────────┤
    │        │php_sqlsrv_54_ts.dll    │php_pdo_sqlsrv_54_ts.dll    │
    │        │php_sqlsrv_54_nts.dll   │php_pdo_sqlsrv_54_nts.dll   │
    ├────┼────────────┼──────────────┤
    │SQLSRV31│php_sqlsrv_54_ts.dll    │php_pdo_sqlsrv_54_ts.dll    │
    │        │php_sqlsrv_54_nts.dll   │php_pdo_sqlsrv_54_nts.dll   │
    │        ├────────────┼──────────────┤
    │        │php_sqlsrv_55_ts.dll    │php_pdo_sqlsrv_55_ts.dll    │
    │        │php_sqlsrv_55_nts.dll   │php_pdo_sqlsrv_55_nts.dll   │
    ├────┼────────────┼──────────────┤
    │SQLSRV32│php_sqlsrv_54_ts.dll    │php_pdo_sqlsrv_54_ts.dll    │
    │        │php_sqlsrv_54_nts.dll   │php_pdo_sqlsrv_54_nts.dll   │
    │        ├────────────┼──────────────┤
    │        │php_sqlsrv_55_ts.dll    │php_pdo_sqlsrv_55_ts.dll    │
    │        │php_sqlsrv_55_nts.dll   │php_pdo_sqlsrv_55_nts.dll   │
    │        ├────────────┼──────────────┤
    │        │php_sqlsrv_56_ts.dll    │php_pdo_sqlsrv_56_ts.dll    │
    │        │php_sqlsrv_56_nts.dll   │php_pdo_sqlsrv_56_nts.dll   │
    ├────┼────────────┼──────────────┤
    │SQLSRV40│php_sqlsrv_7_ts_x64.dll │php_pdo_sqlsrv_7_ts_x64.dll │
    │        │php_sqlsrv_7_nts_x64.dll│php_pdo_sqlsrv_7_nts_x64.dll│
    │        ├────────────┼──────────────┤
    │        │php_sqlsrv_7_ts_x86.dll │php_pdo_sqlsrv_7_ts_x86.dll │
    │        │php_sqlsrv_7_nts_x86.dll│php_pdo_sqlsrv_7_nts_x86.dll│
    └────┴────────────┴──────────────┘

(4) 「php.ini」(「C:\Program Files\PHP\php.ini」など)に
    上記二つのDLLアサインを追記する
    ┌─────────────────┐
    │[PHP_SQLSRV_xx]                   │
    │extension=php_sqlsrv_xx.dll       │
    │[PHP_PDO_SQLSRV_xx]               │
    │extension=php_pdo_sqlsrv_xx.dll   │
    └─────────────────┘
    なお、角括弧の行(セクションマーカ)は単なる目印で影響を及ぼさないので
    記述しなくともよい(もしくは適当に周囲に合わせて記述する)

(5) 「phpinfo()」にて、以下が確認できればOK
    ・「PDO」の「PDO drivers」に「enabled」として「sqlsrv」が追加されていること
    ・「pdo_sqlsrv」(セクション)が追加されていること
分類:PHP、PDO
多言語対応
2015年08月06日
一般的な多言語対応は以下の通り
┌──────┬────────────────────┬──────────┐
│VC/C++      │リソースで言語切替(VisualSutio)         │Microsoft系         │
│VC#         │                                        │                    │
│VB          │                                        │                    │
├──────┼────────────────────┼──────────┤
│C           │gettext()                               │                    │
│C++         │                                        │                    │
│Objective-C │                                        │                    │
│Java        │                                        │                    │
│Perl        │                                        │                    │
│PHP         │                                        │PHPは標準実装       │
│Python      │                                        │                    │
│Ruby        │                                        │                    │
├──────┼────────────────────┼──────────┤
│共通        │連想配列で対応                          │ベタな対応          │
└──────┴────────────────────┴──────────┘
分類:設計
TortoiseSVN/クリーンアップ
2015年08月05日
【クリーンアップ】
  ■作業コピーの状態をクリーンアップ
    →狭義のクリーンアップコマンド(作業コピーを削除する)
  □ロックを強制解除する
    →書込ロックを全て解除する
  □タイムスタンプを修正
    →更新時刻を最終コミット時に全て更新
  □未使用のコピーを削除
    →作業コピーを整理する(サイズ削減)
  □シェルのオーバーレイを更新
    →エクスプローラのSVNアイコンを再更新する
  ■外部参照を含める
    →外部参照設定時にそれらも対象とする
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  □バージョン管理外のファイルやフォルダーを削除
    →処理タイトルの通り
  □無視するファイルやフォルダーを削除
    →処理タイトルの通り
  □すべての変更を再帰的に取り消す
    →処理タイトルの通り
分類:SVN
一行は80文字
2015年08月04日
Q.一行80文字(半角80文字・全角40文字)で区切ることが多いがなぜか?
A.パンチカード(ホレリスのIBMパンチカード)時代からの流れ
分類:設計
ExcelVBA/セル範囲の個別収集
2015年08月03日
セルを個別に指定追加して、グルーピングしていく方法。

【1】Range変数を使用する方法
┌──────────────────────────────────────┐
│Dim セルたち As Range                                                       │
│Set セルたち = Range("A1")                                                  │
│Set セルたち = Union(セルたち, Range("B2"))                                 │
│Set セルたち = Union(セルたち, Range("C3"), Range("D4"))                    │
└──────────────────────────────────────┘
「セルたち = Range("A1")」だと「セルたち.Value = Range("A1").Value」の
省略形と解釈されるので注意。

【2】名前定義セルを使用する方法
┌──────────────────────────────────────┐
│Range("A1").Name = "範囲"                                                   │
│Union(Range("範囲"), Range("B2")).Name = "範囲"                             │
│Union(Range("範囲"), Range("C3"), Range("D4")).Name = "範囲"                │
└──────────────────────────────────────┘
「Range("範囲") = Union(Range("範囲"), Range("B2"))」みたいに
右辺に新たな範囲を指定するのではない点に注意。
ちなみに上記だと、前述の「.Value」の省略形として解釈されてしまう。
分類:ExcelVBA
ExcelVBA/名前定義セルの効用
2015年08月02日
名前定義セルを使用すると、関数間のセル範囲の引き渡しが
グローバル変数的にできるとともに、記憶もされる。
┌──────────────────────────────────────┐
│Sub 関数A()                                                                 │
│    Union(Range("A1"), Range("B2")).Name = "範囲"                           │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Sub 関数B()                                                                 │
│    Range("範囲").Interior.Color = vbYellow                                 │
│End Sub                                                                     │
└──────────────────────────────────────┘
上記の場合、「関数A()」で範囲を変更すれば
「関数B()」には引数やグローバル変数なしで伝達することができる。
分類:ExcelVBA
ExcelVBA/名前定義セル
2015年08月01日
以下のような感じで、セルに名前をつける。(.Nameプロパティに値を設定する)
┌──────────────────────────────────────┐
│Range("A1").Name = "範囲"                                                   │
│Range("範囲").Interior.Color = vbYellow                                     │
└──────────────────────────────────────┘

以下のように、Union()(やRange())とも併用できる。
┌──────────────────────────────────────┐
│Union(Range("A1"), Range("B2")).Name = "範囲"                               │
└──────────────────────────────────────┘
分類:ExcelVBA
前へ 1 … 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 … 156 次へ