2006/12/19

ADOを使用したデータベースへのアクセス

昔はよくRDOを使ってデータベースへアクセスしていたが,やっぱり今はADOだよなということで調べてみました。一応今回うまく動いたのは下記のソースです。その他はまた調査していきたいなー.

ちょっと遅いなーと思いつつも時間もないのでこれで妥協.時間があるときにでももっと高速バージョンを考えられればと思います.

【事例】
Sub openADO()
'
' openADO Macro
Dim myrec As ADODB.Recordset
Set myrec = New ADODB.Recordset
Dim cnt As String
Dim sql As String

cnt = "DSN=EDA001;UID=EDA001;PWD=EDA001;"

sql = "SELECT * from EDA.M_P_AS"
myrec.Open sql, cnt

'列も自動的に発生する場合は下記のようにする
myrec.MoveFirst
'列の題名をDBのテーブルの列名を使うときは下記のようにする
For k = 0 To myrec.Fields.Count - 1
Cells(1, k + 1) = myrec.Fields(k).Name
Next k
'データ部分を2行目から全部表示する場合は下記のようにする
i = 1
Do Until myrec.EOF = True
For j = 0 To myrec.Fields.Count - 1
Cells(i + 1, j + 1) = myrec.Fields(j).Value
Next j
myrec.MoveNext
i = i + 1
Loop


'列を明示的に表示していきたいときには下記のようにすると良い
'myrec.MoveFirst
'i = 1
'Do Until myrec.EOF = True
'Cells(i, 1) = myrec.Fields(0).Value
'Cells(i, 2) = myrec.Fields(1).Value
'myrec.MoveNext
'i = i + 1
'Loop

myrec.Close
Set myrec = Nothing

End Sub

【解説】

上記はお約束のODBCからの接続なのでODBCの設定が必要です.そのうちこれの別途blogを書いておいたほうが良いかな(最近の忘却レベルは異常だ).

題名を表示するforルーチン,データを表示するforルーチンが別々に必要なところが注意.また、個人的に新たにわかったネタとしては"myrec.MoveFirst”でデータを一番初めに戻せるのでさらにfor文でデータを再度描きなおせるなーなどとプチ喜びがありました。

2006/12/10

埋め込みグラフを作る その11(フォントサイズ変更)

埋め込みグラフを作る その10(グラフに凡例をつける)

グラフ作成シリーズも架橋に入ってきました.今回は凡例をつける方法です.では,ちゃっちゃと行きましょう.

【事例】
Sub Graph_Legend_Make()

With ActiveSheet.ChartObjects.Add(50, 100, 300, 200).Chart
.SetSourceData Sheets("sheet1").Range("A3:D6")
.HasTitle = True
.ChartTitle.Text = "在庫調査"
End With

ActiveSheet.ChartObjects.ShapeRange.Name = "test"
With ActiveSheet.ChartObjects("test").Chart

.HasLegend = True
.Legend.Position = xlLegendPositionBottom
End With

End Sub

【解説】
結構簡単です.凡例の設置する場所は以下のように設定できます.

xlLegendPositionCorner 隅
xlLegendPositionRight 右
xlLegendPositionTop 上
xlLegendPositionBottom 下
xlLegendPositionLeft 左

楽勝楽勝.

埋め込みグラフを作る その9(グラフに軸ラベルをつける)

前回タイトルをつけたので,今度は軸ラベルをつけましょう.いろいろな種類があると思うのでオーソドックスな感じからタイトルをつけていきたいと思います.

【事例】
Sub graph_label_make()

With ActiveSheet.ChartObjects.Add(50, 100, 300, 200).Chart
.SetSourceData Sheets("sheet1").Range("A3:D6")
.HasTitle = True
.ChartTitle.Text = "在庫調査"
End With

ActiveSheet.ChartObjects.ShapeRange.Name = "test"

With ActiveSheet.ChartObjects("test").Chart.Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "y軸"
.AxisTitle.Orientation = xlVertical
End With

End Sub

【解説】
上記のようにすると,y軸にラベルが入ります.軸の場所を指定するのはWithステートメントの.axis(xlValue, xlPrimary)のところを変更すればいくらでも書くことが出来ます.以下にその中身を示します.

