2007-01-01から1年間の記事一覧

1は1じゃないし、2も2じゃない?

Evaluate って、てっきり定数の場合はそのまんま返すだろうと思っていたのですが、そうとは限らないと今頃知りました。 Sub Macro1() Debug.Print Application.Evaluate("1") Debug.Print Application.Evaluate("2") Debug.Print Application.Evaluate("3") …

書式設定に全角スペースを入れてみると…

セルの書式設定のユーザー定義で全角のスペースをVBAで入れてみます。 Sub Macro1() Dim S As String Range("A1").Value = 99 S = "0 0" Range("A1").NumberFormatLocal = S End Sub なんだか変です。 半角分しか空いていないように見えます。 気を取り直し…

重複排除して二次元配列を作る(Dictionary版)

Q&Aで割とよくある質問で、シートにあるデータから重複を排除してリストボックス(あるいはコンボボックス)に入れたいってのがあります。 データが1列しかない場合は割と素直にできるのですが、2列以上となるとちょっちメンドクサイです。 方法はいくつかあ…

重複排除して二次元配列を作る(Collection版)

単に重複排除の判定だけなら、わざわざ Dictionary を使わなくても Collection で充分です。 ただ、Collection の場合もちょっと注意が必要です。 Addメソッドの Key は文字列しか受け付けてくれません。 なので、前回のように KEY が数値の場合は、CStr 関…

和洋折衷?

