bar_1

contents_map

ラベル EXCEL の投稿を表示しています。 すべての投稿を表示
ラベル EXCEL の投稿を表示しています。 すべての投稿を表示

2014年8月24日日曜日

LibreOffice Calc でセルのシングルクォートを削除するには

LibreOffce Calc で、テキストで入力された日付を、日付値に変換する方法。
すなわち、セルの先頭の シングルクォートの削除 の方法。
  1. 変換 (シングルクォートを削除) したいセルを選ぶ
  2. おもむろに、メニューから データ > テキストから列へ(X)... を選択する
  3. 出てきたウィンドウで、右下にある OK を押す
以前、Excel で同じことでハマったことがあったのですが、似たような方法で解決できました。
うまくいかないときは、セルの書式設定が「テキスト」になっていないか、確認してみてください。Standard (標準) や 日付ならたぶんよい。

2011年3月24日木曜日

[Excel][VBA]COUNTIF関数を複数条件で使うには?

■背景と問題点


以前のエントリ ([EXCEL][VBA] COUNTIF関数で複数条件を扱うには?(OR条件編), 2008.)で、COUNTIF関数によるORで結合された複数条件を扱う方法を紹介した。しかし、この方法だと場合によっては以下のような不具合がある:
  • 条件を満たすセルの数を、二重にカウントしてしまう
  • AND条件については触れていない
また、この問題をググってみても、どうもこれといって、分かりやすい解法が載っているサイトを見つけることはできない(2011年3月現在); 多くのサイトでは、SUMPRODUCT関数、COUNTIFS関数(Excel 2007以降)を使った方法が紹介されているが、この方法では、AND条件しか、指定することができない。
上述の以前のエントリは、本ブログに挙げて以来、継続的にアクセスがある。 COUNTIF関数で複数条件を扱うのに困っている人は、多そうだ。
この問題は、根本的には、COUNTIF関数の第2の引数である検索条件の記述の不自由さに由来するものと、考える。なぜならば(ヘルプ・ドキュメントによれば、検索条件には「式」を書くことが出来ることになっているが、実際には)、検索条件には、「TRUEもしくはFALSEを返す、2項限定の(論理)式」しか、指定 することが出来ないからだ。
そこで、上記の問題点を踏まえ、今回のエントリでは
  • 以前のエントリのように、二重にカウントすることはない
  • ブーリアン演算の指定、すなわち:
    • 条件指定は、AND条件・OR条件どちらも同時に使用可能
    • 条件項目は、いくつでも可能
  • VBAマクロは使用せず、既存の関数のみの単純な方法
であるような、一般化したCOUNTIF関数で複数条件を扱う方法を、紹介する。

2010年8月23日月曜日

ExcelVBA漢数字を数値に変換するマクロ


Sep. 2nd, 2011追記:久々に見なおしてみたら、千、百、十などの小さなくらいの処理にバグを見つけた。修正したものを github に格納している。下記のコードも更新した。



またこの修正に伴い、新たに、壱萬などの漢字表記による漢数字もサポートする仕様追加を行った。



官公庁の発表している文書を読んでいるときに、グラフにしてみたいデータが有っ
た。そのデータ部分をコピペで、Excelに張り付けていた。


ところが、そのデータは漢数字で表記されていたのだ。当然このデータは、セル
上で文字列(String)として認識される。グラフを作成するのためには、数値デー
タが必要だ──漢数字を、いちいち手打ちで数値に修正するのはバカバカしい…
下向いちゃうし。

 

このような思いから、Excelで、漢数字を数値に変換する方法についてぐぐってみたところ、似たようなニーズがあったようで、いくつか参考となるVBAマクロを見つけることができた。


しかし、この例の場合は

  • 4桁までの数字+位を表す漢数字という形式

  • 位が固定

  • データの指定方法がセルのみ

などの点で、一般性にかけるように思われた。



そこで、当方で

  • 二千十、二〇一〇、2千十、いずれの表記も可

  • 〇~京の単位まで、柔軟に使用可

  • 引数は、セル、もしくは文字列いずれも使用可


であるような、マクロ関数(Function): STRINGNUMBER を作ってみた。




