カテゴリー
Microsoft

【Excel VBA】配列の要素数に変数の数字を設定する方法

ポイント

  • Dim lngArray(lngLength ) As Long といった書き方は不可能で、コンパイルエラーとなった。
  • [コンパイルエラー: 定数式が必要です。]
  • Dim lngArray(100) As Long ならば問題ない。
  • 変数を配列の要素数に割り当てたい場合は、ReDim でサイズを指定する。

サンプルコード

Public Sub Test()
  ' 配列の要素数となる変数
  Dim lngLength As Long
  lngLength = 100
  ' 配列を宣言し、要素数に lngLength を設定
  Dim lngArray() As Long
  ReDim lngArray(lngLength)
  ' 配列の要素数を確認
  Debug.Print UBound(lngArray)
End Sub
カテゴリー
Microsoft

【Excel VBA】値が入力されている下端の行番号、右端の列番号を取得するコード♪

VBA コードサンプル

  • ワークシートの一番下から上方向に登って行って、入力されたセルと最初にぶつかったところを値が入力されている下端の行番号として取得している。
  • ワークシートの一番右から左方向に戻っていって、入力されたセルと最初にぶつかったところを値が入力されている右端の列番号として取得している。
Public Sub Test()
  ' 右端の列番号を取得
  Dim lngMaxCol As Long
  lngMaxCol = Cells(1, Columns.Count).End(xlToLeft).Column
  Debug.Print lngMaxCol

  ' 下端の行番号を取得
  Dim lngMaxRow As Long
  lngMaxRow = Cells(Rows.Count, 1).End(xlUp).Row
  Debug.Print lngMaxRow
End Sub
カテゴリー
Microsoft

【ASP.NET MVC5】マスタの値が重複しないように、モデルのプロパティにインデックスユニークを付ける

ポイント

  • [Index(IsUnique=true)] という Annotation 属性をプロパティに付けることでそのカラムは一意となる。
  • プロパティの型が String の場合、MaxLength も付ける必要がある。一意性をチェックするためには、カラムへの格納サイズが無限とも思われる String だとパフォーマンスが大きく低下するためと思われる。

モデルのコード

    public class Sex
    {
        public int Id { get; set; }
        [Required]
        [Index(IsUnique=true)]
        [MaxLength(10)]
        public string Name { get; set; }
    }

もし MaxLength 属性を付けなかった場合は、どうなったか?

カテゴリー
Microsoft

【Excel VBA】クラスの雛形

VBA クラスの雛形のポイント

  • mstrClassName はログ出力用にすべてのクラスに付けている。
  • コメントは、C# のドキュメントコメントに倣っている。正しいかどうかは不明
  • クラス名を、TypeName(Me) で取得し、コンストラクタでプロパティにセットしている。
  • 完全コンストラクタを意識する場合、セッターは使用しないが書いておく。
  • コンストラクタに引数を持たせることができないため、Init という名前の関数をコンストラクタの代わりとして使う。
カテゴリー
Microsoft

【ASP.NET MVC5】NuGet のパッケージアップデートを簡単に一発で行います♪【プロジェクト作成後にどうぞ】

NuGet コマンド

# アップデート対象となるパッケージを確認する
Update-Package -WhatIf
# アップデート実行
Update-Package
  • Visual Studio 2015 でプロジェクトを作成すると、様々なパッケージが予めインストールされる。しかし大体バージョンが古い。
  • 依存性を崩さないようにアップデートしたい。
  • 簡単にアップデートしたい。ツール > NuGet パッケージ マネージャー > ソリューションの NuGet パッケージの管理、からでも可能。しかし、1つ1つ手動で行う必要があり、手間がかかり、時間もかかる。
  • そこで、Nuget のパッケージマネージャーコンソールからコマンド1発でパッケージをアップデート
カテゴリー
Microsoft

【Excel VBA】はじめて VBA でクラスを使う時のためのメモ

