2007/11/09
右からある特定の文字列までの文字列を取り出すマクロ
【事例】
Sub moji()
mojimoji = "test.txt"
Cells(1, 2) = Len(mojimoji)
mojisu = Len(mojimoji)
Cells(1, 3).Select
Selection.ClearContents
For i = mojisu To 1 Step -1
moji_search = Mid(mojimoji, i, 1)
If moji_search = "." Then
' Cells(1, 3) = Left(Cells(1, 1), i) '左からある特定の文字までを取り出したい場合
Cells(1, 3) = Mid(mojimoji, i, mojisu - i + 1) '右からからある特定の文字までを取り出したい場合
Exit For '見つけたい文字列が一番最初に見つかったらfor文は抜けるようにする
End If
Next i
End Sub
2007/11/08
軸の文字列フォーマットを設定する(日付編)
【事例】
With ActiveSheet.ChartObjects("test").Chart.Axes(xlCategory, xlPrimary).TickLabels
.Alignment = xlCenter
.Offset = 100
.Orientation = xlUpward
.NumberFormatLocal = "YYYY/MM/DD hh:mm:ss"
End With
【解説】
ちなみに上記の場合はグラフ名を"test"という風にしています。上記フォーマットだと"2007/11/08 18:03:05"などのフォーマットでラベルが表示されます。比較的役立つ情報かと思います。
2007/11/07
左からある特定の文字列までの文字列を取り出すマクロ~その2~
【事例】
Sub moji()
mojimoji = "test.txt"
Cells(1, 2) = Len(mojimoji)
mojisu = Len(mojimoji)
Cells(1, 3).Select
Selection.ClearContents
serchi_char = "."
moji_search = InStr(1, mojimoji, serchi_char, 1)
Cells(1, 3) = Mid(mojimoji, moji_search)
End Sub
【解説】
基本的にはその1と同じですが右側から検索したい場合は、その1を使用したほうがよいようです。
WEBのデータファイルをEXCEL上に取り込む
その場合,以下のようにしてやると簡単にEXCELにデータを取り出せて楽です.
【事例】
Sub test1()
ThisWorkbook.Activate
Sheets("sheet1").Select
Cells.Select
Selection.ClearContents
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://table.yahoo.co.jp/t?c=2007&a=11&b=01&f=2007&d=11&e=11&g=d&s=4689.t&y=0&z=4689.t" _
, Destination:=Range("A1"))
.Name = "Yahooデータ"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.Refresh BackgroundQuery:=False
End With
End Sub
【解説】
上記のマクロを実行すると,sheet1シートにYahooの2007/11/01~2007/11/11までの株価をデイリーで表示します。
取り出したいデータはWEB上ではデータベースのようになっておりいろいろなパラメータをWEBサーバ側に要求する場合が多いのでその部分を関数にしてやって&でつなぐといろいろとさらに汎用性が広がります.例えばURLの部分を下記のようにします.
一つ注意点としては日付・時間などをWEBサーバに要求する場合はCStr()関数を使用して関数を文字列データへ変換しないとうまくいかないことが多いです.
こんな感じで,Yahooのホームページから株価をExcelにダウンロードすれば株価のトレンドチャートとかを自動でかけるようになると思います(本気でやってないのでどのようになるかは…やられた方,ご報告のほどよろしくお願いいたします.)。
2007/11/06
左からある特定の文字列までの文字列を取り出すマクロ~その1~
【事例】
Sub moji()
mojimoji = "test.txt"
Cells(1, 2) = Len(mojimoji)
mojisu = Len(mojimoji)
Cells(1, 3).Select
Selection.ClearContents
For i = 1 To mojisu
moji_search = Mid(mojimoji, i, 1)
If moji_search = "." Then
' Cells(1, 3) = Left(Cells(1, 1), i) '左からある特定の文字までを取り出したい場合
Cells(1, 3) = Mid(mojimoji, i, mojisu - i + 1) '右からからある特定の文字までを取り出したい場合
Exit For '見つけたい文字列が一番最初に見つかったらfor文は抜けるようにする
End If
Next i
End Sub
2007/07/29
2007/07/27
Excelシートの一部をピクチャーにして画像として保存する方法
【用例】
Sub figure_save()
'パス名取得
Sheets("figure").Select
Cells.Select
With Selection.Font
.Name = "MS Pゴシック"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Cells.EntireColumn.AutoFit
Cells(1, 1).Select
'最終行のチェック
Sheets("figure").Select
Range("B1").Select
Selection.End(xlDown).Select
encel2 = ActiveCell.Address
cend2 = Mid(encel2, 4)
Cells(1, 1).Select
'表全体の選択
Range(Cells(1, 1), Cells(cend2, 5)).Select
'表を図としてコピー貼り付け
Selection.Copy
ActiveSheet.Pictures.Paste.Select
ActiveSheet.Pictures.ShapeRange.Name = "pic1"
'グラフのサイズを取得
ActiveSheet.Shapes("pic1").Select
hei = Selection.ShapeRange.Height
wid = Selection.ShapeRange.Width
Selection.Copy
'チャ−ト枠作成しチャートオブジェクトとして貼り付ける
Set grf = ActiveSheet.ChartObjects.Add(0, 0, wid + 8, hei + 8).Chart
grf.Paste
ggg1 = grf.Name
ggg2 = Mid(ggg1, InStr(1, ggg1, "グ", 1))
'枠線なし
ActiveSheet.ChartObjects(ggg2).Activate
ActiveChart.ChartArea.Select
Selection.Border.LineStyle = 0
'このファイルのありかを調べる
phn = ActiveWorkbook.Path
If phn = "" Then
MsgBox "ブックを1度保存してから実行して下さい"
Exit Sub
End If
'gif保存
gifname = "figure1.jpg"
grf.Export phn & "¥trend_graph¥" & gifname
'仮作成の図形削除
grf.Parent.Delete
Range("A1").Select
'ピクチャーの削除
ActiveSheet.Shapes("pic1").Select
Selection.Delete
Range("A1").Select
End Sub
【解説】
とりあえず追々ということで…
シート内のデータを消去する
【用法】
Sheets("100").Select
Cells.Select
Selection.Delete Shift:=xlUp
Cells(1, 1).Select
【解説】
上記のようにすると、
①シート名100を選択
②シート内の全セルを選択
③全部のデータを削除
④セル1,1を選択する
以上、簡単ですがコピペで簡単に使えるようにしておくのもよいかと思いまして書いてみました。
ADOを使ったデータベース接続でタイムアウト時間を設定する.
【用法】
ADOcon.ConnectionTimeout = 300
ADOcon.CommandTimeout = 300
【解説】
ADOを使用してデータを取り出すときタイムアウトの時間を制御するのは上記のようにすればよいようです。単位は秒になります。これでちょっと重めなデータを取り出すことも出来ます。
2007/07/26
ADOでアクセスするときに検索時間を長くする
【用法】
編集中…
拡張子以外のファイル名を取り出す
filename_get = Activeworkbook.name
とやればfilename_get変数に取り出すことが出来るがこのとき.xls(拡張子)が邪魔になることがある。この拡張子以外のファイル名を取り出す方法を考えました。多分こんな風にすれば出来る。
【用例】
filename = Left(ActivePresentation.Name, InStrRev(ActivePresentation.Name, Chr(46)) - 1)
【説明】
InstRevは右側からChr(46)(これは.[ドット]を表示すASCII番号)の文字のある場所を検索しそれを左側から何文字目かを取り出す関数。これとLeft関数(左側から何文字目までを切り出すか?を示す関数)を合体することで見事拡張子以外のファイル名を取り出すことが出来た。すばらしい。