カッコ内の最初の項目
xlCategory 項目軸(x軸)
xlValue 数値軸(y軸)
xlSeriesAxis 系列軸(3Dグラフ作成時)

カッコ内の2つ目の項目
xlPrimary 第1軸
xlSecondary 第2軸

上記のような内容を1つづつ追加していけば全ての軸にラベルを設置することが出来るようになると思います.お試しあれ.

また,.AxisTitle.Orientationで文字列の方向を変更できます.-90~90度までか以下のように設定します.

xlDownward 下へ
xlHorizontal 水平
xlUpward 上へ
xlVertical 垂直

2006/12/07

オートフィルみたいにするマクロ

たとえば,ピボットテーブルで同じ列に2つ変数を設定した場合、一番最初の方の変数のほうが空白となってしまいます.印刷目的の場合はきれいに見えるのですがこれを使ってマクロを組もうとすると結構不便なのでその空白を埋めるマクロです。

【例題シート】
スプレッドシート


ピボッドテーブル



ピボットテーブルをコピーしたシート


【事例】
Sub auto_fill()
For i = 2 To 7
If Cells(i, 1) <> "" Then
mc = Cells(i, 1)
ElseIf Cells(i, 1) = "" Then
Cells(i, 1) = mc
End If
Next i

End Sub()
【解説】
うまくいくと以下のようになります.

どうでしょう.こんなこと出来たらうれしくないですかねぇ.ぼくは結構うれしいのでUpしてしまいました.

2006/12/03

埋め込みグラフを作る その8(グラフにタイトルをつける)

徐々に埋め込みグラフ作成に架橋に入ってまいりました.今回はタイトルをつけてみましょう.前回のマクロに肉付けします.

【事例】
Sub Second_graph_make()

With ActiveSheet.ChartObjects.Add(50, 100, 300, 200).Chart
.SetSourceData Sheets("sheet1").Range("A3:D6")
.HasTitle = True
.ChartTitle.Text = "在庫調査"
End With

ActiveSheet.ChartObjects.ShapeRange.Name = "test"

With ActiveSheet.ChartObjects("test").Chart.SeriesCollection("パスタ")
.ChartType = xlLineMarkers
.AxisGroup = xlSecondary
.MarkerSize = 20
End With

【解説】
.hastitle=Trueとし,次に.charttitle.text="hogehoge"としてやれば良いです.快調快調.

【参考】
タイトルのフォントをいろいろ変えたい場合もあるでしょう.その場合は以下のように処理してあげましょう..hastitleのところに連ねて書いていきます.

まず,フォントをボールドにしたいとき
.ChartTitle.Font.Bold = True
ちなみにイタリックにしたい場合は想像通りitalicとします.

フォントのサイズを変えたい場合
.ChartTitle.Font.Size = 20

ま,こんなかんじで.

埋め込みグラフを作る その7(2軸のグラフ・折れ線のデータマーカーの大きさを変更する)

その6の2軸に変更時,折れ線グラフにしたがこのデータマーカーの大きさを変更するのもそれほど大きな変更がなくても大丈夫.以下に事例を示します.

【事例】

Sub Second_graph_make()

With ActiveSheet.ChartObjects.Add(50, 100, 300, 200).Chart
.SetSourceData Sheets("sheet1").Range("A3:D6")
End With

ActiveSheet.ChartObjects.ShapeRange.Name = "test"

With ActiveSheet.ChartObjects("test").Chart.SeriesCollection("パスタ")
.ChartType = xlLineMarkers
.AxisGroup = xlSecondary
.MarkerSize = 20
End With

【解説】
Withステートメントのところに「.MarkerSize = ??」のようにしてサイズを設定することができます.

【参考】
データマーカーのスタイルを変更したい場合は以下の通り.
.MarkerStyle = xlMarkerStyleDiamond

マーカースタイルの種類













xlMakerStyleAutomatic自動マーカー
xlMakerStyleCircle円形
xlMakerStyleDash長い棒
xlMakerStyleDiamondひし形
xlMakerStyleDot短い棒
xlMakerStyleNoneマーカーなし
xlMakerStylePicture画像
xlMakerStylePlus
xlMakerStyleSquare四角
xlMakerStyleStarアスタリスク
xlMakerStyleTriangle三角
xlMakerStyleSyleX×印つき四角