ポイントメモ

  • 挿入 > クラスモジュール、で追加
  • クラスモジュールを入れるフォルダが出現し、その中にクラスファイルが追加される。
  • クラスモジュールフォルダ内に、更にフォルダを作ることはできないようだ。
  • 左の窓、プロパティでクラス名(ファイル名)編集
  • クラス宣言をファイル内に書かない。よって、ファイル内を見てもクラス名は分からない。
  • 引数を渡してのコンストラクタは無い。
  • インスタンス化時に自動で行われる初期化処理はある。
    • クラスに次を書く。Private Sub Class_Initialize()
    • Set CInstance = New ClassSkeleton、したときに呼ばれる。
    • 宣言したプロパティ変数を、明示的に初期化するのによい。
  • デストラクタがある
    • クラスに次を書く。Private Sub Class_Terminate()
    • Set CInstance = Nothing すれば呼ぶことができる。
  • プロパティについて。プロパティプロシージャを使う。セッターと、ゲッターがある。
    • 変数宣言は、クラス内で Private で宣言し、クラス外からはセッター、ゲッターを使用して操作する。
private _hoge As String
  • セッター。
Public Property Let Hoge(strValue As String)
    _hoge = strValue
End Property
  • ゲッター。
Public Property Get Hoge() As String
    Hoge = _hoge
End Property
  • クラス外からセットするとき。
    CInstance.Hoge = "セッターに格納"
    
  • クラス外からゲットするとき。
Dim hoge As String
hoge = CInstance.Hoge
  • TypeName(Me) でこれを書いたクラス名を取得することができる。
  • インスタンス化するときは、変数宣言とまとめないで、2行に分けて行う。
    Class_Initialize プロシージャ呼び出しのタイミングを制御するため。
Dim fuga As Fuga
Set fuga = New Fuga
カテゴリー
コンピューター

【Excel VBA】エクセルファイルのコネクション、名前をすべて削除するコード!

追記: 2015年11月22日

Excel のデータコネクション、セルなどにつけた名前を全てく削除するプロシージャコード

''' <summary>
''' エクセルファイルに存在するコネクションを全て削除します。
''' </summary>
Private Sub DeleteConnections()
  Do While ActiveWorkbook.Connections.Count > 0
    ActiveWorkbook.Connections.Item(ActiveWorkbook.Connections.Count).Delete
  Loop
End Sub

''' <summary>
''' エクセルファイルに存在する名前を全て削除します。
''' </summary>
Private Sub DeleteNames()
  Do While ActiveWorkbook.Names.Count > 0
    ActiveWorkbook.Names.Item(ActiveWorkbook.Names.Count).Delete
  Loop
End Sub
カテゴリー
コンピューター

2015年10月のアクセス解析

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

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

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

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

カテゴリー
Microsoft

【ASP.NET MVC5】今度は CSV インポートのサンプルプロジェクト作成チュートリアル

にて DB データをエクスポートする機能を紹介いたしました。

今回は、対となるインポート機能を開発いたします♪

インポート機能のポイント

こちらのシステムでインポート機能を考えます。ポイントは次の 2 点です。

  • CSV の 1 行に Parent とその Child を記入する。
  • インポートできる子ども (Child) は 2 人まで。

Parent 1-n Child という関係を持っております。

ですのでシステム上は、Parent は必ず 1 つですけれども、それに紐づく Child はいくつあっても問題ありません。

ですけれども、インポート機能におきましては子どもの数の最大数を制限しませんと CSV ファイルの仕様を固めることが難しくなります。

したがいまして、今回は Child の数を最大 2 つとし、それ以上登録したい場合はウェブブラウザから追加する、という運用方法を想定いたしました。

CSV インポート開発の流れ

に沿ってサンプルプロジェクトを作成したところからスタートです。

ソリューションおよびプロジェクト名は Sample3 といたしました。

  1. コントローラー CsvController.cs をスキャフォールディング作成
  2. アップロードファイルに対応するモデル CsvFile.cs を作成
  3. アップロードするファイルの種類を検証する属性クラス UploadFileAttribute の作成
  4. ビュー Import.cshtml の作成
  5. インポート処理を司るサービスクラス CsvImportService の作成
  6. テスト CSV ファイル作成と、インポートの確認
カテゴリー
コンピューター

【C#】StringBuilder で改行文字を入れたい場合は、AppendLine 関数を使う!

コード例

の CreateCsv メソッドが次のように書けますわね♪

var sb = new StringBuilder();
sb.Append(GetCsvHeader()).Append(NEWLINE_CHARACTER);
parentList.ForEach(p => sb.Append(CreateCsvLine(p)).Append(NEWLINE_CHARACTER));
return sb.ToString();

var sb = new StringBuilder();
sb.AppendLine(GetCsvHeader());
parentList.ForEach(p => sb.AppendLine(CreateCsvLine(p)));
return sb.ToString();

参考ページ