MW211 EXIT

devlog
ExcelVBA/データ範囲の縮小
2014年08月10日
以下のように「.SpecialCells(xlLastCell)」を使うと、
「Ctrl+End」と同じ挙動となる。
┌──────────────────────────────────────┐
│Cells(1, 1).SpecialCells(xlLastCell)                                        │
└──────────────────────────────────────┘
「Cells(1, 1).SpecialCells(xlLastCell).Row」という風にすると
空行を跨いだ最後の行を調査できるので便利だ。
つまり、「.SpecialCells(xlLastCell)」は
データのある範囲の末尾に行けるということだ。

但し、一度、末尾の方に値を入力すると、それを削除しても
データのある範囲は縮小されない。
ファイルを保存する時に再計算されるのだ。

よって、「.Cells.Clear」だけでは元あったデータの範囲が残ってしまうということだ。

これでは困る場合、ファイルを保存すれば解決する訳だが
そんなことのためにファイルにアクセスしたくはない。

その解決方法の裏技。
「.UsedRange.Row」をシートに対して使ってあげればいい。
ということで、以下のようなダミー処理を実行すればいいらしい。
┌──────────────────────────────────────┐
│ダミー変数 = UsedRange.Row                                                  │
└──────────────────────────────────────┘

ま、たいていは範囲の境目とかを検索する時に再計算したくなるものだから
以下のようにダミーの代入処理をかましてやればいいのかもしれない。
┌──────────────────────────────────────┐
│With ThisWorkbook.ActiveSheet                                               │
│    y = .UsedRange.Row  'ダミー処理                                         │
│    y = .Cells(1, 1).SpecialCells(xlLastCell).Row                           │
│End With                                                                    │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/別シートを選択
2014年08月09日
別シートのセルを選択しようとした場合、以下のように指定しまいがちだ。
┌──────────────────────────────────────┐
│Worksheets("別シート").Range("A1").Select                                   │
└──────────────────────────────────────┘
でも「実行時エラー'1004':RangeクラスのSelectメソッドが失敗しました。」となる。

以下のように二段階でシートを選んで、セルを選ばなければならない。
┌──────────────────────────────────────┐
│Worksheets("別シート").Select                                               │
│Worksheets("別シート").Range("A1").Select                                   │
└──────────────────────────────────────┘

シートは既に絞り込まれているから、セルについては以下のように省略できる。
┌──────────────────────────────────────┐
│Worksheets("別シート").Select                                               │
│Range("A1").Select                                                          │
└──────────────────────────────────────┘

これを一発でやるには「Application.Goto」を使えばいいらしい。
┌──────────────────────────────────────┐
│Application.Goto Worksheets("別シート").Range("A1")                         │
└──────────────────────────────────────┘
この場合は、(「Application.Goto」がその役割を担うので)
「.Select」は不要となる。
分類:ExcelVBA
Windows/BOM除去
2014年08月08日
BOM付きUTF-8ファイルをBOM無しにする方法。

・サクラエディタで開いて、BOM無しで保存する。

他にもいろいろありそう。
分類:Windows
設計/複数条件の順番
2014年08月06日
「if (条件1 and 条件2)」や「if (条件1 or 条件2)」のように
複数の条件を組み合わせて条件式の場合、
論理的には「条件1」と「条件2」の順番を入れ替えても問題ないことになるが
(「どっちも」もしくは「どっちか」ってことだから)
プログラムの場合は前から順番に処理をおこなっていくということに留意すべき。

つまり「条件1」が「条件2を判定しても問題ない」という条件の場合
「if (条件2を判定しても問題ない and 条件2)」となるが
これは順番を入れ替えたらエラーとなるわけだ。

つまりAND条件の場合、「条件1」が「偽」の時点で
「条件2」へは進まない(で「偽」と結論づける)。
一方OR条件の場合、「条件1」が「真」の時点で
「条件2」へは進まない(で「真」と結論づける)ということになる。

だから「if (isset($a) && ($a == 1))」のような条件式で
「$a」が定義されていなくても問題なく動くということになる。
順番無視だったら、「$a == 1」を先に処理して未定義エラーに
なってしまう可能性もあるってことになる。
分類:設計
Windowsバッチ/カレントフォルダ
2014年08月05日
実行したバッチのあるフォルダにコピーしてきたい場合。
#Linuxでいうところの「cp コピーしたいファイル .」をしたい場合。
┌──────────────────────────────────────┐
│copy コピーしたいファイル %~dp0                                             │
└──────────────────────────────────────┘

「.」が「%~dp0」ってことになる。

「%0」がバッチファイルのフルパス(ファイル名も含む)でかつ
ダブルクォーテーションで囲まれたもの。

