最近、DBの構造(テーブル名と項目、型)などをExcelのシートに書いておいて、
そこからJava(やC++)のDBアクセスメソッド、
DBを作成するSQLを書いたDDL等を
自動生成したりすることって、多くありませんか?
(そのやり方を知らない人は、出来たら便利だと思いませんか?)
このブログでも、ExcelからStrutsのソース等の自動生成の試案とかについても書いてるし(ここ)JavaやPerlを使って、テストデータを自動生成する例も、こんな記事に出てる。
日本の場合には、
(Excelでシナリオを書くとき)DBに入れる値みたいなのをまとめておいて、
そこからDBに入れるデータを自動生成する(insert文を自動で作る)
とかのノリも、結構あるよね(実際、自分でも、この手のプログラム、書くこと多し)
まあ、最近のトレンドとして、さっきの記事にも出てたけど、自動化ソフトを買うんじゃなくって、Excelとか利用して、作っちゃうって言うのが多いよね。だって、お客さんが、開発ツール、テストツールのお金まで、だしてくれないんだもーん!
さてさて、ここで。。だ!
これらのことをやろうとしたときに、VBAで、必ずといっていいほど使い、それを知らなきゃできないっていう知識がある(逆にいえば、それさえ知ってればできる)。
それをまとめておいくと、こんなかんじ。
1.シーケンシャルファイルの扱い方
VBA(AccessでもExcelVBAでもおなじ)では、テキストファイルの場合、OPEN,PRINT,CLOSE,(入力はLINE INPUT)なんかを使う。
OPEN ファイルパス FOR OUTPUT AS #1 '書き出し用
PRINT #1,buf '出力する。改行してしまう
CLOSE #1
くわしくは、ウィリアムのいたずらの、ここをみよ
ちなみに、ここは、バイナリファイルの読み方、書き方、ここはUTF-8での書き出しがまとめてあるじょ。
2.読み込み行数が分からないので、大きさが変えられる配列をとる
Dim moji() As Stringで、読み込み時、ReDim Preserve moji(moji_su) する。
ここ
あれ、ReDimで2次元以上のときって、制約あった気がするけどなあ。。。
書いてないや
3.Excelシートから値をとってくる
Sheets("シート名").Cells(行番号,桁番号)か、
Sheets("シート名").Range("セルをA1などの形式で")
例:Sheet1のB1をとってくる
Sheets("Sheet1").Cells(1,2) か、
Sheets("Sheet1").Range("B2")
4.あとは文字列操作で、出力内容に加工する
MidとかInStrとかReplaceを使って置き換える。
でも、シーケンシャルファイルの扱い方(とくにバイナリ)とか、ReDimとか、VBAの本に、ぜーんぜん、書いてくれないんだよね。
さらに、ファイル操作についてなんて、もっと見ない気がする。
実際には、それ+文字列操作ばっか使ってるんだけど。。。ウィリアムのいたずらは(^^;)
大村あつしさんとか、いっぱーい!VBAの本出しているのに、そういう、他の言語やSQL自動生成とか、Accessデータから銀行引き落としするためのデータに出力する際に必要なテクニックとか、ぜーんぜん書いてくれてない。
なんでだろう。。
ウィリアムのいたずらなんか、ドキュメントを作成するのと、そこからソースを自動生成することくらいしか、Excelって使わないのに。。
。。。まずい!「コピーするほど、儲かるシステム」開発日記のソフトを仕上げるためにも、使わないといけなかったぞ!忘れてた(わすれるなー!このブログの目的だじょー < 自分)
そこからJava(やC++)のDBアクセスメソッド、
DBを作成するSQLを書いたDDL等を
自動生成したりすることって、多くありませんか?
(そのやり方を知らない人は、出来たら便利だと思いませんか?)
このブログでも、ExcelからStrutsのソース等の自動生成の試案とかについても書いてるし(ここ)JavaやPerlを使って、テストデータを自動生成する例も、こんな記事に出てる。
日本の場合には、
(Excelでシナリオを書くとき)DBに入れる値みたいなのをまとめておいて、
そこからDBに入れるデータを自動生成する(insert文を自動で作る)
とかのノリも、結構あるよね(実際、自分でも、この手のプログラム、書くこと多し)
まあ、最近のトレンドとして、さっきの記事にも出てたけど、自動化ソフトを買うんじゃなくって、Excelとか利用して、作っちゃうって言うのが多いよね。だって、お客さんが、開発ツール、テストツールのお金まで、だしてくれないんだもーん!
さてさて、ここで。。だ!
これらのことをやろうとしたときに、VBAで、必ずといっていいほど使い、それを知らなきゃできないっていう知識がある(逆にいえば、それさえ知ってればできる)。
それをまとめておいくと、こんなかんじ。
1.シーケンシャルファイルの扱い方
VBA(AccessでもExcelVBAでもおなじ)では、テキストファイルの場合、OPEN,PRINT,CLOSE,(入力はLINE INPUT)なんかを使う。
OPEN ファイルパス FOR OUTPUT AS #1 '書き出し用
PRINT #1,buf '出力する。改行してしまう
CLOSE #1
くわしくは、ウィリアムのいたずらの、ここをみよ
ちなみに、ここは、バイナリファイルの読み方、書き方、ここはUTF-8での書き出しがまとめてあるじょ。
2.読み込み行数が分からないので、大きさが変えられる配列をとる
Dim moji() As Stringで、読み込み時、ReDim Preserve moji(moji_su) する。
ここ
あれ、ReDimで2次元以上のときって、制約あった気がするけどなあ。。。
書いてないや
3.Excelシートから値をとってくる
Sheets("シート名").Cells(行番号,桁番号)か、
Sheets("シート名").Range("セルをA1などの形式で")
例:Sheet1のB1をとってくる
Sheets("Sheet1").Cells(1,2) か、
Sheets("Sheet1").Range("B2")
4.あとは文字列操作で、出力内容に加工する
MidとかInStrとかReplaceを使って置き換える。
でも、シーケンシャルファイルの扱い方(とくにバイナリ)とか、ReDimとか、VBAの本に、ぜーんぜん、書いてくれないんだよね。
さらに、ファイル操作についてなんて、もっと見ない気がする。
実際には、それ+文字列操作ばっか使ってるんだけど。。。ウィリアムのいたずらは(^^;)
大村あつしさんとか、いっぱーい!VBAの本出しているのに、そういう、他の言語やSQL自動生成とか、Accessデータから銀行引き落としするためのデータに出力する際に必要なテクニックとか、ぜーんぜん書いてくれてない。
なんでだろう。。
ウィリアムのいたずらなんか、ドキュメントを作成するのと、そこからソースを自動生成することくらいしか、Excelって使わないのに。。
。。。まずい!「コピーするほど、儲かるシステム」開発日記のソフトを仕上げるためにも、使わないといけなかったぞ!忘れてた(わすれるなー!このブログの目的だじょー < 自分)