埋め込みグラフを作る その6(2軸のグラフにする)

その5にちょっと継ぎ足すだけで2軸のグラフを作成することができます.以下に示します.

【事例】
Sub Second_graph_make()

With ActiveSheet.ChartObjects.Add(50, 100, 300, 200).Chart
.SetSourceData Sheets("sheet1").Range("A3:D6")
End With

ActiveSheet.ChartObjects.ShapeRange.Name = "test"

With ActiveSheet.ChartObjects("test").Chart.SeriesCollection("パスタ")
.ChartType = xlLineMarkers
.AxisGroup = xlSecondary
End With

結構簡単に2軸にすることができました.これは使える(メモメモ).
End Sub

2006/11/26

埋め込みグラフを作る その5(特定のグラフの系列だけグラフ種類変更)

非常に良くあることですが,ひとつの系列だけ(前回の例で言えばパスタの系列)のグラフ種類を変えたい場合があります.こんなときは以下の事例が役に立つと思います(例としては一連のデータを用いたマクロで…).

【事例】
Sub graph_make()

With ActiveSheet.ChartObjects.Add(50, 100, 300, 200).Chart
.SetSourceData Sheets("sheet1").Range("A3:D6")
End With

ActiveSheet.ChartObjects.ShapeRange.Name = "test"

With ActiveSheet.ChartObjects("test").Chart.SeriesCollection("パスタ")
.ChartType = xlLineMarkers
End With

End Sub

【解説】
赤字のように追加することでパスタの系列のみグラフの種類を変更することができます.あ~便利,便利.

埋め込みグラフを作る その4(埋め込みグラフの削除)

たとえば,グラフをgifファイルにしてそのファイルをWebで公開するときに同じデータを使って違う種類のグラフや列だけちょっと変えて表示したい場合などには一回そのグラフを削除して再度違う種類のグラフを作成したいということがありました.そういった場合は以下のようにするとおいしかったので示しておきます.埋め込みグラフを削除する方法です.グラフ作成は前回までのと同様のコードを用います.

【事例】
Sub graph_delete()
With ActiveSheet.ChartObjects.Add(50, 100, 300, 200).Chart
.SetSourceData Sheets("sheet1").Range("A3:D6")
End With

ActiveSheet.ChartObjects.ShapeRange.Name = "test"

ActiveSheet.ChartObjects("test").Delete

End Sub

【解説】
赤字のように,"オブジェクト.Delete"で消すことができます(ここでもファイル名の設定が役に立ってます).実際にはファイル名の設定をしなくても"ActiveSheet.ChartObjects.ShapeRange.Delete"のようにしても消せると思います(僕は消せました).削除ものはちょっとどきどきするので慎重に行きましょう.

埋め込みグラフを作る その3(グラフの種類の変更)

前回,グラフの名前の設定と取得の方法を理解したのでそれを使ってグラフの種類の変更をしてみようと思う(前回の事例2のコードと同様ですが…).

【事例】
Sub graph_kind_change()
With ActiveSheet.ChartObjects.Add(50, 100, 300, 200).Chart
.SetSourceData Sheets("sheet1").Range("A3:D6")
End With

ActiveSheet.ChartObjects.ShapeRange.Name = "test"

With ActiveSheet.ChartObjects("test").Chart
.ChartType = xlLineMarkers
End With


End Sub

【解説】
グラフの種類を変更する場合は基本的には"オブジェクト.ChartType"で指定することができる.ちなみに以下にグラフの種類を書き綴っていく(気が向いたときにね).

xlLine 折れ線
xlXYXcatter 散布図
xColumnClustered 集合縦棒
(続く…)


こんな感じで結構簡単にグラフを変更することができます.お試しを

2006/11/25

埋め込みグラフを作る その2(グラフ名の取得/設定)

いつも非常に悩むのはこれで,グラフ名を取得もしくは名前をつけられれば…ということが良くあります(複数の埋め込みグラフを作ったときなんかは特にね).そんなときにはこれが良く効きます.

【事例1(Indexを取得)】
Sub graph_make()

