Cookie Run:Kingdom Official!
PUT YOUR BEARD IN MY MOUTH
🩵 avery cochrane 🩵
Not today Justin
2025 on Tumblr: Trends That Defined the Year

PR's Tumblrdome
Interview Vampire Daily

No title available

titsay
KIROKAZE
untitled

#extradirty
No title available
Show & Tell
art blog(derogatory)

Origami Around

tannertan36
let's talk about Bridgerton tea, my ask is open

ellievsbear
No title available

seen from United States
seen from France

seen from Serbia
seen from United Kingdom
seen from Brazil
seen from Iraq

seen from Singapore

seen from United States

seen from Colombia

seen from Maldives
seen from Malta

seen from France

seen from Belgium

seen from United States
seen from United Kingdom
seen from Chile

seen from Norway
seen from Türkiye
seen from Brazil
seen from Colombia
@vba-memo-blog
【ExcelVBA】Word/パワポ/Visio/PDFの総ページ数を取得するマクロ
*Word
Private Function get_page_cnt_word(sFile As String, sPath As String) As Long 'ページ数の取得を行う関数(Word) '引数:処理対象のファイル名、処理対象ファイルの格納フォルダ
Dim wdApp As Object Dim wdDoc As Object Dim lCount As Long
Set wdApp = CreateObject("Word.Application")
'ファイルオープン Set wdDoc = wdApp.Documents.Open(sPath & "\" & sFile) 'ページ数取得 lCount = wdDoc.ComputeStatistics(Statistic:=wdStatisticPages, IncludeFootnotesAndEndnotes:=True)
'WORDを閉じる wdDoc.Close wdApp.Application.Quit
'ページ数表示 get_page_cnt_word = lCount
'オブジェクト変数を解放 Set wdDoc = Nothing Set wdApp = Nothing
End Function
*Power Point
Private Function get_page_cnt_ppt(sFile As String, sPath As String) As Long 'ページ数の取得を行う関数(パワポ) '引数:処理対象のファイル名、処理対象ファイルの格納フォルダ
Dim pp As Object Dim lCount As Long
Set pp = CreateObject("PowerPoint.application")
With pp .Presentations.Open sPath & "\" & sFile, ReadOnly:=True lCount = .activepresentation.slides.Count .Presentations(sFile).Close .Quit End With
Set pp = Nothing get_page_cnt_ppt = lCount
End Function
*Visio
Private Function get_page_cnt_vsd(sFile As String, sPath As String) As Long 'ページ数の取得を行う関数(visio) '引数:処理対象のファイル名、処理対象ファイルの格納フォルダ Dim visio As Object Dim lCount As Long
Set visio = CreateObject("Visio.Application")
With visio .Documents.Open sPath & "\" & sFile lCount = .ActiveDocument.Pages.Count .Documents(sFile).Close .Quit End With
Set visio = Nothing get_page_cnt_vsd = lCount
End Function
原因① Dir関数がファイルへのアクセスを保持してしまう場合 いくつかtxtファイルが抽出された場合、 なんらかのハンドルがつかまれてしまうようで 参照しなかったファイルにロックがかかってしまいます。 これを防ぐには ループを抜けたあとに Dir (vbNullString) を呼び出してやることで解放が行えるようです。 TakyuLog/Dir関数での解放 ようするにこういうこと Dir (vbNullString) ' RmDir を呼び出す前にこいつを実施 RmDir DirectoryPath
tsvファイルを開くとき、セルの書式を「文字列」で読み込む方法
Dim vTmpInfo(256) As Variant Dim i As Integer For i = 0 To 256 vTmpInfo(i) = Array(i, 2)※ Next Workbooks.OpenText filename:=sFilePath, _ Origin:=932, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, Tab:=True, _ FieldInfo:=vTmpInfo, TrailingMinusNumbers:=True ※FieldInfoは読み込むときのデータの形式を指定するパラメーター。 (行番号,データ形式)で指定する。
データ形式はこんな感じ。 xlTextFormat 2 テキスト形式 xlGeneralFormat 1 一般形式 xlYMDFormat 5 YMD 日付形式
Findメソッドが失敗したときの対応
◇注意点 Findメソッドの結果を受ける変数は、Range型またはVariant型で宣言する
結果を変数に格納するときはsetが必要となる
Findメソッドで、指定した値が見つからなかったときはNothingを返す。
◇例 Dim rFind as range
set rFind as .range([範囲指定]).find("ほげほげ")
if rFind is nothing then '見つからなかったときの処理 else '見つかったときの処理 end if
動的配列
dim hoge() '最初に配列の数を指定しないで宣言
i = function_hogehoge() '配列の数が決まったら
Redim hoge(i) '再宣言して配列の数を決める
Autofilter解決
http://vba-memo.tumblr.com/post/52695337151/autofilter
なんてこたあない
Operator:=xlFilterValues
のつけ忘れ
これでおk xxx.AutoFilter Field:=指定のカラム, _ Criteria1:=Split(hoge, ","), Operator:=xlFilterValues
AutoFilterの絞込みで悩んだ
◇バリアント型の変数いくつか値が入っていて、その値をautoFilterの絞り込み条件としたい場合どうやって設定するか (条件の数は場合によって変わる)
たとえば。。。
条件が入ってる変数:hoge hogeの中身:"ああ,いい,うう"←これ全てを絞り込み条件として使いたい
◇ダメだった例その1 xxx.autoFilter Field:=xxx,Criteria1:=Array(hoge) ⇒"ああ,いい,うう"が一塊の絞り込み条件として設定される
◇ダメだった例その2 xxx.autoFilter Field:=xxx,Criteria1:=Split(hoge, ",") ⇒最後の"うう"だけが絞込み条件として設定される
◇ダメだった例その3 xxx.autoFilter Field:=xxx,Criteria1:=hoge ⇒"ああ,いい,うう"が一塊の絞り込み条件として設定される
解決した http://vba-memo.tumblr.com/post/52696506434/autofilter
配列の添え字の数を返す関数
UBound:配列の添え字の最大数を返す LBound:配列の添え字の最小数を返す
参考: http://msdn.microsoft.com/ja-jp/library/cc437658(v=vs.71).aspx
バリアント型を配列として扱うときに使える
Split関数で文字列を区切る
◇Spilit関数 spilit(元の文字列,区切り文字)
◇Spilit関数の戻り値は配列。 通常は、バリアント型で受ける。
◇使用例 dim moji as variant
moji = spilit("あああ,いいい,ううう",",")
罫線の線の種類
.range(cell).border1.LineStyle = 定数
として設定する
定数 罫線の種類 xlContinuous 実線(細) xlDash 破線 xlDashDot 一点鎖線 xlDashDotDot 二点鎖線 xlDot 点線 xlDouble 二重線 xlSlantDashDot 斜め斜線 xlLineStyleNone 無し
ユーザ型でセル位置を保存する入れ物を作っておくと便利
たとえばこんな感じに
type CellsData iRow as integer icol as integer end type
fsoを使うときの準備
Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject")
指定のブックに含まれるシート一覧を出力
Sub makecelllist()
Dim sh As Object Dim row_num As Long Dim col_num As Long Dim wb As Workbook Dim ws As Worksheet
Workbooks.Open filepath
Set wb = Workbooks("filename.xls") Set ws = ThisWorkbook.Sheets("sheetname") row_num = 1 col_num = 1
For Each sh In wb.Sheets ws.Cells(row_num, col_num).Value = sh.Name 'valueはつけなくても大丈夫 row_num = row_num + 1 Next sh
End Sub
マクロの実行速度が速くなるおまじない
マクロ開始時に指定する
Application.ScreenUpdating = False '画面更新をしない Application.Calculation = xlManual '自動計算をしない
マクロ終了前に元に戻すこと
Application.ScreenUpdating = True '画面更新をする Application.Calculation = xlAutomatic '自動計算をする
workbook.save と workbook.saveAs の違い
save:上書き保存 saveAs:オプションを指定して保存(名前、パスワードの有無、ファイル形式など)
saveas filename:= xxxx.xls ↑保存するときにディレクトリを指定しないとカレントディレクトリに保存される
for と for eachを考える
セルを一個一個確認しながらループをまわすより、For Each Inを使ったほうが良い場合もある?
for i = 0 to END xxx = .cells(i,j) next i
↑これだと終了条件を指定しなければいけないけど
for each i in range xxx = i next i
↑これなら前もって特定の範囲をrangeに入れておけば、終了条件はいらない (rangeの中身が終わればおしまい)