【VBA】IEの更新や戻るボタンの処理
こんにちは
今回はIEの更新や戻るボタンについて調べました。
調べてみた結果プロパティひとつで簡単に処理できるようで
意外とあっさりでした。
IEの更新
InternetExplorerオブジェクト.Refresh
これだけですね。
更新する場合はこの後にページが開き終わるまで待つ必要があります。
戻るボタン
InternetExplorerオブジェクト.GoBack
戻るのもこれだけで済みますね。
これもページを開き終わるまで待つ必要がありますね。
URLの取得
InternetExplorerオブジェクト.LocationURL
もしくは
InternetExplorerオブジェクト.document.URL
で取得できるようです。
今回も短いですがこの辺で
【VBA】水平揃え垂直揃え
こんにちは
涼しくなってきましたね。
今日は水平揃えと垂直揃えのお話です。
使うことはあまり無いんじゃないかな・・・
とはいえまとめさせていただきますよ。
水平揃え
水平はHorizontalAlignmentプロパティを使用します。
Horizontalは水平な、Alignmentは直線にするという意味です。
つまり水平に揃えるという意味ですかね。
Range("A:A").HorizontalAlignment = xlGeneral
このような形で使用します。
値 | 効果 |
---|---|
xlGeneral | 標準(デフォルトの状態) |
xlLeft | 左揃え |
xlCenter | 中央ぞろえ |
xlRight | 右揃え |
垂直揃え
では垂直揃えも見ていきましょう。
垂直はVerticalAlignmentプロパティを使用します。
Verticalは垂直のという意味ですね。
水平揃え同様
Range("A:A").VerticalAlignment = xlTop
と使用します。
値 | 効果 |
---|---|
xlTop | 上揃え |
xlCenter | 中央揃え |
xlBottom | 下揃え |
あらかじめセルに設定しておけば使うことはほぼ無いと思うのですが、水平揃え・垂直揃えの説明でした。
【VBA】フォントプロパティでフォントを操作する
こんにちは
今回はフォントを操作してみましょう。
フォントプロパティを使えばフォントの色や大きさ、太文字など様々な操作が行えます。
よく使うもの
フォントの色変更
フォントの色はインデックス番号で指定する方法、RGBで指定する方法、16進数で指定する方法があります。
インデックス番号は以下のとおりです。
1~56まであるそうです。
.Font.ColorIndex=1のように使用します。
次にRGBを使用して指定します。
.Font.ColorIndex=RGB(赤の数値,緑の数値,青の数値)のように使用します。
[その他の色]から[色の設定]の[色の設定]を開きRGBの値を確認することができます。
最後に16進数で表す方法ですが、自分はあまり使いませんね。
.Font.Color = &HFFFFFF のように使うらしいのですが詳しくないため省略とさせてください。
フォントの設定変更
基本的にTrue/Falseで有効/無効を切り替えます
フォントの太文字の変更
Range("A1").Font.Bold = True
Range("A1").Font.Bold = False
斜体の変更
Range("A1").Font.Italic = True
Range("A1").Font.Italic = False
取り消し線の変更
Range("A1").Font.Strikethrough = True
Range("A1").Font.Strikethrough = False
下線の変更
Range("A1").Font.Underline = True
Range("A1").Font.Underline = False
【VBA】知っておくと便利なEndプロパティ
こんにちは
今回はEndプロパティの説明です。
基本的なところなので知ってる人は多そうですが、一応説明します。
Endプロパティは簡単に説明すると選択したセルの終端を選択するものです。
簡単に説明するとセルを選択して[Ctrl]と[←]や[Ctrl]と[↓]を押したときに選択されるセルのことですね。
余談ですが、Excelを初めて触ったときに、Excelの終わりってどこなんだろうかとずっと右や下を押していた記憶がありますwそのときに教えてあげたかった知識ですね(遠い目)
下準備
あらかじめシートをこんな感じにしてみましょうか
下準備めっちゃ雑w
こんなんだから中級者だと(ry
例で作ってるだけなので真似される方は適当に作っちゃってください
実際に仕事で使う場合、何百何千と品名があり、数も変動するためいちいち何番まであるとか
サンプルプログラム
購入品のリストと在庫品のリストの比較を行ってみましょうか
もし在庫品名と購入品名が被った場合、購入品名のフォントを赤色にするといった感じにしましょう。
ではサンプルです。
Sub 比較() Dim i As Long Dim j As Long For i = 2 To Range("A2").End(xlDown).Row For j = 2 To Range("D2").End(xlDown).Row If Cells(i, 2) = Cells(j, 5) Then Cells(i, 2).Font.Color = RGB(255, 0, 0) Exit For Else Cells(i, 2).Font.Color = RGB(0, 0, 0) End If Next j Next i End Sub |
1行目:プロシージャの開始
2~3行目:変数宣言
4行目:なし
5行目:変数iのFor文開始(2~range("A2")の下方向終端の行数まで)
6行目:5行目同様変数jのFor文開始
7行目:Cells(i, 2) とCells(j, 5)の比較
8行目:条件が合致していれば購入リストの品名を赤にする
9行目:For文から抜ける
10行目:Else処理の開始
11行目:条件に不一致の場合、購入リストの品名を黒くする
12行目:If文の終了
13~14行目:変数を返す
15行目:プロシージャの終了
蛇足
Endプロパティによけいなものが付いてるけどあれって何?
Range("A2").End(xlDown).Row
この赤文字の所ですね。
これはRowプロパティといって指定されたセルの行番号を返しなさいという命令です。
読み方はロゥかな?
この場合、Range("A2")から[Ctrl]+[↓]へ行ったセルの行番号を返しなさいという事になります。
Rowが行番号なら列番号は何?
列番号を返す場合はColumn(コラム)ですね。
これも同じようにCellsやRangeの後ろに付けます。
RowsやColumnsがあるんだけど?
たまに打ち間違えるやつですねw
RowsやColumnsはRangeオブジェクトとして値を返します。
つまりRows(1)はRange("1:1")と同じ意味ですね。
Columns("3:5")はRange("C:E")と同じですね。
うーん、自分には使いこなせる気がしないw
右や左も.End(xlRight)や.End(xlLeft)になるの?
昔僕もやらかしましたが、左右の場合は変わってきます。
左右の場合はToが付くので注意しましょう。
プロパティ | 方向 |
---|---|
.End(xlUp) | 上:Ctrl+↑方向 |
.End(xlDown) | 下:Ctrl+↓方向 |
.End(xlToLeft) | 左:Ctrl+←方向 |
.End(xlToRight) | 右:Ctrl+→方向 |
ちなみにですが、下の図のようなケースが発生する場合があるかもしれませんね。
文字の入力されたセルの間に空白セルがまぎれている場合、終端行は空白セルの上の行になってしまいます。
これでは処理が中途半端で終わってしまいます。
この場合Range("A10000").End(xlUp).rowのように上から下の終端行を探すのではなく、下から上へ終端行を探すのもひとつの手ですね。
とはいえ、その終端行が空白だった場合も中途半端になってしまうため実行する前に確認したり、ミスを防ぐための処理を加える必要はありますね。
【VBA】ソースコードでどこをいじればいいの?
こんにちは
でも開いてみるとごちゃごちゃしており、どこがどのコードなの?と思うと思います。
ということで今回はいじる範囲がどのソースか調べる方法を教えます。とはいえ独学で勉強しているのでもしかしたらもっといい方法があるかも・・・という逃げ道を用意させてくださいw
じゃあどうしたらよいのか
まずIEで操作したいページを開きます。
私がよく使うページならAmazonさんですね。
検索のキーワードを入れるボックスをクリック
そして右クリックして要素の調査をクリック
するとこんな画面が出てきます。
この青くマークされてるのがキーワードのところですね。
For Each 文とgetElementsTagName("Input")で出てきたソースのnameが”field-keywords”なら・・・みたいにプログラムを組むことが可能ですよね。
IEの場合は上のようになっていますが、僕が普段使用しているFireFoxの場合はというと
自分が今どこを触っているのか見やすく表示してくれるため分かりやすいですね。
このように使用するブラウザで若干の違いはあるようです。
自分にあったブラウザを探してみるのも良いかもしれませんね。
【VBA】Amazonで商品検索
こんにちは
今回はAmazonで商品検索をします。
言葉で言うのは簡単なんですけどね。
Amazonでの商品検索
1.IEを開く
2.Amazonにアクセス
3.欲しい商品名を入力
4.表示された商品のページを開く
すごく・・・簡単です。
これをVBAで表示すると結構なコードになりそうw
ではコードを見ていきましょう
サンプルコード
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Amazon_search() Dim ie As InternetExplorer Dim textInput As IHTMLElement Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "https://www.amazon.co.jp/" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop Sleep 3000 For Each textInput In ie.document.getElementsByTagName("input") If InStr(textInput.Name, "field-keywords") > 0 Then textInput.Value = "ジャック・ライアン" Exit For End If Next Dim form As HTMLFormElement For Each form In ie.document.getElementsByTagName("input") If InStr(form.Value, "検索") > 0 Then form.Click Exit For End If Next Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop Sleep 3000 Dim title As IHTMLElement For Each title In ie.document.getElementsByTagName("A") If InStr(title.innerText, "ジャック・ライアン") > 0 And title.innerText Like "*字幕*" Then title.Click Exit For End If Next End Sub |
1行目:Sleep関数の宣言
2行目:プロシージャの開始
3~4行目:変数宣言
5行目:なし
6行目:ieにInternetExplorer.Applicationを設定
7行目:IEを表示
8行目:Amazonを開く
9行目:なし
10~12行目:読み込みが終わるまで待機
13行目:Sleep関数で3秒待機
14行目:なし
15行目:For Each文でソースコード内の”input”タグの数繰り返す
16行目:検出されたコードでNameが"field-keywords"かどうか
17行目:検索のワードに"ジャック・ライアン"を入れる
18行目:For文を抜ける
19行目:If文を抜ける
20行目:NextでFor文を繰り返す
21行目:なし
22行目:formを変数宣言
23行目:For Each文でソースコード内の”input”タグの数繰り返す
24行目:検出されたコードでValueが"検索"かどうか
25行目:検索ボタンをクリック
26行目:For文を抜ける
27行目:If文を抜ける
28行目:NextでFor文を繰り返す
29行目:なし
30~33行目:ページを開くまで待機
34行目:なし
35行目:変数宣言
36行目:For Each文でソースコード内の”A”タグの数繰り返す
37行目:If文で"ジャック・ライアン"と"字幕"が記載されたリンクかどうか
38行目:リンクをクリック
39行目:For文を抜ける
40行目:If文を抜ける
41行目:NextでFor文を繰り返す
42行目:プロシージャの終了
いやぁ長いw
そして自分がジャック・ライアンにはまっているからという理由でこんなプログラムを作成したという
本当に面白いんですよこの作品は
時間があればぜひ見ていただきたいです。
AmazonPrimeなら無料で観れます!
作成してみて
本を読んである程度IEを使用したプログラムを組んでは見たものの、未だにこの変数宣言でいいの?と思うところは多々ありますね。
特に検索ボタンを押すところなんて
form.submitで最初はやろうとしたんですが、エラーが出てきて何で?となりました。
とりあえず動かさなくてはということでClickを使用しましたが、
この当たりが中級者なんだろうなぁと痛感しました。
リンクをクリックするところは字幕のページをクリックするように設定しています。これは、そのままで開くと吹替え版が表示されるため、andを使用して字幕の方を開けるのではないかと思いやってみました。問題なく開けて安心しました。
内容が長すぎるため今回はこの辺で
今日はお休みします
こんにちは
今日はお休みします
明日2記事書けるといいな