「検索」や「置換」のダイアログを出すと、何故か中途半端に日本語と英語が混ざってます。(笑) 勿論、普通に Ctrl + F や Ctrl + H で出すとこんなことにはなりません。 これは、Excel2007 で↓のコードを実行すれば再現可能です。 「検索」 Application.Dialogs(…

飛び飛びのオートフィルタ

オートフィルタは連続した列に対して設定するもので、A列とC列だけに設定するってことは普通はしません。 でも、やる方法はないこともないです。 まず、オートフィルタをかけておきます。 次に↓の Macro1 でオートフィルタのドロップダウンの名前を取得し…

飛び飛びのオートフィルタ

A,D,F列だけにオートフィルタをかけることってできるのでしょうか? って、できない!ってありきたりの答えじゃ Quiz にならないんで、実は可能なんですが、どうやったんでしょうね? こんな感じです。 ヒント: これは純粋に一般機能だけの問題です。オ…

Word の OnTime

Excel のライブラリと Word のライブラリを比較していて気付いたネタでもう1つ。 Excel の OnTime メソッドと Word の OnTime メソッドは結構違うようです。 構文そのものも 式.OnTime(EarliestTime, Procedure, LatestTime, Schedule) と 式.OnTime(When, …

単位なら同じだろう…

Excel のライブラリと Word のライブラリには、 Application.CentimetersToPoints メソッド Application.InchesToPoints メソッド という単位変換用のメソッドがあります。 勿論、センチメートルやポイントってのは、Excel や Word の専用の単位じゃないので…

Run は Run でも微妙に違う

Excel にも Word にも、Run メソッドがあります。 Excel2007 と Word2007 で Run の実験をしてみたら、少々おもしろい結果になりました。 まず、Excel と Word について、それぞれ標準モジュールを2つ挿入しておき、Module1 に Public X As String Sub Test…

再び、ちかんを…

"長〜〜〜〜〜い文字列"シリーズ(其の五) (Excel2007では 8222文字以上) Excel2003以前では、911文字超の文字列が入っているセルに対しては、置換文字がどこにあろうと置換はできない ということを前回の日記に書きました。 # 前回の日記のテーマは「置換…

ちかん してみたら、、、やっぱりダメ

"長〜〜〜〜〜い文字列"シリーズ(其の四) (Excel2003以下では、911文字以上) 「検索」を試したついでに、「置換」についても書いておくことにします。 やってみれば分かりますが、エラーになります。 「検索」の場合は、[数式]で検索しても、911文字目以内に検…

存在するけど見つからない

"長〜〜〜〜〜い文字列"シリーズ(其の参) (Excel2007では 8222文字以上、Excel2003以下では、1025文字以上) 今回のお話は単純です。 "長〜〜〜〜〜い文字列"の後ろの方の文字列は、「検索」でヒットしないというだけの内容です。 それでは、実験、実験。 …

じゃ、Formula プロパティは?

"長〜〜〜〜〜い文字列"シリーズ(其の弐) (Excel2007では 8222文字以上、Excel2003以下では、1025文字以上) 「Textプロパティは見た目どおり?」には書きませんでしたが、セルの値を取得するプロパティには、 Formula プロパティ ってのもあります。 これ…

Text プロパティは見た目どおり?

"長〜〜〜〜〜い文字列"シリーズ(其の壱) (Excel2007では 8222文字以上、Excel2003以下では、1025文字以上) セルの値を取得するプロパティには、 Value プロパティ Text プロパティ とそれぞれ違うものがありますね。 どう違うのかというと、 Value プロ…

再び、ちかんを…

"長〜〜〜〜〜い文字列"シリーズ(其の五) (Excel2007では 8222文字以上) Excel2003以前では、911文字超の文字列が入っているセルに対しては、置換文字がどこにあろうと置換はできない ということを前回の日記に書きました。 # 前回の日記のテーマは「置換…

同じになると思ったのに…

ワークシートが1枚存在するブックに対して、セル A1 に文字列を入力して、↓のマクロを書いて実行したところ、MsgBox に False と出ました。(セルの書式設定は、標準 のままです。) Sub Macro1() Dim X1 As String Dim X2 As String X1 = ActiveSheet.Rang…

何故にエラー?

ワークシートが1枚存在するブックに対して、↓のマクロを書いて実行したところ、MsgBox は表示されずに、イミディエイトウィンドウに エラー:13 型が一致しません。 と出ました。 Sub Macro1() On Error Resume Next MsgBox Worksheets(1).Range("A1").Valu…

ユーザーがやる一般的な操作を知らない人のマクロ?

最近、とある Q&A サイトを見ていて気になることがあります。 例えば、A1:E10 の範囲内のセルに文字を入力した場合に、先頭1文字目だけを太字にするというイベントプロシージャを書くとき、どのように書くでしょうか? Private Sub Worksheet_Change(ByVal …

初心者フレーズ

ありがちなのを書いてみました。 自動的に そりゃユーザーから見たら自動的かもしれないけど、作る側から見て自動的ってのはありえません。 ファイルを開かずに ファイルを開かずにファイルの中身を読み書きすることはできません。Openと明示的に書いてない…

Book1 だらけ?

パスが違っていても同じブック名のブックを同時に開くことはできない…ってことは、Excel の使い手なら知っているかと思います。 じゃ、この図のようなことはありえない?でも、これは画像をインチキして作ったものではありません。さて、どうやったのでしょ…

VBA って何?

マクロ(VBA と言っても大差ないです)について、どういうものか理解していない質問者っていますよね。 そういう質問者に対しては、まずマクロがどういうものかを説明する必要があると思います。 私が好んで使う表現は、、、 VBA というのは、自分の代わりにEx…

ループの後(その1)

Integer は、ヘルプの「整数型 (Integer)」のトピックに 整数型 (Integer) の変数は、16 ビット (2 バイト) の変数で、 -32,768 〜 32,767 の範囲の値をとります。 と書いてあるとおり、最大値は 32767 です。 # Longで話をしてもいいけど、桁が多くてめんど…

ループの後(その2)

その2は、For Each...Next ステートメントです。 こちらは、コレクションに対するループの場合は Nothing に、Variant配列に対するループの場合は Empty になります。 ループを抜けた後のことは、考えなくていいよってことです。 ↑その1と言っていることが…

Q&A の回答者に必要な能力

…を、あえて3つ挙げるとしたら? 1.洞察力 自分の手に負える質問かどうか見抜くことから始まり、質問者の質問のウラにある問題の本質や質問者がどういう状況に陥っているかまでを察する力。 ただし、頼りすぎは禁物です。突っ走りすぎてしまうと質問者がつ…

文字を Integer 型に入れてみよう

タイトルで、何をバカなことを言っているんだって感じですが、 実は文字を Integer 型に入れることは可能です。 勿論、 Dim X As Integer X = "ビ" なんてのは、ダメダメですけど。 という訳で? 今回のビックリドッキリメカ・・・じゃなくて、コードはコレ…

Byte 型ってメモリの節約になる?

ヘルプを見るまでもなく、 通貨型 (Currency) … 8 バイト 長整数型 (Long) … 4 バイト 整数型 (Integer) … 2 バイト バイト型 (Byte) … 1 バイト ってのは、VBA をやる人なら頭の中に入っていることかと思います。 ということは、メモリをケチケチ使いたいな…

違うセルと言われるけど同じセル

シートの Move 後は、元のシートを参照していたオブジェクト変数は使い物にならなくなるってことを「シート移動後はご用心」に書きましたが、今度はセルのお話です。 セルには Move はないけど、Cut & Paste が同じようなもんなので、これを試してみました。 …

空の文字列と言っても…

VBAの(可変長)文字列は、ちょっとばかしオブジェクト変数と似たところがあります。 いや、Variantの方が近いかな? 普段は全然そんなこと意識しませんけどね。 という訳で?、今日の日記のネタは、StrPtr関数です。 # どういう訳でだよ!ってツッコミは却下…

セルの移動後にもご用心

シートの Move 後は、元のシートを参照していたオブジェクト変数は使い物にならなくなるってことを昨日の日記に書きましたが、今度はセルのお話です。 セルには Move はないけど、Cut & Paste が同じようなもんなので、これを試してみました。 一応、テスト…