CoCoのYDブログ

心に思い浮かんだことを少し掘り下げ発信します

【VBA】ファイル一覧を表示する

こんにちは

 

今回はフォルダに保存されたファイルの一覧を表示するプログラムを書きます。表示だけですが、処理を行うようにプログラムしたらできることが増えると思われます

サンプルプログラム

Sub test2()
    Dim FileName As String
    Dim CNT As Long

    CNT = 1
    FileName = Dir(ThisWorkbook.Path & "\*")

    Do While FileName <> ""
        Cells(CNT, 1) = FileName
        CNT = CNT + 1
        FileName = Dir()
    Loop
End Sub

 1行目:プロシージャの開始

2行目:File\nameをString型で宣言

3行目:CNTをlong型で宣言

4行目:なし

5行目:CNTに1を代入

6行目:FlieNameにDir(ThisWorkbook.Path & "\*")を代入

7行目:なし

8行目:Do Loop文の開始

9行目:FileNameをCells(CNT, 1) に代入

10行目:CNTに1を足す

11行目:FileNameにDirで次に見つけたファイル名を入力

12行目:Loopを返す

13行目:プロシージャの終了

 

解説

6行目

今回はDir(ThisWorkbook.Path & "\*")という形で代入しています。

これはThisWorkbook.Path で見つけたファイルを上から順に代入していきなさいという命令です。

10行目のDir()で6行目に入力した条件で次に見つけたファイル名を返しなさいという命令になっています。

もうファイルが無いよ!という場合、””(何もない)を返すため8行目のWhile文から抜け出すことができます。

 

なんか6行目でまとめちゃったせいでごちゃごちゃしちゃいましたねw

でも一連の流れは分かったと思います。

今回はファイルの一覧を表示する方法として記載しましたが。ファイルの情報を取得する、もしくは編集することも可能です。

 

では今回はこの辺で

【VBA】ファイルを開く

こんにちは

 

今日はファイルを開く方法を書いていきます。

ファイルを開くことができればそのファイルの情報を取得したり、編集することも可能になります。

ファイルを開くにはパス(ファイルが保存されている場所)とファイル名が必要になります。

 

下の図はファイルのプロパティです。

上の赤枠がファイル名、下の赤枠がファイルのパスです。

f:id:takataka2743:20180924220653p:plain

 

では以下のフォルダを作成して開けるかどうかを確認します。

f:id:takataka2743:20180924221132p:plain

 

サンプルプログラム

今回は上のフォルダのtest1.xlsxにマクロを作成してみましょう。

Sub test1()
    Dim FileName As String
    FileName = Dir(ThisWorkbook.Path & "\test2.xlsx")

    Workbooks.Open FileName:=ThisWorkbook.Path & "\" & FileName
    Workbooks(FileName).Close
End Sub

 1行目:プロシージャの開始

2行目:変数名FileNameの宣言、今回はStringで宣言します。

3行目:ファイル名の検索

4行目:なし

5行目:ファイルを開く

6行目:ファイルを閉じる

7行目:プロシージャの終了

 

解説

3行目のDirについて解説します。

Dirは指定したパスを見に行き、一致した名前のファイル名があればそのファイル名を変数に入力するといった関数です。

今回はThisWorkbook.Pathつまりこのファイルの保存場所を参照します。その中のtest2.xlsxというファイル名を変数FileNameに入力しています。

ちなみにThisWorkbook.Path以外の場所を設定する場合、”C:\Users\Desktop\VBA-Test”のようにダブルクォテーションで囲みましょう。

””で囲うことによりその内容は文字列であると伝えることができます。

 

次に5行目ですね。

Workbooks.Open FileName:=

ファイルを開く方法はほかにも色々とあるのですが自分はこのやり方を良く使います。

Wrokbooks.Open ファイル名 でもできるようです。


6行目
Workbooks(FileName).Close
これはそのままファイルを閉じるということです。

ちなみに保存しないで閉じる場合は

Workbooks(FileName).Close SaveChanges:=True
という形で記載します

 

今回はここまでです。

【VBA】like演算子 続き

こんにちは

今回もLike演算子について語っていきます。

 

