エクセルの初期フォントを変更したい場合、変更したBookを
下記の名前(テンプレート形式)で、下記の2つのフォルダにコピーする。
Book.xltx
C:\Users\XXXXX\AppData\Roaming\Microsoft\Excel\XLSTART
C:\Users\XXXXX\Documents\Office のカスタム テンプレート
上のフォルダの違いは、Excel起動時にテンプレート選択を有効にしているか否か。
メモ:
游ゴシック
游ゴシック Light
エクセルの初期フォントを変更したい場合、変更したBookを
下記の名前(テンプレート形式)で、下記の2つのフォルダにコピーする。
Book.xltx
C:\Users\XXXXX\AppData\Roaming\Microsoft\Excel\XLSTART
C:\Users\XXXXX\Documents\Office のカスタム テンプレート
上のフォルダの違いは、Excel起動時にテンプレート選択を有効にしているか否か。
メモ:
游ゴシック
游ゴシック Light
ExcelからMS-Accessのデータを簡易取り出し。
dbPath = "xxx.accdb"
Set dbe = CreateObject("DAO.DBEngine.120")
Set Db = dbe.Workspaces(0).OpenDatabase(dbPath, False)
Sql = "select x from xxxx where xx ="x"
Set dbRes = Db.OpenRecordset(Sql)
wkCMT = dbRes("x").Value
dbRes.Close
Db.Close
Set Db = Nothing
Set dbe = Nothing
指定のURLから生成されるHTMLをファイル化して、ローカルに保存する。
Private Declare Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryW" ( _
ByVal lpszUrlName As Long) As Long
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileW" ( _
ByVal pCaller As Long, _
ByVal szURL As Long, _
ByVal szFileName As Long, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long
Public Sub test_download()
If HTML_Download("http://xxxx", "C:\temp\test.html") <> 0 Then
MsgBox "Fail!"
Else
MsgBox "Done!"
End If
End Sub
Function HTML_Download(ByVal HTML_URL As String, ByVal SavePath As String) As Long
DeleteUrlCacheEntry StrPtr(HTML_URL)
HTML_Download = URLDownloadToFile(0, StrPtr(HTML_URL), StrPtr(SavePath), 0, 0)
End Function
HTMLファイル内にあるテーブル<table>内の値を取り出す。
今まではINSTR関数で地道に処理していたが、もっとスマートな方法を準備した。
Sub html_TD_value()
Dim objXML As New MSHTML.HTMLDocument
Dim htmlDoc As New MSHTML.HTMLDocument
Dim htmlDoc2 As Object
Dim htmlDoc3 As Object
Dim htmlDoc4 As Object
' 事前に出力されたHTMLファイルを取り扱う
Set htmlDoc = objXML.createDocumentFromUrl("file:///C:/temp/test.html", vbNullString)
'wait処理が面倒だから0.5秒待つことにする(ローカルファイルアクセスのため高速なはず)
Application.Wait [Now() + "0:00:00.5"]
' id="xxxx"まで飛ぶ
Set htmlDoc2 = htmlDoc.getElementById("xxxx")
'1行目(TR)は飛ばして2行目から処理
For i = 1 To htmlDoc2.getElementsByTagName("tr").Length - 1
'
<TR>まで飛ぶ
Set htmlDoc3 = htmlDoc2.getElementsByTagName("tr")(i)
For j = 0 To htmlDoc3.getElementsByTagName("td").Length - 1
'
<TR>内の
<TD>まで飛ぶ
Set htmlDoc4 = htmlDoc3.getElementsByTagName("td")(j)
'
<TD>の値をゲット
Debug.Print i, j, htmlDoc4.innerText
Next
Next
End Sub