Attribute VB_Name = "KanNum"
'''' KanNum.bas
'
'
'Author: mephistobooks (http://voidptr.seesaa.net)
'Date: 2010 Aug. 13
'Updated: Sep. 1st, 2011 bugfix (千, 百, 十)
'
''' as use stricts in Perl;
Option Explicit
'Private Const DEBUG_KANNUM = True
Private Const DEBUG_KANNUM = False
'NAME
'  STRINGNUMBER
'
'SYNOPSIS
'  =STRINGNUMBER(v)
'  v は、漢数字で書かれた、セルまたは文字列
'
'
'DESCRIPTION
'  漢数字を数値に変換する。数値を漢数字に変換する関数:NUMBERSTRING の逆を行う。
'  漢数字は、京の単位まで指定できる。
'  漢数字の指定方法は、セルまたは文字列で指定できる。
'  漢数字の表記は、下記の例のいずれにも対応:
'
'  例.
'       STRINGNUMBER("一九七六") => 1,976
'   STRINGNUMBER("千九百七十六") => 1,976
'        STRINGNUMBER("56万3千") => 563,000
'  STRINGNUMBER("参阡伍百萬壱拾") => 35,000,010
'
'REFERENCES
'  Q.“Excelで漢数字を数値に変換する方法を教えてください。”
'  http://q.hatena.ne.jp/1268555767
'
Public Function STRINGNUMBER(ByVal varcl As Variant) As Variant
'''
Dim str As String       'kanji-number string (working variable)
Dim str_org As String   'kanji-number string (original)
'
Dim tmp As String
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''' (0) Initialize the variables
'
tmp = TypeName(varcl)
If DEBUG_KANNUM Then
Call MsgBox("TypeName(varcl)[" & tmp & "]" & vbCrLf & _
"str[" & str & "]")
End If
' Process the argument due to its type.
If TypeName(tmp) = "String" Then
str_org = varcl
Else
str_org = varcl.Value
End If
'Kanji-number string.
str = str_org
If DEBUG_KANNUM Then
Call MsgBox("TypeName(varcl)[" & tmp & "]" & vbCrLf & _
"str[" & str & "]")
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Algorithm:
'
'*Assumption
'  assume that kanji-number string (漢数字文字列) consists of three type of
'  number string: compound units, semi-compound units, and literal
'  numbers.
'
'  compound units (京,兆,億,万) consists of semi-compound units
'  and literal number string.
'
'  semi-compound units (千,百,十) consists of themselves (ex. 千十),
'  and also they sometimes includes literal number string (ex. 3千4百).
'
'  literal number string (〇~九) is able to convert to number (value)
'  directly.
'
'*Way of getting the value of kanji-number string
'  generate the expression from kanji-number string like the following:
'    ((n_1)億)+(n_2)万+(n_3))
'  where n_? is a*1000+b*100+c*10+d, and a-d here indicates 0-9.
'
'  after the step (4), we can obtain the above expression which
'  consists from only numbers, parentheses, product(*), and addition(+).
'
'  and finally, the value is obtained by evaluation of the generated
'  expression at the step (5)
'
'''' (1) Normalize the value.
'  `normalize' means that hankaku, and all characters of
' [0-9],[〇-九] to [0-9].
'
str = StrConv(str, vbNarrow) '半角
'for semi-compound units
str = Replace(str, "拾", "十")
str = Replace(str, "阡", "千")
str = Replace(str, "萬", "万")
'for the literal number strings.
str = Replace(str, "九", "9")
str = Replace(str, "八", "8")
str = Replace(str, "七", "7")
str = Replace(str, "六", "6")
str = Replace(str, "五", "5")
str = Replace(str, "伍", "5")
str = Replace(str, "四", "4")
str = Replace(str, "三", "3")
str = Replace(str, "参", "3")
str = Replace(str, "二", "2")
str = Replace(str, "弐", "2")
str = Replace(str, "一", "1")
str = Replace(str, "壱", "1")
str = Replace(str, "〇", "0")
'''' (2) Structurize for the compound units: 京,兆,億,万.
'
'  (.*)兆+(.*)億+(.*)万+(.*)
'
str = "(" + str
'
str = Replace(str, "京", ")京+(")
str = Replace(str, "兆", ")兆+(")
str = Replace(str, "億", ")億+(")
str = Replace(str, "万", ")万+(")
str = str + ")"
''' (3) Numerize the value
'semi-compound units
str = Replace(str, "千", "*1000+")
str = Replace(str, "百", "* 100+")
str = Replace(str, "十", "*  10+")
'compound units
str = Replace(str, "京", "*10000000000000000+")
str = Replace(str, "兆", "*    1000000000000+")
str = Replace(str, "億", "*        100000000+")
str = Replace(str, "万", "*            10000+")
''' (4) correct the expression of the value.
str = Replace(str, "()", "0")
str = Replace(str, "++", "+")
str = Replace(str, "+)", "+0)")
str = Replace(str, "(*", "(1*")
str = Replace(str, "+*", "+1*")
If DEBUG_KANNUM Then
Call MsgBox("org:" & str_org & vbCrLf & "str:" & str)
End If
''' (5) Eval the generated expression!
STRINGNUMBER = Application.Evaluate(str)
End Function


各構成単位ごとに、丸括弧でくくることが、みそだ。
最終的に、漢数字部分は数字に置き換えられ、数式の形になる。そして、それがApplication.Evaluate()により、数値に変換される。


Have fun!!


2010年8月13日金曜日

VBAのドキュメントの目次一覧

Microsoftのヘルプ機能は、OSのそれにしろOfficeアプリケーションのそれにし
ろ、まったくひどいしろものだ。なにしろ、知りたい機能で検索しても当該ページがで
てこない。
また、このヘルプ・ドキュメントそのものについても、同じ類のことがいえる:
一覧性が非常にひくいのだ──5万数万もの高い金を取りながら、電子マニュア
ルしか存在しないためだ。

最近、立て続けにそんな経験をしたので、ここにExcel2003 のVisual Basic Editor
のヘルプの目次をテキスト形式で一覧にし、示すこととする。これにより、マニュアル全体
を俯瞰することができ、Googleによってインデックス化されれば、検索性も増すであろう。

対象は、Excel2003のVisual Basic Editorのヘルプメニューを開いたときに出て
来るドキュメントだ。これらは開いたときの順番の通りに、項目を挙げている。
本来的には、順番で読むのに適さないが、資料としてこのままとする。

凡例
このテキストでは、■-□-◆の順に、ドキュメントの階層を表す。■がトップレ
ベルだ。
◆A-Zは、必ずしも、AからZまでの項目があるわけではない;実際には歯抜けと
なる項目が存在する。
��?)は、?アイコンを示す。
項目右端の★は、読むべき注目を表す。基礎的な概念について述べている項目に
付した。というのも、資料は必ずしも理解に適した順番で配列されているわけで
はないのだ。階層構造についても、同じことが言える。機会があれば、VBA版
『プログラミング言語C』を書いてみたい。


Visual Basic Editor のヘルプの目次一覧

■Microsoft Excel Visual Basic リファレンス
 □(?)Microsoft Office Excel オブジェクト モデル
 □新機能

  ◆(?)新しいオブジェクト
  ◆(?)新しいプロパティ(アルファベット順)
  ◆(?)新しいプロパティ(オブジェクト順)
  ◆(?)新しいメソッド(アルファベット順)
  ◆(?)新しいメソッド(オブジェクト順)
  ◆(?)新しいイベント
 □プログラミングの概念・・・★
  ◆ブックとワークシート
  ◆セルとセル範囲
  ◆コントロール、ダイアログ、ボックス、フォーム
  ◆イベント、ワークシート関数、図形
  ◆他のアプリケーションを使って作業する
 □コレクション
  ◆A-Z
 □オブジェクト
  ◆A-Z
 □メソッド
  ◆A-Z
 □プロパティ
  ◆A-Z
 □イベント
  ◆A-Z
 □列挙
  ◆(?)Microsoft Office Excel の定数


■Microsoft Visual Basic Documentation
 □Visual Basic ユーザー インターフェース
  ◆コマンド
  ◆キー
  ◆メニュー
  ◆その他
  ◆ショートカット
  ◆タブおよびダイアログ ボックス
  ◆ツールバー
  ◆ウィンドウ
 □Visual Basic プログラミングのヒント
  ◆(?)名前の二重定義の回避
  ◆(?)同じ名前のプロシージャの呼び出し
  ◆(?)Property プロシージャの呼び出し・・・★
  ◆(?)Sub プロシージャと Function プロシージャの呼び出し・・・★
  ◆(?)オブジェクト変数の作成・・・★
  ◆(?)再帰プロシージャの作成・・・★
  ◆(?)配列の宣言・・・★
  ◆(?)定数の宣言・・・★
  ◆(?)変数の宣言・・・★
  ◆(?)プロパティ設定時のコードの実行
  ◆(?)コードのループ
  ◆(?)For...Next ループの高速化
  ◆(?)引数の効率的な引き渡し
  ◆(?)関数からの文字列の取得
  ◆(?)オートメーションの概要
  ◆(?)条件付きコンパイルの概要
  ◆(?)名前付き引数と省略可能な引数の概要
  ◆(?)オブジェクト、プロパティ、メソッド、およびイベントの概要・・・★
  ◆(?)パラメータ配列の概要・・・★
  ◆(?)適用範囲と参照可能範囲の概要・・・★
  ◆(?)変数の有効期間の概要・・・★
  ◆(?)バリアント型 (Variant)の概要・・・★
  ◆(?)Visual Basic の構文の概要・・・★
  ◆(?)配列の使い方・・・★
  ◆(?)定数の使い方・・・★
  ◆(?)データ型の効率的な使い方
  ◆(?)Do...Loop ステートメントの使い方・・・★
  ◆(?)For Each...Next ステートメントの使い方・・・★
  ◆(?)For...Next ステートメントの使い方・・・★
  ◆(?)If...Then...Else ステートメントの使い方・・・★
  ◆(?)コードでのかっこの使い方
  ◆(?)Select Case ステートメントの使い方・・・★
  ◆(?)With ステートメントの使い方・・・★
  ◆(?)Visual Basic の名前付け規則・・・★
  ◆(?)アプリケーション間の連携
  ◆(?)Function プロシージャの記述方法・・・★
  ◆(?)Property プロシージャの記述方法・・・★
  ◆(?)Sub プロシージャの記述方法・・・★
  ◆(?)代入ステートメントの記述方法・・・★
  ◆(?)ファイルへのデータの書き込み・・・★
  ◆(?)宣言ステートメントの記述方法・・・★
  ◆(?)実行可能なステートメントの記述方法
  ◆(?)Visual Basic ステートメントの作成
 □Visual Basic 開発環境
  ◆(?)オブジェクト ライブラリの確認および参照設定の追加
  ◆(?)実行の継続
  ◆(?)ヘルプから使用例をコピーするには
  ◆(?)プロシージャの作成
  ◆(?)コードへの宣言の入力
  ◆(?)特定のステートメントの実行
  ◆(?)プロシージャの検索・・・★
  ◆(?)変数の定義の検索・・・★
  ◆(?)コード内の文字列の置換・・・★
  ◆(?)実行の再開・・・★
  ◆(?)コード内の文字列の検索・・・★
  ◆(?)タイプ ライブラリへの参照設定
  ◆(?)ブレークポイントの設定と解除
  ◆(?)プロジェクト プロパティの設定
  ◆(?)テキスト ファイルのコードへのインポート・・・★
  ◆(?)Visual Basic 環境オプションの設定
  ◆(?)コード ウィンドウの分割
  ◆(?)コード実行の開始・・・★
  ◆(?)コード実行の停止・・・★
  ◆(?)コード実行のトレース・・・★
  ◆(?)構文チェックの設定と解除の切り替え・・・★
  ◆(?)イミディエイト ウィンドウの使用
  ◆(?)オブジェクト ブラウザの使用・・・★
  ◆(?)プロジェクト エクスプローラの使用・・・★
  ◆(?)プロパティ ウィンドウの使用
 □Visual Basic ランゲージ リファレンス
  ◆定数
  ◆データ型
  ◆ディレクティブ
  ◆イベント
  ◆関数
  ◆グループ
  ◆インデックス/一覧
  ◆キーワード
  ◆メソッド
  ◆その他
  ◆オブジェクト
  ◆演算子
  ◆プロパティ
  ◆ステートメント
 □Visual Basic アドイン モデル
  ◆コレクション
  ◆イベント
  ◆メソッド
  ◆オブジェクト
  ◆プロパティ
 □Microsoft Forms リファレンス
  ◆(?)Microsoft Forms オブジェクト モデルの全体像
  ◆Microsoft Forms デザイン リファレンス
  ◆Microsoft Forms 開発者へのヒント
  ◆Microsoft Forms オブジェクト リファレンス


■Microsoft Office Visual Basic リファレンス
 □(?)Microsoft Office オブジェクト モデル
 □新機能
  ◆(?)新しいオブジェクト
  ◆(?)新しいプロパティ (アルファベット順)
  ◆(?)新しいプロパティ (オブジェクト順)
  ◆(?)新しいオブジェクト (アルファベット順)
  ◆(?)新しいオブジェクト (オブジェクト順)
 □プログラミングの概念
  ◆(?)Microsoft Office ソリューション開発者向けのセキュリティ情報
  ◆Office コマンド バーを使用する
  ◆Office アシスタントを使用する
  ◆(?)コレクションからオブジェクトを取得する
  ◆(?)OLE プログラム ID
  ◆(?)MSDN で MODI VBA のリファレンスを検索する
 □コレクション
  ◆A-Z
 □オブジェクト
  ◆A-Z
 □メソッド
  ◆A-Z
 □プロパティ
  ◆A-Z
 □イベント
  ◆A-Z
 □列挙
  ◆(?)Microsoft Office の定数



References
Microsoft Excel 2003; "Visual Basic のヘルプ"; Microsoft, メニュー>ヘルプ(H)

2008年10月14日火曜日

[EXCEL][VBA] COUNTIF関数で複数条件を扱うには?(OR条件編)



2011年3月24日追記:このエントリは、より一般化された方法によって 改善された

COUNTIF関数は、次のような形式で範囲で指定されたセルの中から、条件を満たすセルの個数をカウントするものである:

=COUNTIF(範囲,検索条件)


ここで、「検索条件」とは

計算の対象となるセルを定義する条件を数値、式、セル参照、または文字列で指定します。
たとえば、検索条件は 32、"32"、">32"、"Windows"、または B4 のようになります
(式および文字列を指定する場合は半角の二重引用符 (") で囲む必要があります)。

[Microsoft Excel ヘルプより]


ところで、この検索条件が複数(OR条件)である場合は、どうしたらよいのだろうか?
単純に、次のようにすればいい:

=COUNTIF(範囲1, 検索条件1)+COUNTIF(範囲2, 検索条件2)





2008年5月28日水曜日

Excel VBA: シート名から目次を自動生成する

Excelで仕様書・設計書を書いているエンジニアは、相当数にのぼると考えられます。タイトルページ、変更履歴、目次、インタフェース、アーキテクチャ、機能一覧、、、。目次なんて、勝手に作ってほしいですよね。ねっ。WORDなら、できるんだし。


今回はそんなとき役に立つ以下のトピックについて、書いてみたいと思います:


  1. 各シートに、ページ・タイトルを設定する

  2. ページ・タイトルの一覧をリスト・アップし、目次を自動生成する

  3. このとき、目次のページ・タイトルをクリックすると、当該ページにジャンプする





1. 各シートにページ・タイトルを設定する



今回は、以下のような仕様でいこうと思います:
  • ページ・タイトルは、シート名と同一とする
  • 各シートのA1セルに、ページ・タイトルを表示する
    当然、シート名を変えたときは自動的に追随するものとします。
  • また各シートへのタイトル設定は、自動でできる



これらは、以下のようなコードで、実現できます:
'name: insert_titles
'date: May 28th, 2008
'author: http://voidptr.seesaa.net/
'desc: 各シートにタイトルを設定する
'
'
Public Sub insert_titles()
Dim ii As Integer

For ii = 1 To ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets(ii).Range("A1").Value _
= "=RIGHT(CELL(" & """" _
& "filename" & """" _
& ",A1), LEN(CELL(" & """" _
& "filename" & """" _
& ",A1))-FIND(" & """" _
& "]" & """" _
& ", CELL(" & """" _
& "filename" & """" _
& ",A1)))"
Next ii
End Sub



シートごとに、A1セルの値を設定しているだけです。

シート名は、Excelの関数cell()から得ています。

ただしcell("filename",A1)だけでは、
フルパス+[xlsファイル名]+シート名

のかたちであるため、シート名の部分だけRIGHT()、LEN()、FIND() で切り取っています。

cell関数を使用しているため、シート名を変更したときは、自動的にタイトルも変わります。


ちょっとわかりにくい点として、ダブル・クォート(”)が4つ、連続して書かれている箇所があります。
これは、文字列としてのダブル・クォートです。

  

2. 目次を自動生成する

ここでは、以下のような仕様で行こうと思います。
  • 目次のページのシート名は、「目次」または「Contents」とする
  • 目次ページより左側にあるシート、および目次ページ自体は、目次に含めない
  • 目次ページには、名前付セル:TITLE_LISTNIG を用意し、このセルから下に向かってページ・タイトルを羅列していく
  • 羅列されたページ・タイトルをクリックすると、そのシートにとぶ



これらは、以下のようなコードで実現されます。
'name: make_contents
'date: May 28th, 2008
'author: http://voidptr.seesaa.net/
'desc: 目次をつくる
'
Public Sub make_contents()
'
Const PAGE_TITLE = "A1"
Const START_LISTING = "TITLE_LISTING"

'
Dim is_after_contents As Boolean
Dim num_sheets As Integer
Dim num_skips As Integer
Dim ii As Integer

is_after_contents = False
num_sheets = ThisWorkbook.Sheets.Count
num_skips = 1

''' list the title pages.
For ii = 1 To num_sheets
'clear old list item.
Range(START_LISTING).Offset(ii).Value = ""