With ActiveSheet.ChartObjects.Add(50, 100, 300, 200).Chart
.SetSourceData Sheets("sheet1").Range("A3:D6")
End With

comp = ActiveSheet.ChartObjects.ShapeRange.Name
MsgBox comp

End Sub

【解説1】
上記のようにすると作った埋め込みグラフのIndex名を取得することができます.これで再度グラフをいろいろデコレーションしたい場合にも使いまわししやすいので良いです.完璧.

【事例2(グラフ名を設定して取得する)】
Sub graph_make()

With ActiveSheet.ChartObjects.Add(50, 100, 300, 200).Chart
.SetSourceData Sheets("sheet1").Range("A3:D6")
End With

ActiveSheet.ChartObjects.ShapeRange.Name = "test"

With ActiveSheet.ChartObjects("test").Chart
.ChartType = xlLineMarkers
End With

End Sub

【解説2】
上記のようにするとグラフ名を"test"として設定できますのでこれもまた,いろいろと使いまわすのに非常に便利となります(ちなみに上記の例題では,グラフ名を取得してそれを用いて棒グラフから折れ線グラフに変更しています).ぜひぜひお試しを。。。

埋め込みグラフを作る その1(基本グラフ作成)

ついにこの禁断のお題に足を踏み入れてしまいました。その?まで続くのか楽しみ(すぐ終わってしまったりして…).まずは,基本的な埋め込みグラフの作り方から.


【事例】
以下のデータを使用してグラフを作ることを考えます.シート名はsheet1と仮定します.






Sub graph_make()


With ActiveSheet.ChartObjects.Add(50, 100, 300, 200).Chart
.SetSourceData Sheets("sheet1").Range("A3:D6") , PlotBy:=xlRows
End With


End Sub


【解説】
埋め込みグラフ作成には,ChartObjectsコレクションのAddメソッドを使うとできます.Addの後の4つの数字は(Left, Top, Width, Height)を表しています.これだけだととってもシンプルですねぇ.グラフってとっても奥が深いように感じられて…これからどんどん複雑になっていきます.

ちなみに,上記のマクロがうまく動くと以下のようなグラフが書けると思います.






ちなみに,.SetSourceDateのところの(Source, Plotby)のところのSourceはグラフの元データのセル範囲,Plotbyはデータ系列を行列のどちらにとるかを示します.列方向はxlolumns, 行方向はxlRowsとします.

ワークシート名の変更

これも基本ですがいろいろ使えて便利.

【事例】
Sub Add_sheet()

Worksheets.Add Before:=Worksheets(1)
ActiveSheet.Name = Format(Date, "mm月dd日")

End Sub

【解説】
左から1つ目のシートの前に1枚付け加えて,名前を今日の日付で名前変更されるマクロとなります.ダイレクトに名前を入れても全然問題なし(ただし,その場合名前をダブルクォーテーションで囲む).

2006/11/22

Excel VBAからShellを実行

時々,DOSのシェルが起動できれば…というときがあります.そんな時は以下のようにするとできます.

【事例】
Sub shell_exe()

Shell("mspaint.exe",vbNormalFocus)

End Sub

【解説】
上記のようにすると”ペイント”アプリケーションが起動されます.そのうちもっと詳しい説明をしていきたいとは思ってます.今日はとっても眠いので…これで

クリップボートの中身を削除

以下の命令を使うとクリップボードの中身を削除してくれるので動作が軽くなります.

【事例】
Application.CutCopyMode = False

【説明】
ちなみに,Trueとするとクリップボートの中身を残したままにできるのでクリップボードの中身を別のアプリケーションやマクロに使用する場合にはTrueとして使えます.ただし,クリップボードの中身が大きいと処理に時間が掛かってしまう可能性がありますのでご注意を.

Excelマクロ自動起動・終了 その4(警告・質問等表示しない)

このマクロの自動起動・終了のシリーズの最後として自動で全てをやろうとしたときExcel様の小さな親切大きなお世話として勝手に警告などを表示してExcelマクロが途中中断してしまう場合があり非常に困る場合があります.そういった場合には以下のようなコマンドを実行してやると警告等を無視することができます.

【事例】
Sub warning()

Application.DisplayAlerts = False '警告を出さない