cellsでIf文を使うにはfindプロパティを使用すれば事足りるでしょう。

しかしながらファイル名やシート名を検索するならLikeを使用した場合がよいと思われます。

 

試しに以下の様なシートがある場合で見てみましょう。

f:id:takataka2743:20180923222803p:plain

この状態で"Sheet名"が一桁のものを操作したい場合、以下のプログラムで実行することができます。

 

サンプルプログラム

Sub test()
    Dim i As Long
    For i = 1 To Sheets.Count
        If Sheets(i).Name Like "Sheet#" Then
            MsgBox Sheets(i).Name
        End If
    Next i
End Sub

 

1~2行目:省略

3行目:シート数の数だけ繰り返すFor文の開始

4行目:シート名がSheetと数字一桁の場合

6行目:シート名をメッセージボックスで表示

7行目:If文の終わり

8行目:変数iを返す

9行目:プロシージャの終了

 

こんな感じですね。

ちなみにSheet*にするとシート名がSheetで始まるものすべてが選択されます。Sheet1*にするとSheet1とSheet11が選択されます。

 

[a-z]や[0-9]はあまり使いませんね。

 

話は変わりますが、引越しはある程度終わりました

とはいえ洗濯機と冷蔵庫が無い状態ですがw

 

つめたい飲み物が飲みたいw

【VBA】like演算子

こんにちは

 

引越しのを終えてネット回線が繋がるまでSoftBank光で対応してますが、これは遅いw

彼女とのビデオチャットもできやしないorz

 

Like演算子とは

今までIf文やWhile文で条件を設定すると、条件に完全に一致しないとTrueになりませんんでした。Like演算子を使用することでもっと条件を緩めることができます。

 If 条件 Like ”*ブログ” Then

のように使用します

一致の種類 パターン 一致例 一致なし 解説
複数の文字 a*a abca,a12a abc  *の所には複数の文字や数字、記号を代入することができます。
  *a* bac,1a2 abc  上と同様に前後でも文字を代入できます
特殊文字 a[*]a a*a aaa  この場合は*しか代入されません
1つの文字 a?a aaa,a1a abcd  この?には1文字しか代入されません
1つの数字 a#a a1a,a0a aaa  この#には数字1文字しか代入されません
文字の範囲 [a-z] a,b,z 1,2  ここにはa~zが入ります
範囲外 [!a-z] 9,$,%  a,b,c  a~z以外の文字が入ります
非数字 [!0-9] a,b,c  1,2,9  数字以外の文字が入ります

 

今回はここで切らせていただきます。

明日は使用例を書けたらなぁと

【リベンジ】Seleniumで生放送の累計来場者数を増やす

こんにちは

 

今回は前回のリベンジです。

色々と試行錯誤してようやくできましたので見ていってくださいw

 

プログラム

開いているIEのURLを取得してそのページをFor文の回数繰り返すといったものです。

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Function getIE()
    Dim ie As InternetExplorer
    Dim sh As Object
    Dim Win As Object
    Dim document_title As String
    Set sh = CreateObject("Shell.Application")
    For Each Win In sh.Windows
        document_title = ""
        On Error Resume Next
        document_title = Win.document.title
        On Error GoTo 0
        Set ie = Win
    Next
    Set getIE = ie
End Function

 

Public Sub selenium_test1()
    Dim driver As New SeleniumWrapper.WebDriver
    Dim ie As InternetExplorer
    Set ie = getIE()

    For i = 1 To 10
        driver.Start "chrome", ie.document.URL
        driver.get ("/")

        driver.stop

        Sleep 5000
    Next i
End Sub

 Public  Sub selenium_test1() のところを見ていきます。

1行目:selenium_test1の開始

2行目:SeleniumWrapper.WebDriverのオブジェクトとしてdriver を宣言

3行目:IEのURLを引用するためIEを変数宣言

4行目:開いているIEを取得

5行目:なし

6行目:For文で処理を10回繰り返す

7行目:ChromeIEのURLをセット

8行目:7行目のURLを開く

9行目:Chromeを閉じる

10行目:5秒間スリープ

11行目:変数iを返す

12行目:プロシージャの終了

 

