カテゴリー
Microsoft

【Excel VBA】CSV ファイルをワークシートにインポートするクラスのコード♪

CSV ファイルのをエクセルにインポートする条件

  • CSV ファイルを VBA からエクセルにインポートしたい。
  • CSV の各項目にダブルクオーテーションが付いていてもいなくても、インポートできるようにしたい。
  • 読み込み先エクセルの列のデータ型、つまり表示形式を指定したい (先頭の 0 が自動的に除去されないように、などしたい) 。

読み込まれる CSV ファイル

No,氏名,電話番号
1,伊藤健一,0112223333
2,高橋哲也,0114445555
3,佐藤誠,0116667777

VBA コード

  • クエリーテーブルを使用する方法で CSV をインポートしている。
  • クエリーテーブルを使用してインポートする場合、次の副作用、想定外の出来事、悪影響が発生する。
    • インポート対象 CSV ファイルとのコネクションが張られてしまう (エクセルで、データ > 接続、で確認可能のはず) 。これにより、エクセルに読み込んだデータを編集すると元データも同期されてしまう。
    • インポート範囲を対象に Name オブジェクトが作成されてしまう (エクセルので、数式 > 名前の管理、で確認可能) 。これといって害は無いと思う。
  • 副作用を取り除くために、インポート処理完了後に次の処理を行った。
    • コネクションはすべて削除するようにした。
    • Name オブジェクトは自動的に作成されたものを狙って削除するようにした。他にもセル範囲に名前をつけた Name オブジェクトが予め存在していたため。
  • 自動生成の Name オブジェクトは、名前を指定しても連続して CSV インポートを行うと接尾辞が付与された Name オブジェクトが追加されてしまう。これにより、指定した文字列で Name オブジェクトを削除できない場合がある。
  • そこで Name オブジェクトが生成されるときに接尾辞を予め付与することで自動付与の接尾辞を抑制した。接尾辞のフォーマットは、他の Name オブジェクトと重複しないよう yyyymmddhhnnss とした。
  • データの先頭に 0 がある場合、取り除かれてインポートされてしまう。そこで、TextFileColumnDataTypes で各列に適用されるデータ型を指定できるようにしている。
  • クエリーテーブルの各プロパティについて、必須かどうか、デフォルト値は何か、は調べていない。省略できるプロパティはあると思う。
  • TextFilePlatform の値は 932 で、これはマクロの記録で設定された値をそのまま使用している。公式ドキュメントのページを見ても、932 に該当する値は記載されていない。しかし次のページを見てみると正しい値と思うのでこのまま使用する。
カテゴリー
Microsoft

【Excel VBA】コレクションを配列に変換するコード

VBA コード

  • CollectionToArrary の返却値は Variant だが、本当はどんな型なのか限定させたかった。。。
  • 汎用性を考慮して、また、Arrary(“い”, “ろ”, “は”) などで配列を生成するときは Variant の変数とすることを考慮して、CollectionToArrary の返却値は Variant に決定した。
  • ループ内で ReDim して配列サイズを毎回変更することはしないようにした。
  • 要素を回すのに、元となるコレクションをループする方法と、作られる配列をループする方法とがある。今回、コレクションをループする方法を採った。
    • コレクションのインデックスは必ず 1 から始まる。配列のインデックスの開始は配列の定義時に自由に設定できる。
    • 配列をループしてそのインデックスに対応するコレクションのインデックスを計算して取り出すよりも、コレクションをループして配列の開始インデックスをインクリメントしていく形で要素を詰め込んでいく方がシンプルに書ける。
    • よって、ループする前に LBound で配列の最低のインデックスを取得して変数に代入しておき、ループ内の最後で変数を + 1 することで配列の添字を動かしていく。
カテゴリー
Microsoft

【Excel VBA】ワークシートの入力内容をすべて削除してリセットするコード♪