'心置きなく警告が発生してしまうようなマクロを書く

Application.DisplayAlerts = True '警告を出す設定に戻す

End Sub

【解説】
上記の命令で,警告のOn, Offができます.Falseが警告を出さない.Trueが警告を出すようになります.注意としては,あまり良い命令ではないと思うので必要なところだけで局所的に使うのが良いでしょう.マクロ全体で警告を出さないようにしてしまうとようにするといろいろ弊害も出てしまう可能性も考えられるので.

Excelマクロ自動起動・終了 その3(ファイルをセーブせず閉じる)

その2で自動で閉じる命令を実施しましたがそのとき,セーブせずにファイルを閉じたい場合がありますがその場合は次のような命令を使います.

【事例】
ActiveWorkbook.Saved = True

【解説】
上記のような命令を書くとファイルを自動で閉じる場合もセーブしますか?という内容は聞かれずファイルを閉じることができます(つまり,この命令はExcelファイルにセーブさせたふりをさせるようだ).ちなみに,セーブして閉じる場合はActiveWorkbook.SAVEなどとして上書き保存できます(老婆心ながら複数ファイル開いている場合は,ActiveWorkbookの部分がブック名などとなるのでご注意を).

眠いなー.そろそろ寝たい.

2006/11/21

Excelマクロ自動起動・終了 その2(自動終了)

前回のExcelファイル起動後自動マクロ実行をしたら、最後マクロ終了後自動で終了してくれる命令があると…といった場面に出くわすと思います.そんなときは以下の命令で可能です.

【事例】
Sub auto_open()

'マクロをいろいろ書きます

Application.Quit

End Sub

【使い方】
上記のようにマクロの最後のところにApplication.Quitとすると自動でExcelファイルが終了します.このモジュールとWindowsについている「タスク」機能を使えば簡単に定期的にエクセルマクロを実行終了ができるのでいわゆるUnixでいうところのShellとcronのようなことがWindowsでもなんとなくできます(多少の不自由はあるのですが).そのうちタスク機能についても触れられればとは思うのですが一応このブログはExcel VBAとしているので書くべきかどうか迷ってます.違うブログを起こしたほうが良いのではないかと思ってます.

Excelマクロ自動起動・終了 その1(自動起動)

かなり基本的な内容ですが,久しぶりにマクロを書くとついうっかり忘れてしまって”どうやるんだっけ?”となってしまうので一応記入しておこう…

【事例】
sub auto_open()
'以下にマクロを記入します

end sub

【使い方】
マクロ名をauto_openとすることでExcelファイルを開くと同時にその中に書かれているマクロが自動実行されます.

CellやRangeの指定方法のいろいろ

いきなり難易度が低くなったようにも見えますが,自分が意外と苦労するとこにこのことがあります.いろいろあると思うので思いついたときに付け加えていこうと思います。簡単なのから順に

【事例】
cells(1,2).select 'B1を選択
Range(Cells(1, 2), Cells(2, 3)).Select 'B1-C2までを選択

最終列の取得

以前最終行を取得するマクロを作成したが,やっぱり最終列を取得するマクロもほしいなと…多分これは2種類の表示方法があると思う.通常のシート表示だとH1のcellのような表示の場合列としてはH列として取得したいし,R1C1のような表示だとH1の場合Hは8列目のため"8"を取得したいです.

【例題Excelシート】


【事例1(Hを取得する)】
Sub last_col()
Range("A1").SelectSelection.End(xlToRight).Select
endcel = ActiveCell.Address
cellend = Mid(endcel, 2, 1)
MsgBox "このシートの最終セル:" & cellend
End Sub

【事例2(8を取得する)】
Sub last_col()
cellend = Range("A1").CurrentRegion.Columns.Count
MsgBox "このシートの最終セル:" & cellend
End Sub

【解説】
基本的には最終行を取得する方法を応用することで実現できます.

【注意】
注意としては、列の表示方法として事例1と事例2では得られる値が違うので自分がほしい値で使い分けよう.

2006/11/20

ステータスバーに文字を表示するには(その2:ステータスバーにカウンター表示)

その1を応用すると,ステータスバーにマクロの進行状況を表示することができます.つまり,VBAにはFor文を多用するかと思いますがこれを使用すればよいと思います。たとえば以下のようなコードで…