'count the pages before contents.
If is_after_contents = False Then
num_skips = num_skips + 1
End If


'list a item.
If ThisWorkbook.Sheets(ii).Name = "目次" _
Or ThisWorkbook.Sheets(ii).Name = "Contents" _
Then

is_after_contents = True

Else
If is_after_contents Then
Range(START_LISTING).Offset(ii - num_skips).Value _
= "=hyperlink(" _
& """" & "#" _
& "'" _
& ThisWorkbook.Sheets(ii).Range(PAGE_TITLE).Value _
& "'" _
& "!A1" _
& """" _
& "," _
& """" _
& ThisWorkbook.Sheets(ii).Range(PAGE_TITLE).Value _
& """" _
& ")"
End If
End If

Next ii

End Sub



注意としては、セルの名前:TITLE_LISTINGは自分で定義すること。


このマクロを実行すると、目次シートのTITLE_LISTINGセルから下に向かって、ページ・タイトルがずらっと表示されると思います。
各ページ・タイトルは、HYPERLINK関数を利用して表示されているので、クリックすると、実際のページに飛びます。



わかりにくい点として、ダブル・クォートでかこまれたシングルクォートがあると思います。これはなぜ必要か?

シート名によっては、参照がうまくできなくなる場合があるからです。(ハイフンを含んだシート名=ページ・タイトルで試してみて。)
HYPERLINK関数の仕様です。