ポイント

  • Range.Clear メソッドは次のメソッドの内容を含む。
    • Range.ClearComments メソッド → コメント
    • Range.ClearNotes メソッド → コメント
    • Range.ClearContents メソッド → 値と数式
    • Range.ClearFormats メソッド → 書式 (色や罫線、条件付き書式など)
    • Range.ClearOutline メソッド → ハイパーリンク
  • Range.ClearNotes メソッドと Range.ClearContents メソッドの処理は同じで、コメント削除 (詳細な検証はしていない)
  • リセット対象のワークシートをアクティブにする必要はない。
  • Range.Value = "" でもリセットが可能。ただし、Range.ClearContents メソッドならば計算式も更新される一方、Range.Value = "" は対象 Range を参照している計算式が更新されない。そのため、基本的に Range.ClearContents メソッドを使うのがよい。

準備

ワークシート “Sheet1” に次の内容を書き込んだセルを用意する。

  • 文字列
  • 太字の書式付きセル
  • コメント付きセル
  • 罫線つきセル
  • ハイパーリンク付きセル
  • テキストボックス
  • 図形
  • 画像

これらをすべて VBA からまっさらに削除してリセットいたします♪

カテゴリー
Microsoft

【Excel VBA】ワークシートに入力したマスタデータを VBA から簡単に利用できるようにしたクラスのコード!

追記。改善版を作りました♪こちらのコードの方がすっきりとしております。


エクセルワークシートにマスタデータを表現いたしました。

これを、VBA に取り込んで、VBA の他のコードから呼び出して検索して値を返すクラスを作りたいですの!

そのようにすることで、エクセルのワークシートから値を取得して何かの関数で絞り込んで、、、などと意識することなくマスタデータを取り出せるようにいたします♪

ポイント

  • マスタデータをユーザ定義型の Collection で扱おうと考えたが使えなかった
  • そこでクラス内にマスタの項目をプロパティとして定義する。そして自分自身のクラスをインスタンス化してマスタデータをプロパティに設定することでデータを扱えるようにする。
  • 自分自身のクラスには、データ構造以外に関数も含まれる。
  • 本来であれば構造を扱うクラス、処理を扱うクラスに分けるべき。
  • しかし、VBA にはクラス宣言のコードがないため、1つのファイルに両方を持たせるためにこれらを混在させた。
カテゴリー
コンピューター

木工用ボンドでサビをかなり綺麗に取り除けました♪

ポイント

  • サビた部分に木工用ボンドを塗って乾いてからはがすとサビを取り除く事ができる。
  • 木工用ボンドはケチらず厚めに塗る。
  • 木工用ボンドは完全に乾いて透明になってから取り除く。

実例

  • お風呂においたヘアピンが錆びてしまい、そのサビが浴室の台に移ってしまった。
  • 木工用ボンドでサビを落とそうとした。すべてを落としきることはできなかったが、大部分を取り除くことができた。
  • サビ以外の汚れも取れた。
カテゴリー
コンピューター

2015年11月のアクセス解析

先月 2015 年 11 月の 1 ヶ月間の Google アナリティクスの結果です。

  • ユーザー > サマリー(左に先月、右に先々月と比較表示)
  • 行動 > サイトコンテンツ > すべてのページ
  • 集客 > ソーシャル > 参照元ソーシャル ネットワーク
  • 集客 > 検索エンジン最適化 > 検索クエリ

以上の 4 種類の Google Analytics 結果です。

ユーザー > サマリー(左に先月、右に先々月と比較表示)

カテゴリー
Microsoft

【Excel VBA】「実行時エラー ‘1004’: Range クラスの Select メソッドが失敗しました。」への対処!

エラー再現手順

  1. Sheet2 を表示
  2. 標準モジュールで VBA を実行
  3. Worksheets(“Sheet1”).Range(“A1”).Select で次のエラー発生

実行時エラー ‘1004’: Range クラスの Select メソッドが失敗しました。

エラー再現エクセル・VBA コード

  • エクセルにシートを2つ用意する。「Sheet1」「Sheet2」
  • VBA では、標準モジュールを挿入してそこにコードを書く。
    Option Explicit
    
    Sub Test()
        Worksheets("Sheet1").Range("A1").Select
    End Sub
    