【事例】
Sub status_display()
Count = 10000
Application.StatusBar = True
For i = 1 To 10000
Application.StatusBar = "ステータスバーに表示中です" & i & "/" & Count
k = k + 1
Next
Application.StatusBar = False
MsgBox "終了"
End Sub

【説明】
その1で書いたマクロを使用してさらにFor文の中に繰り返し数をステータスバーに表示させることによってマクロの進行状況が表示できるようになります.ナイスアイデーア.

ステータスバーに文字を表示するには(その1:ステータスバーに表示するだけ)

ステータスバーに文字を表示(特にfor現在のマクロの進行状況などを表示したい場合なんかありませんか?)する方法が結構簡単にできます。

【事例】
Sub status_display()
Application.StatusBar = True
Application.StatusBar = "ステータスバーに表示中です"
for i=1 to 10000000
k=k+1
next
Application.StatusBar = False
MsgBox "終了"
End Sub

【注意点】

Application.StatusBar = True で表示できるようになります。どうもいきなりApplication.StatusBar = "ステータスバーに表示中です"としても良いようだ。

Falseで表示を消すことができる.

2006/11/19

Excelマクロ実行中の画面をとめる

Excelマクロを実行していると絶えず,画面が命令通りに動作しています.これはこれでおもしろいのですが早く結果が知りたいときにはちょっといらいらします.そんなときには,画面の動きを止めてマクロの結果出力の高速化を計れるおまじないがあります。

【事例】
Sub stop_macro_screen()
Application.ScreenUpdating = False 'これで画面が止まります

'??????いろんなマクロを動作させます?????

Application.ScreenUpdating = True 'これで画面が動きます
End Sub

【使い方】
Application.ScreenUpdatingで画面の動作をコントロールできるようです。Falseで止まって,Trueで動き出すみたいです.良かったよかった(これでマクロがサクサク動く).

埋め込みグラフをgifファイルで保存する

今日は,埋め込みグラフをgifファイルで保存する方法を書きます.これは,Webでエクセルファイルを公開したい場合に重宝しています.タスクとかで埋め込みグラフをgifファイルで吐き出すマクロを実行すればリアルタイムに最新グラフを吐き出すことができるのでとてもよいです.

【事例】
Sub gif_save()
ActiveSheet.ChartObjects(1).Chart.Export "c:\temp\test.gif"
End Sub

【注意点】
ChartObjects(1)の1はグラフの番号を記入します(そのうちこの辺の番号の取得方法などもやっていきたいと思ってますが…できるか?).また,hoge.gifとなっているところをjpgとするとjpgとして保存されるようです.対応しているのは,このほかtifにも対応しているようです(拡張子の部分を変えるだけでOKのようです.とっても便利.).

2006/11/18

Excelブックの保存されているパスを取得する

ブックの保存されているパスがわかると,VBAからファイルなどを作成して保存するときに同一ディレクトリに保存したりするのが楽になると思います。結構簡単に取り出せます.

【事例】
Sub Get_Path()
path_name = ActiveWorkbook.Path
If path_name = "" Then
MsgBox "ブックを1度保存してから実行して下さい"
Exit Sub
End If
MsgBox "ブックのある場所は" & path_name & "です."
End Sub

上記のActiveWorkbook.Pathで取り出すことができます.あとは,煮るなり焼くなりしてください.

配列数を後から入力する(動的配列)

通常,配列は
Dim hairetsu(20) As String
などとして定義して使うが時々配列数をExcelシートの列数などを数えてその総数を灰列数にしたい場合などがある.こういった場合,以下のようにします(いわゆる動的配列というやつです)。

【事例】
Sub 配列()

Dim hairetsu() As String
Dim counter As Integer
Dim i As Integer
count = Range("A1").CurrentRegion.Rows.Count
Redim hairetsu(count - 1)
For i = 0 to count - 1
hairetsu(i) = cells(i + 1, "A").Value
Next

End Sub

配列数がわかっていない場合には,上記のようにすると配列数も完璧にわかるようになる.便利だー.

Excelの関数をVBAで使う