お好みで、この目次ページに「更新」ボタンなどを定義し、押下したらmake_contents()が実行されるようにしたらよいでしょう。





2008年5月20日火曜日

Excel2003: vbaUnitを使うためのExcelの設定

[Sep. 27th, 2010]追記:2種類のパッケージを混同していたので、記述を修正。
Excel2003の場合、とくに、Visual Basic Applications Extensibility の設定は、いらないのだね。


SourceForgeから、vbaUnit のアドイン・ファイルをダウンロードして来ればいい:
  • http://sourceforge.jp/projects/vbaunit/
  • http://sourceforge.net/projects/vbaunit/

前者は、アドイン(.xla)ファイルが、
後者なら、ReadMeとサンプルもついているよ。(英語だけどね。)

sourceforge.jp版の場合、
ダウンロードしたら解凍して、アドインを組み込めば使えるみたいよ。
ツール>アドイン...>参照...
から、組み込めるよ。
sourceforge.net版の場合、
ダウンロードしたら解凍して、.cls, .basをインポートする。Visual Basic Editorで
ファイル>インポート...
から、インポートできる。

sourceforge.net版のサンプルを試したかったら、Visual Basic Editorから、VBAProject::標準モジュールのVbaUnitMain をまず開いてみて。
それから、イミディエイト・ウィンドウで
prep
run
と、タイプしてみて。

イミディエイト・ウィンドウは、Visual Basic Editorのメニューの
表示>イミディエイト・ウィンドウ
で表示できるよ。

2008年5月1日木曜日

Excel VBA: マクロをテキストファイルに落とす

今日の今日まで知らなかったのだが、EXCEL マクロのソース・コード記述って、テキスト・ファイルに落とせるんだね。いつも、コピペで対応していたよ。

方法は、簡単。

ブラウザ内で、各モジュール配下のオブジェクトを選択>右クリック>ファイルにエクスポート...

で、出力される。

オブジェクトの種類によって、拡張子はいろいろ:.bas, .cls, {.frm, frx} だけどね。
フォームの場合は、ソース・コードそのものとバイナリ・ファイルのペアが出力されるね。
バイナリ・ファイルのほうは、ジオメトリックな情報なんだろうね。