「%~0」でダブルクォーテーションをはずしたもの。

「%~dp0」でドライブ名とパスのみ、つまりファイル名を除いたものとなる
ということらしい。

「%~d0」でドライブ名のみ、「%~p0」でパス名のみとなる。

但し、「%dp0」「%d0」「%p0」でダブルクォーテーションつきで
分割はできないようだ。
分類:Windows
座右の銘
2014年08月04日
・完璧とは、これ以上付け足すものがない状態ではなく、
  これ以上削ぎ落とすものがない状態である
・戦術的勝利で戦略的敗北を覆すことはできない
・選択と集中そして速度(スピード)
・愚者は成功体験に学び、賢者は歴史に学ぶ
分類:設計
ルール
2014年08月03日
【プログラムの集団開発をする上での基礎知識と最低限のコーディングルール】
  □構造化プログラミングを理解すること
    □基本的にgoto文を使わないこと
    □順次・反復・分岐を理解すること
    □continue文などの特殊脱出文の位置づけを認識すること
    □著名な標準規格をできるだけ多く理解すること(C言語の場合はMISRA-Cなど)
  □変数のスコープをできるだけ狭くすること
    □グローバル変数を濫用しないこと
    □C言語のグローバル変数および関数について、
      externおよびstatic修飾子を適切に付与すること(省略しないこと)
    □C言語のexternグローバル変数を宣言するヘッダファイルについて、
      適切にインクルードすること(濫りにインクルードしないこと)
    □C言語の変数について、const修飾子を適切に付与すること(省略しないこと)
    □オブジェクト指向言語のクラス内メンバ変数について、
      publicやprivateなどのアクセス修飾子を適切に付与すること
    □オブジェクト指向言語のpublicメンバ変数は極力使用せず
      getterメソッド等他の手段を使用すること
  □バージョン管理ソフトを使用できること
    □CVS
    □Subversion
    □Git
  □プロジェクト管理ソフトを使用できること
    □Redmine
    □Trac
  □その他
    □文字コード・改行コードは統一すること
    □不要な全角スペースは除去(半角スペースに置換)すること
    □不要な行末尾のスペース類は除去すること
    □if文の波括弧{}は省略しないこと(swiftの仕様より)
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
【冗長的なコーディングルール】
  →こだわり過ぎると開発の障害となる(場合によっては宗教論争)ので
    思い切って切り捨ててしまった方が逆にいいかもといったルール(楽市楽座的な話)
  □命名規則を統一すること
    ・略字のルールを統一して命名台帳を設ける
    ・ハンガリアン記法を禁止する
    →命名に躊躇して処理作成に集中できなくなる
  □字下げやスペースの空け方やタブの使い方を統一すること
    ・制御文や関数の波括弧{}の前で改行するか否かを統一する
    →記法に躊躇して処理作成に集中できなくなる
  □大文字・小文字・キャメル文字の使用ルールを統一すること
    ・特に小文字のみとローワーキャメル文字を混在しないようにする
    →外部関数などの影響もあり完全な統一は難しくなる
  □switch文におけるcase節の字下げを統一すること
    ・case節をswitch文と同列にするかもしくは一段下げるかを統一する
    →if文との比較から同列が妥当だが、一段下げた方が見やすい(PHP)
  □カンマ区切り記述で最後に余計なカンマを許容しているものでも
    カンマを記述しないこと(もしくは一律記述すること)で統一すること
    ・C言語のenum文やPHPの配列定義など
    →一律最後にカンマを付けて改行にすれば行の入れ替えが容易だが
      余計なカンマを許容しないものとの統一感がなくなる
  →命名や記法については後で一括して置換するかツールで強制的に行うなら別だが
    開発者個々人に都度強制するのは逆効果になる
分類:設計
Windowsバッチ/文字コード
2014年08月02日
UTF-8で記述したバッチファイルを実行した場合、
文字コードをUTF-8と宣言した場合(「chcp 65001」)は
正しく出力される
┌──────────────────────────────────────┐
│chcp 65001                                                                  │
│echo アップ> out.txt                                                        │
├──┬───────────────────────────────────┤
│結果│E3 82 A2  E3 83 83  E3 83 97   0D 0A  (アップ+CRLF)                  │
└──┴───────────────────────────────────┘

しかし宣言しなかった場合は、一部正しく出力されない。
┌──────────────────────────────────────┐
│REM chcp 65001                                                              │
│echo アップ> out.txt                                                        │
├──┬───────────────────────────────────┤
│結果│E3 82 A2  E3 83 81  45 81 45   0D 0A   (ア文字化け)                   │
└──┴───────────────────────────────────┘
正しく出力されるのもあるので厄介。
恐らく基本正しく認識されるのだろうが、一部前後関係で誤認識するようだ。