時々、Excelの関数がVBAで使えると楽だなーといった場合があります。こんなときは以下のようにします.

【Excelの状態】


【事例】
Sub excel_funciton()

Cells(1, 2) = Application.WorksheetFunction.Average(Range(Cells(1, 1), Cells(3, 1)))

End Sub

【使い方】
Application.WorksheetFunction.関数名(引数)のように使用します(どうやらApplication.は省略可能のようです).

【マクロ実行後Excelの状態】


結構便利ですよ…

2006/11/16

最終行の取得

ファイルの最終行が何行目になっているのかを調べるマクロです。私はこれができるようになってマクロの作成の幅がすごく広がりました。

【事例1】
Sub last_row()
Range("A1").Select
Selection.End(xlDown).Select
endcel = ActiveCell.Address
cellend = Mid(endcel, 4)
MsgBox "このシートの最終セル:" & cellend
End Sub

【事例2】
Sub last_row()
cellend=Range("A1").CurrentRegion.Rows.Count
MsgBox "このシートの最終セル:" & cellend
End Sub

なんでもないマクロですがこれで最終行が何行目なのかがわかれば、データベースなどから取り出したデータを用いてグラフを書くなどのマクロもイチコロになります.お試しあれ.

VBAでテキストファイルを作る その4(ファイル新規作成)

この前は,すでに作成されているファイルにデータを継ぎ足すといったファイル作成をしたが新規にファイルを作成する方法は以下のようにする。これは,前回がわかればそんなに難しくない

【事例】
Sub fso_txt_create()
Dim fso As New Filesystemobject
Dim txt_create As textstream
Set txt_create = fso.CreateTextFile ("c:\temp\view.htm", forwriting)  'ファイル作成
End Sub

これはそんなに難しくないので…

VBAでテキストファイルを作る その3(ファイル作成)

FSOを使ってテキストファイルを作成することが出来ます.以下にソースコードを示します.

【事例】
Sub fso_txt_create()

Dim fso As New Filesystemobject
Dim txt_create As textstream
Set txt_create = fso.opentextfile("c:\temp\view.htm", forwriting)  'ファイル作成
head = "はなこ" '変数を使って入力する方法を試す
With txt_create
.WriteLine ("これはテストです。") 'テキストを書き込む
.WriteLine (head)
.WriteLine ("hoge")
.Close 'txtstreamオブジェクトを閉じる
End With 'Withステートメントを終了する

End Sub

【注意点】
ファイルを開く場合,.opentextfileメソッドを使うが既にテキストファイルが無いとエラーとなる.また,.opentextfileオブジェクトの2カラム目(今の場合,forwriting)でforreadingとすると読み取り専用で、forwritingで書き込み用で上書き、forAppendingで書き込み用で上書きせずに追記します。

【参考】
WriteLineをWriteにすると改行文字は書き込まれない書き込みをします。

2006/11/15

VBAでテキストファイルを作る その2(ファイル取得)

前回設定したFSO(File System Object)を使用してファイルを取得するマクロを作成.

【事例】
sub fso_file_create()
Dim fso As New FileSystemObject
Dim fso_create As File
Set fso_create = fso.Getfile("C:\temp\test.xls")  'fso_createにtest.xlsファイルを格納
fso_create.move ("C:\test\test.xls") 'testフォルダにファイルを移動
End Sub

【注意】
指定したファイルが存在しない場合,エラーが発生するので注意が必要.

今日は,こんなもんで…

2006/11/14

VBAでテキストファイルを作る その1(設定)

最近興味のあることとして,Excel VBAでシートを介さないでファイル出力をする方法はないだろうか?ということであった。ついに見つけた。FSOメソッドがそれにあたるようだ(ファイルシステムオブジェクトというようだ)。いろいろな設定などが必要なので何回かに分けて書き込んでいきたいと思っている。続くだろうか。。。がんばる。
まず第一に、FSOを使う準備をする。VBEを立ち上げて「ツール?参照設定」を選択してMicrosoft Scripting Runtimeにチェックする。


上記の設定をすることによってシートなどを介することなくテキストファイルを作成することができるようになる(まだ良く調べていないがこれは、WSHの延長上にあるランタイムではないかと思っています)。
今日は眠いのでこれまで。。。