Sub moji_color()
Dim area As Range, onesell As Range, i As Long
Dim moji As Long, keyw As String
'対象範囲と検索文字列
Set area = Application.InputBox(Prompt:="検索対象をセル範囲してください。", Type:=8)
keyw = Application.InputBox(Prompt:="色付けるキーワードは?", Type:=2)
'セル範囲ループ
For Each onesell In area
moji = 1
'1セル毎に文字チェック
Do While moji <= Len(onesell)
i = InStr(moji, UCase(onesell), UCase(keyw), 1)
If i = 0 Then Exit Do
'見つかったら赤くする
onesell.Characters(i, Len(keyw)).Font.Color = vbRed
moji = moji + i
Loop
Next
End Sub
久し振りにVBAでIEを制御したのでメモ。
'定番
Dim ObjIE As Object
Dim wkTEXT As String
Set ObjIE = CreateObject("InternetExplorer.application")
ObjIE.Visible = True
ObjIE.Navigate "http://xxxxxxxx"
'WAIT
Do While ObjIE.Busy Or ObjIE.ReadyState < READYSTATE_COMPLETE
Debug.Print ObjIE.Busy & ":" & ObjIE.ReadyState
DoEvents
Loop
'INPUT FORM & SUBMIT ボタンなどがID化されてること
ObjIE.Document.body.all("yyyyyy").Value = wkTAG
ObjIE.Document.body.all("zzzzz").submit
'Other qqqqqqqqqq配下のHTMLを取り出し
wkTEXT = ObjIE.Document.body.all("qqqqqqqqqq").Children(0).outerHTML
'Other ページのタイトル
wkTEXT = ObjIE.Document.Title
'Other BODY内のテキスト
wkTEXT = ObjIE.Document.Body.innerText
友人に頼まれて、かつJavaScriptとjQueryの勉強も兼ねてツールを作ってみた。
といってもいきなりは難しいから、Excel版でプロタイプを作ってみた。
風呂の中、電車の中でロジックを考えて、昼休みに一気に作り込み。
※電車の中でシェイプの使い方は事前勉強
1時間で出来たことは、我ながら。。。
でも、本命のWEB版は、、、挫折しそう。
Excel版の特徴:
'シェイプへの画像入れ込み、共通イベントの作成
Sub read_card_make_shape()
Dim myFileName As String
Dim myShape As Shape, item_name As String
Dim D As String: D = Chr(34)
Dim Y As Integer
'事前準備した画像フォルダへのパス
myFileName = "c:\temp\game.img\"
Y = 2: Do While Sheets("data").Cells(Y, 1).Value <> "": Y = Y + 1: Loop: Y = Y - 1
For i = 2 To Y
'画像ファイルをシェイプにセット
Set myShape = ActiveSheet.Shapes.AddPicture( _
fileName:=myFileName & Sheets("data").Cells(i, 1).Value & ".jpg", _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=((i - 2) Mod 10) * 62, _
Top:=((i - 2) \ 10) * 92 + 250, _
Width:=60, _
Height:=90)
'シェイプに命名、クリック時のイベントにシェイプ名を渡す
item_name = Sheets("data").Cells(i, 1).Value
myShape.Name = item_name
ActiveSheet.Shapes(item_name).OnAction = "'card_click" & D & item_name & D & "'"
Next
End Sub
Sub card_click(KEY As String)
'クリックしたシェイプの名前をExcelセルへセット(あとはVlookup頼み)
Dim YY As Integer
YY = 3: Do While Sheets("main").Cells(YY, 1).Value <> "": YY = YY + 1: Loop
If YY > 14 Then Exit Sub
Sheets("main").Cells(YY, 1).Value = KEY
End Sub
Sub delete_line()
'削除時は名称を消せば後の情報も自動で消える(Vlookup頼み)
Dim YY As Integer
YY = 2: Do While Sheets("main").Cells(YY, 1).Value <> "": YY = YY + 1: Loop
Debug.Print YY
If YY < 4 Then Exit Sub
Sheets("main").Cells(YY - 1, 1).Value = ""
End Sub
あるネットワーク上のファイル(今回はZIP)を一括ダウンロードする
前提:
手順:
下記説明:
'URLDownloadToFile API. Private Declare Function URLDownloadToFile Lib "urlmon" Alias _ "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _ szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long Sub batch() Dim strFNAME As String, strSRC_FILE As String Dim strRET As Variant strFNAME = "c:\temp\download\" Open strFNAME & "_copy_list.txt" For Input As #1 Open strFNAME & "_report.txt" For Output As #2 Do While Not EOF(1) Line Input #1, strSRC_FILE strRET = download(strSRC_FILE, strFNAME & strSRC_FILE) Print #2, strRET & vbTab; strSRC_FILE Debug.Print strSRC_FILE DoEvents Loop Close MsgBox "done!" End Sub 'strURL:ダウンロード元URL(ファイル名のみ) 'strFNAME:格納先フルパス+ファイル名 Function download(strURL As String, strFNAME As String) As Variant Dim base_url As String base_url = "http://~~~~~~/~~~~~/" & strURL download = URLDownloadToFile(0, base_url, strFNAME, 0, 0) End Function
マクロでExcelグラフをGIF形式でファイル保存する。
'グラフタイトルのセット(おまけ)
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = "title"
'グラフを選択している状態でGIFT形式でエクスポート
myRess = ActiveChart.Export("c:\temp\test.GIF", "GIF", False)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'WクリックしたセルのX座標チェック&値が入っているか
If ActiveCell.Column <> 2 Or ActiveCell.Value = "" Then
Cancel = True
Exit Sub
End If
Dim ObjIE As Object
Dim ObjShell As Object
Dim ObjWindow As Object
Set ObjShell = CreateObject("Shell.Application")
'全shellをチェック
For Each ObjWindow In ObjShell.Windows
'IEならば
If TypeName(ObjWindow.Document) = "HTMLDocument" Then
Set ObjIE = ObjWindow
'IEにURLセット&引数
ObjIE.Navigate ("http:xxxxxxxxxxx=" & ActiveCell.Value)
ObjIE.Visible = True
Exit For
End If
Next
Cancel = True
End Sub