但し、psql(PostgreSQL)で、SQL文中に日本語文字をベタ書きすると
エラーとなってしまうようだ。
┌──────────────────────────────────────┐
│chcp 65001                                                                  │
│psql … -c "SELECT 'あ';"> out.txt                                          │
├──────────────────────────────────────┤
│ERROR:  invalid byte sequence for encoding "UTF8": 0x82                     │
└──────────────────────────────────────┘

既定のsjisに戻してあげれば(「chcp 932」)回避できる。
┌──────────────────────────────────────┐
│chcp 65001                                                                  │
│chcp 932                                                                    │
│psql … -c "SELECT あ;"> out.txt                                            │
└──────────────────────────────────────┘
なんでだろう?
分類:Windows
スキルマップ
2014年08月01日
【人材】
  □経営者(コンサルタント)  …ITストラテジスト・システム監査技術者
  □開発管理者              …プロジェクトマネージャ
  ■設計者(顧客窓口)        …応用情報技術者・システムアーキテクト
  □専門技術者
    □組み込み技術者        …エンベデッドシステムスペシャリスト
    ■データベース技術者    …データベーススペシャリスト
    □セキュリティ技術者    …情報セキュリティスペシャリスト
    □ネットワーク技術者    …ネットワークスペシャリスト
    ■Web開発技術者
    □iOSアプリ開発技術者
    □Android技術者
  □サーバ管理者            …ITサービスマネージャ
  ■プログラマ              …基本情報技術者
  □品質管理者(テスター)
  □デザイナー
  ■その他スタッフ          …ITパスポート
【プログラム言語】
  ■C               □C++
  ■VisualC/C++     □VisualC++.NET □VisualC#
  □Object-C        □Swift
  □Java
  □VisualBasic     □VisualBasic.NET               ■ExcelVBA
  □Perl            ■PHP           □Python        □Ruby
  ■HTML            ■HTML5         ■CSS           ■CSS3
  ■JavaScript      ■jQuery        □prototype.js
  □Delphi言語/ObjectPascal
  ■COBOL           □PL/I
  □FORTRAN
【OS】
  ■Windows         ■WindowsServer
  ■Linux           ■Unix(                        )
  □iOS
【WindowsのCLI】
  ■COMMAND.COM     ■cmd.exe
  ■WSH(VBScript)   □WSH(JScript)
  □WindowsPowerShell
【UNIXシェル】
  ■sh(BourneShell) □ash           □bash          □dash          □ksh
  □csh             □tcsh
【データベース】
  □Oracle                          □PL/SQL
  ■Microsoft SQL Server(MSSQL)     □Transact-SQL  ■Access
  ■MySQL
  ■PostgreSQL(pgSQL)               ■PL/pgSQL
  ■SQLite
  ■HiRDB           □Symfoware
【汎用機およびJCL】
  □MVS系(IBM)      □MSP(富士通)   ■VOS3(日立)
  □VSE系(IBM)
  □XSP(富士通)
  □GCOS(Bull)      □ACOS(NEC)
  □OS2200(ユニシス)                □MCP(ユニシス)
【オフコン】
  □富士通          ■NEC           □東芝          □三菱電機      □内田洋行
  □IBM             □ユニシス
分類:設計
ExcelVBA/文字が含まれている判定
2014年07月30日
オーソドックスな方法。文字位置を取得する「InStr()」を利用。
┌──────────────────────────────────────┐
│If InStr("文字列", "文") <> 0 Then                                          │
│    MsgBox "文が含まれている!"                                             │
│End If                                                                      │
└──────────────────────────────────────┘

正規表現による照合を利用する方法。
┌──────────────────────────────────────┐
│If "文字列" Like "*文*" Then                                                │
│    MsgBox "文が含まれている!"                                             │
│End If                                                                      │
└──────────────────────────────────────┘
メタ文字の意味は以下の通り。
┌───┬──────────────────────────────────┐
│?     │任意の1文字                                                         │
├───┼──────────────────────────────────┤
│*     │0文字以上の任意の文字                                               │
├───┼──────────────────────────────────┤
│#     │1文字の数値(0~9)                                                   │
├───┼──────────────────────────────────┤
│[A-Z] │文字群中のいずれか1文字                                             │
├───┼──────────────────────────────────┤
│[!A-Z]│文字群中にないいずれか1文字                                         │
└───┴──────────────────────────────────┘
分類:ExcelVBA
前へ 1 … 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 … 156 次へ