実際の効果は

f:id:takataka2743:20180921233621j:plain

こんな感じですね

1回やるのに5秒+開くまでの待機時間が必要ですが、自動化できるという点ではいいものかと。

ちなみに3秒待機で実行してみたところ、累計来場者数は増えたり増えなかったりと安定しませんでした。なぜ?

 

 

やっとやりたかったことができて少しすっきりしました。

明日は土曜日ですが、引越しと仕事があるため更新できなかったらごめんなさい

【VBA】Seleniumのインストール

こんにちは

 

前回の失敗の原因はまずブラウザがIEでは使用できないというところですね。

そこでIE以外のブラウザを使用してみましょう。

 

探した結果Seleniumというものがあるそうです。

Seleniumってなに?

ブラウザでのテストを自動化するツールらしいです。

どこに行ってもこんな回答しかなかったw

これを使うことでChromeFirefoxを操作することができるようです。

 

このSeleniumVBAでできるようにしたものをSeleniumVBAと呼ぶようです。

 

Seleniumのインストール

1.まずSeleniumをインストールしましょう。

ここをクリック

 

2.最新のバージョンをダウンロードする

f:id:takataka2743:20180920222635p:plain

 

3.保存されたファイルをインストールする

 

4.VBEの参照設定で[SeleniumWrapper Type Library]が追加されていることを確認する

f:id:takataka2743:20180920223116p:plain

 

問題無ければチェックして[OK]をクリック

 

Seleniumのインストールは以上です。

 

次にchromedriverをダウンロード

VBAChromeを扱えるようにするためにドライバーをインストールしましょう。

1ドライバをダウンロードする

 下のサイトに移動します。

sites.google.com

赤枠で囲ったところをクリック

f:id:takataka2743:20180920224219p:plain

クリックすると似たようなページが出ますが、ここでも赤枠をクリック

f:id:takataka2743:20180920224341p:plain

 

このページでchromedriver_win32.zipをダウンロードします。

OSごとにあったものを選んでください。

f:id:takataka2743:20180920224516p:plain

 

ダウンロードしたファイルを解凍して先ほどSeleniumWrapperをインストールしたフォルダに移動します。

デフォルトはC:\Program Files (x86)\SeleniumWrapperなのかな?

 

インストールは以上で終了です。

ここから先は自分も勉強しながら行います。

もし間違っていたら指摘していただけるとありがたいです。

【失敗】動画配信サイトの閲覧者数を上げる

こんにちは

 

今回は生放送サイトの累計閲覧者数を上げる方法を考えてみました。

ちなみにこの方法は失敗したため別の方法を考える必要がありますw

 

生放送サイトの累計来場者数を上げるには

そもそもの問題ですよね。

累計来場者数は基本的に配信画面が開かれた回数ですね。

なので生放送のサイトを何度か更新をすることで累計来場者数は増えると予想されます。

累計来場者数が増えることで、ほかの人の目に留まりやすくなります。

 

どうしたらよいのか

これは機能お話しした.Refreshを使用します。

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Function getIE()
Dim ie As InternetExplorer
Dim sh As Object
Dim win As Object
Dim document_title As String
Set sh = CreateObject("Shell.Application")
For Each win In sh.Windows
document_title = ""
On Error Resume Next
document_title = win.document.title
On Error GoTo 0
Set ie = win
Next
Set getIE = ie
End Function
Private Sub 更新()
Dim ie As InternetExplorer
Set ie = getIE()
Dim htdoc As HTMLDocument
If ie Is Nothing Then Exit Sub

Dim i As Long
For i = 1 To 10
ie.Refresh
Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Sleep 3000
Next i

End Sub

 今まで説明した内容を組み合わせただけなので今回は説明を省きます。

内容的には今開いているIEのページを10回更新する処理です。

 

実際にやってみた

まずはIEツイキャスを開いてと・・・ん?

f:id:takataka2743:20180919214411p:plain

どうやらIEツイキャスは未対応なようですor2

 

じゃあニコ生は・・・

f:id:takataka2743:20180919214707p:plain

 

うん、出鼻をくじかれてしまった・・・

どうするかまた考えます