タグ

VBAに関するcozyathtnのブックマーク (33)

  • VBA 構造体 Type を定義する

    はじめに Excel VBA マクロで構造体 Type の定義や初期化する方法を紹介します。 構造体とは、複数の変数をグループ化したようなものです。関連性のある値をまとめます。ユーザー定義型とも言います。 Type 構造体名 のようにして、構造体を定義できます。 Type の中に 要素名 As 型名 のようにして、構造体の要素を定義できます。 構造体を初期化するには、構造体の変数を代入します。 構造体を配列にするには、配列の変数を宣言するのと同じです。 構造体を宣言する Type 構造体名 のように入力します。Type が構造体を定義するキーワードです。すべての関数より上に定義します。 Type の中に 要素名 As 型名 のように入力します。要素は変数のように使えます。 Type Point X As Integer Y As Integer End Type Type Customer

    VBA 構造体 Type を定義する
    cozyathtn
    cozyathtn 2016/09/09
    構造体
  • NullとEmptyとNothingと空の文字列の違い:Access VBA|即効テクニック|Excel VBAを学ぶならmoug

    NullとEmptyとNothingと空の文字列の違い (Access 97/2000/2002/2003/2007/2010) ツイート VBAでは変数やフィールドに有効な値がない状態や、空の状態を表す値がいくつもあります。 ここでは、それぞれの意味や使用上の注意についてご紹介します。 ■長さ0の文字列("") 文字を1つも含まない文字列 ("") です。 「長さ0の文字列」の名前のとおり、Len関数やLenB関数の引数に指定すると0を返します。 Dim myStr As String myStr = "" Debug.Print Len(myStr) '--> 0 と表示される ■値0の文字列(vbNullString) String型の変数の初期状態を表す値です。vbNullStringという定数で表します。 長さ0の文字列("")と同様に、Len/LenB関数の引数に指定すると 0

  • Rangeオブジェクト.Valueの省略について|VBA技術解説

    VBA技術解説 Rangeオブジェクト.Valueの省略についてExcelマクロVBAの問題点と解決策、VBA技術的解説 公開日:2014-11-05 最終更新日:2020-03-04 Rangeオブジェクト.Valueの省略について エクセルVBAを教えていて、これほど多く聞かれる質問はないでしょう、 RangeやCellsの.Valueは省略したほうが良いか、書いた方が良いか、 当然、省略出来ない場合もあれば、オブジェクトとして扱うために.Valueは書けない場合もあります。 ですので、 結論から言えば、書きたければ書けば良いし、書きたくなければ書かなくて良い。 ただし、 .Valueを省略出来ない場合、.Valueは書けない場合、.Valueを書かない方が良い場合があります。 順に解説していきます。 .Valueを省略出来ない場合 Sheets(2).Range("A1:B5").

    Rangeオブジェクト.Valueの省略について|VBA技術解説
  • エクセルVBA高速化手法|ランキング

    HOME > VBA高速化 > ランキング VBA高速化ランキング一覧 以下は、「GoGo エクセルマクロをはじめよう!」を運営するWATエクセルカスタマイズセンターが実施した速度計測 ベンチマークテストによる結果を基にした高速化手法テクニックを順位付けして発表するものです。 第1位 154秒→11秒に、圧倒的な実に14倍の差が出ました。・・・画面更新の非表示 でも、ちょっと見せる工夫もしてみる。・・・画面更新の「半」非表示 第2位 超裏わざで、2万行が6秒に短縮する。・・・CSVの高速取り込み 第3位 Excelを使えば、圧倒的に速くなる。・・・大量データのソート 第4位 Rangeでダイレクトに値を取り出す。・・・セルの指定 第5位 サンプル1では34秒が、サンプル2は1.3秒でした。・・・不要行の削除 重要! マクロ高速化の正しい手順とVBAの書き方・・・高速化チューニングの手順 番

  • マクロ高速化の正しい手順とVBAの書き方 - GoGoマクロ!のWebサイト

    今回は、 「プログラムを高速化する手順、間違えていませんか?」 と題して、 案外 間違ってる人の多い「マクロ高速化の手順」と、それに伴う プログラム開発で重要な「見える化」というものについて解説します。 まず、結論から言ってしまうと、プログラムの高速化とは・・・ 完成してからやるものだ! ということです。 プログラムの高速化、すなわち、コードのチューニングというものは、 完成したプログラムに対して行うものであります。 それは、何もプログラム開発だけに限った話ではありませんので、たとえば 車好きの人であれば、ホンダが開発したF1マシーンのエンジンを、マクラー レンのメカニックがチューニングしてより高速化を図っていくのと一緒だと 思えばイメージしやすいかと思います。 話を戻しますが、よく初心者の方が作成中の(開発途中で未完成の)プログラムコード を拝見しますと、 Application.Scr

  • ExcelVBAにおける不可解な「コードの実行が中断されました」 - ♯untitled_note

    復帰方法確定? (追記:2013/02/18) 再現したので、復帰方法手順5をいきなり試してみた 結果改善。 「Ctrlを押しながら、デバッグリセット」が効いてる気がします。 同症状になった方は是非お試しください。 再現した時「なんだこれ…」と想いながらググって自分のブログがヒットした時の衝撃*1 不可解な「コードの実行が中断されました」 マクロを組んでデバッグ中、突然何の変哲もないところで「コードの実行が中断されました」メッセージが出た。 調べてみると、全く同じ現象はあり改善策を提示されてはいるものの、改善報告は全くない。 CGI Error どうやらバージョンに依存せず発生するようだが、念のためバージョンを記載しておく。 現象発生Excelバージョン:Office 2007 現象発生前に実施していたこと #if #end ifを適当に使っていた。 ループ中の箇所で適当にCtrl+Bre

    ExcelVBAにおける不可解な「コードの実行が中断されました」 - ♯untitled_note
  • http://www.openreference.org/articles/view/239

  • 引数が不定の場合-ParamArrayキーワード - Excel VBA モーグ即効テクニック集

    プロシージャを他のプロシージャから呼び出して使用する場合に、指定する引数が呼出す毎に異なる場合、ParamArrayキーワードを用いて引数を指定します。 ParamArrayキーワードを用いた引数はVariant型配列として扱われ、データ型の宣言は出来ません。したがって、宣言は・・・ Sub/Function (ParamArray 引数名()) As ・・・ のようになります。 以下のサンプルではFunctionプロシージャ”MySum”に任意の数の引数を与え、すべてを合計した値を返します。”TEST”プロシージャを実行してください。 (サンプル) Function MySum(ParamArray MyVal()) As Currency Dim i As Long Dim Amount As Currency For i = LBound(MyVal) To UBound(MyVal

  • Array関数を使って配列に一度に値を格納する

    配列に値を格納するには、インデックス番号を指定して 1 つずつ格納するしかありません。ただ、バリアント型の変数を用意して、その値として配列を格納することができ、配列の中身をArray関数を使ってまとめて指定することが可能です。ここでは Excel VBA で Array 関数を使って配列に一度に値を格納する方法を解説します。

    Array関数を使って配列に一度に値を格納する
  • accessclub.jp - このウェブサイトは販売用です! - アクセスクラブ リソースおよび情報

  • 『Excel2000 VBA 型が一致しません 配列またはユーザー定義型を指定してください』

    エクセル2000を使い始めて10年ほどになるでしょうか、 ずっと勘違いしていたことをつい最近気付いたのでした。 一行で複数の変数を宣言することは一般的にもよくあることだと思うのですが Dim i, j as Integer のように宣言すると i は Integer ではなく データ型を指定していない変数、 すなわち Variant として扱われてしまうのです。 基礎をしっかりと学んだ方はじゅうぶん承知されているのだろうけど、 独学自己流のワタクシ、複数のループ用変数を使うときなどしたり顔で Dim i, j, k as Integer とかやってました。 もちろん k だけでなく、i も j も全部の変数を Integer として宣言したつもりでw だってこの書き方そう思うよなぁw ほとんどの場合、データ型がVariantであっても若干パフォーマンスが低下する かもしれない、程度の影響し

    『Excel2000 VBA 型が一致しません 配列またはユーザー定義型を指定してください』
    cozyathtn
    cozyathtn 2016/06/10
    ByRef ByVal
  • Excel VBAつかいまくってるからそろそろ腹にためてることをちょっと書き出すか - oe-roelのカオス落書き帳

    相変わらずExcel VBAを使いまくってる日々なので腹にためてることをちょっと書き込もうと思った。なんか前にも書いたかもしんない。知らない。 以下はバッドノウハウの類も含むカオス内容。 if文内に書いた条件は全て評価されることに注意する。CやJavaのようなショートサーキットタイプではない。 それでもif文の評価コストに慎重にならないこと。 他言語で&&で置き換えられる内容をif文のネストで表現している奴を見たらVB出身を疑うことができる。 変数の通用範囲がプロシージャレベルであることに注意すること。ブロックで通用範囲が消えたりしない。 Dim hoge as New ClassNameとした場合、hogeが始めて使われる場所で変数にNewしてSetされる。その後プロシージャ内でこの宣言が実行されたとしてもNewされることはない。プロシージャレベルでのオブジェクトの使いまわしが怖いならA

    Excel VBAつかいまくってるからそろそろ腹にためてることをちょっと書き出すか - oe-roelのカオス落書き帳
  • VBA応用(強制的に「マクロ有効」で開かせる)

    外部のVBスクリプトを使います。 よく掲示板などで「マクロを使ってマクロを有効にする方法」のような類の質問を見かけます。マクロを含むワークブックを開く時に「マクロを有効にするか」の確認が表示されますが、この段階ではワークブックは開かれておらず、「無効」で開かれたならマクロにどのようなコードを書いても実行されません。 しかし、他のワークブックのマクロやVBスクリプトからワークブックが開かれる場合、セキュリティレベルが最高でなければ、そのワークブックは確認なく「マクロ有効」で開かれます。 この動作を利用して、単にワークブックを直接指定して「マクロ無効」で開く場合は作業するシートが表示されない(実際は「マクロ有効」の時だけ目的シートが表示されるようにする)ような工夫をします。 但し、この対応を行なっても、一旦「マクロ有効」にして目的シートが表示された状態で上書き保存させれば、次回「マクロ無効」で

  • Excel VBAでのエラー処理 - Qiita

    Excel VBAで組んだ処理でエラーが発生した時、デバッグモードに移ってしまうとどのモジュールのどのプロシージャでエラーが発生したのかよくわからなくなることがあります。 そのような場合、エラー発生箇所と内容を出力する画面をポップアップさせるようにしておくとデバッグが楽です。 方法としては、エラー内容レポート用の標準モジュールを用意しておき、エラートラップから当該モジュールを呼ぶというきわめて原始的な方法です。 エラーレポート用モジュール Option Explicit Public Sub displayError( _ plErrNum As Long, _ psErrDesc As String, _ psErrApl As String, _ psErrModule As String, _ psErrProc As String, _ Optional pvErrNote As

    Excel VBAでのエラー処理 - Qiita
  • Excel VBAコーディング ガイドライン案 - Qiita

    ここで記述する内容はあくまでガイドライン、指針の案にすぎない。この規約を守るためにコードを作るのでなく、よいコードを作るためのガイドラインにすぎない。このガイドラインがよいコードを作るのに障害になる場合は、ガイドラインを変えるか、ガイドラインを使用しない。 つまり、このガイドラインは必要に応じて、変更されることがある。 もし、ガイドラインを考える場合、VB6の規約が参考になる。 Visual Basic Coding Conventions 宣言について 変数の宣言を強制する モジュールの先頭に下記の構文を記述して型の宣言を強制すること。 この宣言は下記の手順で自動で作成することもできる。 【ツール】→【オプション】 【編集】のタブを選択 【変数の宣言を強制する】をチェックする。 理由 変数名の記述ミスがあった場合、コンパイル時にそのミスを検知できる。 暗黙の型は使用しない VBAで変数の

    Excel VBAコーディング ガイドライン案 - Qiita
  • (旧)作業を効率化させるExcel VBA Tips集:FileSystemObject使用中に「ユーザ定義型は定義されていません。」と表示された場合 - livedoor Blog(ブログ)

    下図のようなコンパイルエラーが表示された場合、 参照設定の「Microsoft Scripting Runtime」にチェックが付いてないことが多い。以下の手順でチェックを付ける。 ①Visual Basic Editorのメニューの[ツール]-[参照設定]を選択。 ②下図のようなダイアログが表示されるので、「Microsoft Scripting Runtime」にチェックを付け、OKボタンをクリックする。 上記の手順で実行すればうまくいくはず。

  • ADODB.Streamを使ったテキストファイルの読み書き

    通常のテキストファイルの読み込みや書き込みだと文字コードがShift_jisでしか扱えません。 他の文字コードを使いたい場合はADODB.Streamを使います。 テキストファイルの読み込み Dim sr As Object Dim strData As String Set sr = CreateObject("ADODB.Stream") sr.Mode = 3 '読み取り/書き込みモード sr.Type = 2 'テキストデータ sr.Charset = "UTF-8" '文字コードを指定 sr.Open 'Streamオブジェクトを開く sr.LoadFromFile ("ファイルのフルパス") 'ファイルの内容を読み込む sr.Position = 0 'ポインタを先頭へ strData = sr.ReadText() 'データ読み込み sr.Close 'Streamを閉じる

    ADODB.Streamを使ったテキストファイルの読み書き
  • Excel VBAのマクロを,複数のブックから利用する方法 (標準モジュールをブックの外部で管理して,共通ライブラリとして読み込み) - 主に言語とシステム開発に関して

    バッチ・マクロのTOPへ 通常,Excel VBAのコードは, .xls ファイル(=ブック)の内部に 保存されてしまう。 これだと 複数のブックで共通のコードを利用できないし, マクロの修正があると,全ブックを修正しなければならないし, ソースコードをテキスト形式で管理できない(SVNやGitで差分を読みづらい) という不便さがある。 これでは,VBAを使ってスムーズな開発プロジェクトを行なうのは難しい。 下記は,それを解決する方法。 テキスト形式で,VBAのモジュールをブックの外部に保管して共有し, どのモジュールをブックに読み込ませるか?という情報(モジュールの依存関係)も外部の設定ファイルで管理し, ブックを開いたら自動的に必要なモジュールが外部から読み込まれる というふうにする。 ここでは (1)簡易な方法(非テキスト形式) (2)便利な方法(テキスト形式) の2つの方法を掲載す

    Excel VBAのマクロを,複数のブックから利用する方法 (標準モジュールをブックの外部で管理して,共通ライブラリとして読み込み) - 主に言語とシステム開発に関して
  • ファイルの操作(Shift-JIS/UTF8対応)[ExcelのVBA]

    Option Explicit Private Sub CommandButton1_Click() Dim fileNo As Integer ' ファイル番号 Dim buffer As String ' 一時的に文字列を格納 ' ファイルを開く為のファイル番号を取得 fileNo = FreeFile ' 指定されたファイルを開く Open "C:\excel_vba_22_sjis.txt" For Input As #fileNo ' ファイルがEOF(ファイルの終端)になるまでループをする Do Until EOF(fileNo) ' ファイルから一行づつbufferに読み込む Line Input #fileNo, buffer ' 読み込んだ一行をイミディエイトに出力 Debug.Print buffer Loop Close #fileNo End Sub 結果 正常にフ

    ファイルの操作(Shift-JIS/UTF8対応)[ExcelのVBA]
  • VBAでUTF-8のテキストファイルを作成する - SO NOTE そうのて (;^ω^)

    VBAで文字コードがUTF-8のテキストファイルを作成する方法。 Excelファイルの内容をJSONフォーマットで出力させようと思って、 色々調べたところ、ADOのStreamオブジェクト使ったら簡単に出来る事が判明。 ソース Option Explicit ' VBAで文字コードUTF8のテキストファイルを作成する Sub CreateText_UTF8() Const cnsFilePath As String = "D:\hogefuga.txt" With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open .WriteText "ほげふが" .SaveToFile cnsFilePath, 2 '1:ファイル有り時上書きしない、2:上書きする .Close End With End Sub MSDN ADO API リファレ

    VBAでUTF-8のテキストファイルを作成する - SO NOTE そうのて (;^ω^)