VBAは標準ではShift-JISかUTF16LEのみ マクロを使ってHTMLの出力をする際にUTF-8で書き出したかったのですが、WriteLine()関数などでは基本的にShift-Jisになるようです。 UTF-8を書き出すにはADODB.Streamを使う(設定が必要) Visual Basic Editor のメニューから[ツール]→[参照設定]を選び,[参照可能なライブラリファイル]の中から "Microsoft ActiveX Data Objects x.x Library" にチェックを入れます。 バージョンは最新のものでOK? サンプルコード 書き出し用オブジェクトの準備 Dim output As ADODB.Stream Set output = New ADODB.Stream With output .Type = adTypeText .Charset = "
Office Visual Basic for Applications (VBA) は、Office アプリケーションの拡張に使用できるイベント駆動型のプログラミング言語です。 Office での VBA プログラミング この記事の内容は、VBA について学ぶことを希望したり、Office をカスタマイズする作業にプログラミングを役立てる方法について詳しく知ることを望む、経験ある Office ユーザーのために書かれています。 Office アプリケーション スイートには、豊富な機能が用意されています。 ドキュメント、メール、データベース、フォーム、スプレッドシート、プレゼンテーションを多数の異なる方法で作成、書式設定、および操作することができます。 Office において VBA プログラミングが提供する大きなメリットは、マウス、キーボード、またはダイアログ ボックスで実行できるほとん
処理の完了までに長い時間がかかる場合は、何らかの方法でユーザーに「現在処理中です...」と伝えたいものです。Windowsの標準機能などでは、ファイルを削除したりコピーしたりするとき、バーが右に伸びることで処理の進捗状況を伝えます。このバーを「プログレスバー」と呼びますが、こうした仕組みをExcelで実現するときは、ステータスバーを使うのが簡単です。 ステータスバーはExcelの最下部に表示されるバーで、通常は「コマンド」とか「編集」「入力」などと表示されます。また、セルのコピー中には「コピー先を選択して~」などと操作の手順をナビゲートしてくれます。ステータスバーにメッセージを表示するには、ApplicationオブジェクトのStatusBarプロパティに表示したい文字列を設定します。次のコードは「○回目の処理をしています...」をステータスバーに表示します。 Sub Sample01()
何か、すごく時間のかかるループを実行すると、処理が終わるまでCPUの使用率が100%近くになることがあります。 Sub Sample1() Dim buf As String Const LogFile As String = "C:\log\ex090310.log" Open LogFile For Input As #1 Do Until EOF(1) Line Input #1, buf Debug.Print buf Loop Close #1 End Sub 上記の"C:\log\ex090310.log"は、サーバーのログファイルです。テキストファイルで約45MB、約20万行あります。さすがに、このボリュームになると、Line Inputで1行ずつ読むのには時間がかかります。そして、処理が終わるまで、CPUの使用率はずっと100%となります。 マクロが終わるまで、コーヒーでも
Typeステートメント 構文 [Private|Public] Type varname elementname[([subscripts])] As type End Type キーワードPublicは省略可能です。すべてのモジュールから参照できるユーザー定義型を宣言します。 キーワードPrivateは省略可能です。Typeステートメントを記述したモジュールからのみ参照できるユーザー定義型を宣言します。 varnameには、ユーザー定義型の名前を指定します。 elementnameには、ユーザー定義型を構成する要素の名前を指定します。 subscriptsは省略可能です。配列変数の次元を指定します。 typeには、ユーザー定義型を構成する要素のデータ型を指定します。 解説 ユーザー定義のデータ型を作成します。 Typeステートメントは、プロシージャレベルで使用します。 標準モジュール内で
それではDictionaryオブジェクトのプロパティやメソッドの使い方についてサンプルコードで確認していきましょう! 宣言、初期化、追加、参照する方法 Dictionaryオブジェクトを宣言し使用するためには、CreateObject関数を使ってオブジェクト型の変数に格納する必要があります。 Dim 連想配列名 As Object Set 連想配列名 = CreateObject(“Scripting.Dictionary”) なお、オブジェクト型の変数に格納するにはSetステートメントが必要です。 Dictionaryオブジェクトを初期化、および要素を追加するにはAddメソッドを使用します。 サンプルコードで確認しましょう。 Sub macro1() 'Dictionaryオブジェクトの宣言 Dim myDic As Object Set myDic = CreateObject("Sc
VBScriptには辞書型のオブジェクト Scripting.Dictionary があります。 が、このオブジェクトにはちょっとした罠が潜んでいます。 それは「存在しないキーに対して値を取得しようとするとキーを作成してしまう」というものです。 項目を変更するときに引数 key で指定したキーが見つからない場合、newitem で指定した項目と関連付けられた、引数 key で指定した新しいキーが作成されます。また、既存の項目を取得するときに引数 key で指定したキーが見つからない場合は、空の項目と関連付けられた、引数 key で指定した新しいキーが作成されます。 以下、実際に試したコードです。 Option Explicit Dim objDict, sKey Set objDict = CreateObject("Scripting.Dictionary") ' "hoge" キーを追
Eval 関数を使うと、テキスト文字列または数値になる式を評価できます。 文字列を作成し、実際の式と同じように Eval 関数に渡すことができます。 Eval 関数は文字列式を評価してその値を返します。 たとえば、Eval("1 + 1") は 2 を返します。 関数の名前を含む文字列を Eval 関数に渡した場合は、Eval 関数はその関数の戻り値を返します。 たとえば、Eval("Chr$(65)") は "A" を返します。 構文 Eval ( stringexpr ) stringexpr 引数は、英数字のテキスト文字列に評価される式です。 たとえば、 stringexpr には、文字列または数値を返す関数を指定できます。 または、フォーム上の コントロール への参照を指定することもできます。 stringexpr 引数は、文字列または数値に評価する必要があります。 Microso
これは基本的なテクニックだと思って今まで解説しませんでしたが、セミナーなどで質問が多かったので、簡単に書いておきます。たとえば、下図のようなリストがあったとします。 この、現在入力されている最終セル(あるいは最終行)を取得するには、どうしたらいいでしょう。 Excelに詳しくない、VBAのプログラミング的なことしか知らないような方でしたら、次のように考えるかもしれませんね。「A列を上から順番に見ていって、空欄セルが見つかったら、その直前が最終セル」だと。その方法でやってみましょうか。 Sub Sample1() Dim i As Long, r As Long For i = 1 To 10000 Range("A" & i).Select If Selection = "" Then r = i - 1 Exit For End If Next i Range("A" & r).Sele
オプションの Variant引数がプロシージャに渡されたかどうかを示すブール値を返します。 構文 IsMissing(argname) 必須の argname 引数には、オプションの Variant プロシージャ引数の名前が含まれます。 注釈 IsMissing 関数を使用して、プロシージャの呼び出しでオプションの Variant 引数が指定されているかどうかを検出します。 指定した引数に値が渡されていない場合、IsMissing は True を返します。それ以外の場合は False を返します。 引数に対して IsMissing が True を返した場合、他のコードで不足している引数を使用すると、ユーザー定義エラーが発生する可能性があります。 引数 ParamArray で IsMissing を使用すると、常に False が返されます。 空の ParamArray を検出するには
本稿で紹介する「テキストファイルの操作」は、UTF-8形式のテキストファイルを対象にしています。Shift-JIS形式のファイルを扱うときは、下記ページをご覧ください。 テキストファイルを操作する 正確には「UTF-8形式のファイル」ってのも、ちょっと変な表現なんですけどね。ファイルの形式じゃなくて、そこで使われている文字コードが"UTF-8"だよってことなんですが。まぁ、細かいことはいいとして。ここでは面倒なので「UTF-8形式のファイル」「Shift-JIS形式のファイル」という呼び方をします。 UTF-8の文字コードが記録されたテキストファイルを、上記「テキストファイルを操作する」で解説した方法で読み込むと、望んだ結果になりません。ちょっと、やってみましょう。 UTF-8の文字コードで書かれたデータを読み込むときは、ADO(ActiveX Data Objects)という仕組みを使い
エクセルVBAでCSVの取り扱いをしていると、必ず出くわすと言ってもよい「UTF-8問題」。 これまでの方法ではUTF-8のCSVファイルは取り込むと文字化けを起こしてしまいます。 今回は、ADODB.Streamオブジェクトというものを使ってエクセルVBAでUTF-8のCSVファイルを取り込む方法についてお伝えします。 前回のおさらい 前回のおさらいとしてこちらのプログラムをご覧ください。 Sub getCSV_camma() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) Dim strPath As String strPath = "C:UsersNoriakiDropbox40_ブログvba-csvtestラーメン店アンケート_dq & comma.csv" Dim i As Long, j As Long Dim
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く