修正 VBA コード

  • Worksheets.Activate メソッドを Select の前に実行すればよい。
Option Explicit

Sub Test()
    Worksheets("Sheet1").Activate
    Worksheets("Sheet1").Range("A1").Select
End Sub
カテゴリー
Microsoft

【ASP.NET MVC5】Identity 2 をベースにした、ユーザー情報を DB に持つ独自の認証プロジェクトのチュートリアル

2016年8月18日11時12分追記: ソリューション全体をアップロードしました。

Identity をカスタマイズした独自の認証を持ったサンプルのアプリを作ってみました。Identity の拡張方法の習得を目標に、それ以外はシンプルに、あまりこだわらないようしております。

構築(勉強)の仕方

Visual Studio 2015 でプロジェクトを作成するときに認証処理を追加するように選択することができます。そうしますと、Identity を使用した認証ロジックと、ユーザーやロールを管理するデータベーステーブルが予め作られます。

このファイルやコードが大変参考になります。

そこで、ファイルの構成はプロジェクト生成時に自動作成される認証のあり方に近づけます。

コードの振る舞いや、内容の理解、実際に書くコードの内容は、参考ウェブページをお手本にいたします。

カテゴリー
Microsoft コンピューター

【Excel VBA】文字列の Date 型への変換判定、変換、年月日時分秒の取り出しコード♪

ポイント

  • 年月日を指定せずに時分秒のみを文字列指定した場合に Date へ変換すると、年: 1899、月: 12、日: 30、となる。
  • day 関数のみ、なぜか小文字からはじまる。

VBA コード

Option Explicit

Sub test()
  Dim s As String
  s = "2015/11/23 16:43"

  ' Date 型への変換判定
  Debug.Print IsDate(s)

  ' Date 型への変換
  Dim d As Date
  d = CDate(s)

  ' Date から年月日時分秒の取り出し
  Debug.Print Year(d)
  Debug.Print Month(d)
  Debug.Print day(d)
  Debug.Print Hour(d)
  Debug.Print Minute(d)
  Debug.Print Second(d)
End Sub
カテゴリー
文化

【年賀状】はがきデザインキット[ウェブ版]の使用感メモ♪

年賀状作成の使用アプリ

アプリ特徴

  • 画像のアップロード可能
  • テキストの挿入、用意された画像素材の挿入可能
  • 画像、テキスト、素材オブジェクトは拡大・縮小、回転が可能
  • テキストは、フォント、色、配置、組(縦書き横書き)も変更可能
  • オブジェクトの移動はマウスのみでキーボードは使えない。
  • オブジェクトを左揃えにするような操作はできない。
  • ウェブ上に編集中のデザインを保存可能。保存は毎回新規に作られる。上書き保存ではない。
  • 保存したデザインから、注文、編集、jpg 画像としてダウンロード、削除が可能
  • ダウンロードした画像は、660 KB、1181 x 1748 px、DPI 72 ピクセル / インチ

追記。注文してみての感想

  • 宛名印刷なしと、宛名印刷ありを同時に注文することができなくて不便
  • 宛名を選ぶときに、一括選択できず、ひとつひとつ選択しなければならないのが不便
  • 宛名面、デザイン面のプレビューを宛名ごとに確認できるのがとてもよい
  • 価格。119.3円/枚。去年は117円/枚だったので、あまり変わらない。

価格

  • 注文方法: 自宅配送
  • 宛名印刷: あり
  • 枚数:53枚

印刷代 普通紙 × 53枚 : 4134円
はがき代 × 53枚 : 2756円
小計 6890円
※「まとめ割」は、すべてのご注文の印刷代総計からの割引となります
※プレミアムテンプレートは「まとめ割」の対象外になります
配送料(全国一律) : 650円
まとめ割(30%OFF)* × 53枚 : -1219円
合計金額 6321円