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

軸の文字列フォーマットを設定する(日付編)

グラフ作成時のX軸のラベルを垂直方向に並べる ことをしたいときには以下のようにします。

【事例】
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~

前に,ある文字列のある文字以降の文字列を取り出す方法を示しましたが文字列検索がうまく出来なかったのでfor文を使用して取り出すようにしていました.文字列検索の関数が分かったのでとっても楽になります.

【事例】
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上に取り込む

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

文字の左から何文字目から何文字目までの文字を取り出す

プチ情報シリーズ…

【用法】
A1セルに、”こんなほげですみません”という文字があったとすると

hoge=right(a1,4,3)

とするとhogeの中には”ほげで”が入ります。

【解説】
これもとくにはこめんとなしということで。

文字の右から何文字目までの文字を取り出す

プチ情報シリーズですが…

【用法】
A1セルに、”こんなほげですみません”という文字があったとすると

hoge=right(a1,4)

とするとhogeの中には”すみません”が入ります。

【解説】
言わずもがなですが…

文字の左から何文字目までを抽出する

またしてもプチ情報ですが意外と忘れてしまうので…

【用法】
A1セルに、”こんなほげですみません”という文字があったとすると

hoge=left(a1,4)

とするとhogeの中には”こんなほ”が入ります。

【解説】
簡単ですがすぐ忘れてしまうので;その対策として。

2007/07/27

Excelシートの一部をピクチャーにして画像として保存する方法

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を使ったデータベース接続でタイムアウト時間を設定する.

ADOを使ったタイムアウト時間をコントロールする為の設定.

【用法】
ADOcon.ConnectionTimeout = 300
ADOcon.CommandTimeout = 300

【解説】
ADOを使用してデータを取り出すときタイムアウトの時間を制御するのは上記のようにすればよいようです。単位は秒になります。これでちょっと重めなデータを取り出すことも出来ます。

2007/07/26

ADOでアクセスするときに検索時間を長くする

ADOでデータベースにアクセスするときに検索時間に時間がかかってしまいタイムアウトになってしまう場合があります。いろいろ調べてみるとデフォルトでは大体30秒くらいでタイムアウトになってしまうようです。この時間を長くするためのおまじないがあります。

【用法】
編集中…

拡張子以外のファイル名を取り出す

ファイル名を取り出すのは,
filename_get = Activeworkbook.name

とやればfilename_get変数に取り出すことが出来るがこのとき.xls(拡張子)が邪魔になることがある。この拡張子以外のファイル名を取り出す方法を考えました。多分こんな風にすれば出来る。

【用例】
filename = Left(ActivePresentation.Name, InStrRev(ActivePresentation.Name, Chr(46)) - 1)

【説明】
InstRevは右側からChr(46)(これは.[ドット]を表示すASCII番号)の文字のある場所を検索しそれを左側から何文字目かを取り出す関数。これとLeft関数(左側から何文字目までを切り出すか?を示す関数)を合体することで見事拡張子以外のファイル名を取り出すことが出来た。すばらしい。