Selenium VBA (WebDriver) で
ページ上からDOM要素を取得する際
セレクタ文字列の後ろに…
① 何も指定しないと,デフォルトでdocumentを起点にサーチする.
② DOM要素を引数に渡すと,その要素の内部でサーチする.
②の場合,引数は
WebElement型として宣言する.
Selenium VBA (WebDriver) で
ページ上からDOM要素を取得する際
セレクタ文字列の後ろに…
① 何も指定しないと,デフォルトでdocumentを起点にサーチする.
② DOM要素を引数に渡すと,その要素の内部でサーチする.
②の場合,引数は
WebElement型として宣言する.
セル範囲のコピペ
' 1行目をコピー
sheet1.Range( _
sheet1.Cells(1,1), _
sheet1.Cells(1,5) _
).Copy
' 2~100行目に書式のみ貼り付け
sheet1.Range( _
sheet1.Cells(2,1), _
sheet1.Cells(100,5) _
).PasteSpecial Paste:=xlPasteFormats
セル範囲のコピペ
' 1行目をコピー
sheet1.Range( _
sheet1.Cells(1,1), _
sheet1.Cells(1,5) _
).Copy
' 2~100行目に書式のみ貼り付け
sheet1.Range( _
sheet1.Cells(2,1), _
sheet1.Cells(100,5) _
).PasteSpecial Paste:=xlPasteFormats
BATで「数値の0埋め」を実装してみる
https://language-and-engineeri...
遅延展開された環境変数は
% ではなく ! で囲む。
%%i はforコマンドの引数だとする。
set hoge=%%i
rem 10より小さければ0埋めして変数格納
if %%i LSS 10 (
set hoge=0!hoge!
)
BATで「数値の0埋め」を実装してみる
https://language-and-engineeri...
遅延展開された環境変数は
% ではなく ! で囲む。
%%i はforコマンドの引数だとする。
set hoge=%%i
rem 10より小さければ0埋めして変数格納
if %%i LSS 10 (
set hoge=0!hoge!
)
DateTimeオブジェクト同士の差分を
diffで計算すると,
返り値はDateIntervalオブジェクト。
DateInterval クラス
https://www.php.net/manual/ja/...
$y, $m, $d, $h, $i, $s
というプロパティに加え
年や月をまたいで差をとる $days があるが,
$months や $years は無い。
DateTimeオブジェクト同士の差分を
diffで計算すると,
返り値はDateIntervalオブジェクト。
DateInterval クラス
https://www.php.net/manual/ja/...
$y, $m, $d, $h, $i, $s
というプロパティに加え
年や月をまたいで差をとる $days があるが,
$months や $years は無い。
サウンドコントロールパネルの録音タブに
ステレオミキサーが無い場合,
右クリック→無効なデバイスの表示
をしてみよう。
それでも表示されなければ
そのPCにはステレオミキサーが無い。
(デバイスドライバとして
追加インストールできる場合もある)
サウンドコントロールパネルの録音タブに
ステレオミキサーが無い場合,
右クリック→無効なデバイスの表示
をしてみよう。
それでも表示されなければ
そのPCにはステレオミキサーが無い。
(デバイスドライバとして
追加インストールできる場合もある)
セルを選択状態にする:
まず先に,
そのセルが存在するシートを
アクティブにしてからでないと
「Selectが失敗しました」のエラーになる。
https://www.officepro.jp/excel...
sheet1.Activate
sheet1.Cells(1, 1).Select
セルを選択状態にする:
まず先に,
そのセルが存在するシートを
アクティブにしてからでないと
「Selectが失敗しました」のエラーになる。
https://www.officepro.jp/excel...
sheet1.Activate
sheet1.Cells(1, 1).Select
【Excel関数 一発ネタ】
=INDEX( A1:XFD1048576, 行番号, 列番号 )
=INDIRECT( ADDRESS( 行番号, 列番号 ) )
この「シート全体」を表す
A1:XFD1048576
英字で列指定せず,
行番号と列番号だけで美しく書けないか?
→ R1C1形式なら
R1C1:R1048576C16384 ですね!
【Excel関数 一発ネタ】
=INDEX( A1:XFD1048576, 行番号, 列番号 )
=INDIRECT( ADDRESS( 行番号, 列番号 ) )
この「シート全体」を表す
A1:XFD1048576
英字で列指定せず,
行番号と列番号だけで美しく書けないか?
→ R1C1形式なら
R1C1:R1048576C16384 ですね!
Selenium VBA (WebDriver) で,
CSSセレクタで取得した
DOM要素の配列(コレクション)を
For文でスキャンするサンプル:
Set elems = driver.FindElementsByCssSelector("CSSセレクタ")
For i = 1 To elems.Size
Set elem = elems.Item(i)
~
Next i
Selenium VBA (WebDriver) で,
CSSセレクタで取得した
DOM要素の配列(コレクション)を
For文でスキャンするサンプル:
Set elems = driver.FindElementsByCssSelector("CSSセレクタ")
For i = 1 To elems.Size
Set elem = elems.Item(i)
~
Next i
バッチファイル内で
環境変数の「遅延展開」を
避けて通れない場合もある。
どんな場合かというと
「繰り返し動的に変数の値が書き換わる」
ようなケース。
例えば
forコマンドによる繰り返しループ中で
変数を毎回変更し,連番を生成する等。
バッチファイル内で
環境変数の「遅延展開」を
避けて通れない場合もある。
どんな場合かというと
「繰り返し動的に変数の値が書き換わる」
ようなケース。
例えば
forコマンドによる繰り返しループ中で
変数を毎回変更し,連番を生成する等。
・再生ウィンドウで
再生ボタンを押すと
動画の再生が始まり,一時停止も可能。
・タイムラインウィンドウ上で
動画ファイルの途中のタイミングを選択し,
右クリック→分割 を選び
不要な側を
右クリック→削除すれば
動画をカットできる。
・再生ウィンドウで
再生ボタンを押すと
動画の再生が始まり,一時停止も可能。
・タイムラインウィンドウ上で
動画ファイルの途中のタイミングを選択し,
右クリック→分割 を選び
不要な側を
右クリック→削除すれば
動画をカットできる。
セルの行高を調整する際,
Excelで設定可能な
最大の行高を超えてしまうと,
「Range クラスの RowHeight プロパティを設定できません」
というエラーメッセージが出る。
https://agrius-akita.hatenablo...
最大の行高は409(ポイント)
セルの行高を調整する際,
Excelで設定可能な
最大の行高を超えてしまうと,
「Range クラスの RowHeight プロパティを設定できません」
というエラーメッセージが出る。
https://agrius-akita.hatenablo...
最大の行高は409(ポイント)
「重複しないファイル名を探索して保存」という処理
https://language-and-engineeri...
BATだけで実現できます
・if existで既存ファイルを探知。
・存在すれば,重複回避のため
gotoでファイル名をつけ直す。
・goto先では算術演算によりカウンター増加。
「重複しないファイル名を探索して保存」という処理
https://language-and-engineeri...
BATだけで実現できます
・if existで既存ファイルを探知。
・存在すれば,重複回避のため
gotoでファイル名をつけ直す。
・goto先では算術演算によりカウンター増加。
$dt1 = new DateTime("2020-02-29 12:34:56");
$dt2 = new DateTime("2017-05-01 00:00:00");
$df1 = $dt1->diff( $dt2 );
echo $df1->y . "," . $df1->m;
→ "2, 9"
$df2 = $dt2->diff( $dt1 );
echo $df2->y . "," . $df2->m;
→ "2, 9"
2年9か月差ということ。
$dt1 = new DateTime("2020-02-29 12:34:56");
$dt2 = new DateTime("2017-05-01 00:00:00");
$df1 = $dt1->diff( $dt2 );
echo $df1->y . "," . $df1->m;
→ "2, 9"
$df2 = $dt2->diff( $dt1 );
echo $df2->y . "," . $df2->m;
→ "2, 9"
2年9か月差ということ。
ボイスレコーダーなどのソフトで
PC内で録音操作をする際,
Windowsの
設定→デバイス→サウンドの設定→サウンドコントロールパネル→録音タブ
の中から録音対象を選べる。
ここでマイクを選ぶと,
マイク以外のデスクトップ上の音声は録音されない。
ボイスレコーダーなどのソフトで
PC内で録音操作をする際,
Windowsの
設定→デバイス→サウンドの設定→サウンドコントロールパネル→録音タブ
の中から録音対象を選べる。
ここでマイクを選ぶと,
マイク以外のデスクトップ上の音声は録音されない。
JSに
document.querySelectorAll("CSSセレクタ")
という構文があるので
XPathよりCSSセレクタのほうが
見慣れているかもしれない。
Selenium VBA (WebDriver) で
CSSセレクタで取得した要素の配列は
WebElementsというコレクションに格納され
For文でスキャン可。
JSに
document.querySelectorAll("CSSセレクタ")
という構文があるので
XPathよりCSSセレクタのほうが
見慣れているかもしれない。
Selenium VBA (WebDriver) で
CSSセレクタで取得した要素の配列は
WebElementsというコレクションに格納され
For文でスキャン可。
行高を調整
AutoFitだと
セル内容の最終行が欠けたりする。
ゆとりをもたせるため+10する
' row_num: 行番号
txt_sheet.Rows(row_num).AutoFit
txt_sheet.Rows(row_num).RowHeight = txt_sheet.Rows(row_num).RowHeight + 10
https://www.tipsfound.com/vba/...
行高を調整
AutoFitだと
セル内容の最終行が欠けたりする。
ゆとりをもたせるため+10する
' row_num: 行番号
txt_sheet.Rows(row_num).AutoFit
txt_sheet.Rows(row_num).RowHeight = txt_sheet.Rows(row_num).RowHeight + 10
https://www.tipsfound.com/vba/...
バッチファイルで計算処理:
set コマンドの /a オプションを使えば
コマンドプロンプトでも算術演算が可能!
※ただし整数限定
rem 変数に1をセット
set CNT=1
echo %CNT%
→1
rem 算術演算で1を足す
set /A CNT=%CNT%+1
echo %CNT%
→2
バッチファイルで計算処理:
set コマンドの /a オプションを使えば
コマンドプロンプトでも算術演算が可能!
※ただし整数限定
rem 変数に1をセット
set CNT=1
echo %CNT%
→1
rem 算術演算で1を足す
set /A CNT=%CNT%+1
echo %CNT%
→2
・AviUtl本体のウィンドウの右下の
一番右の「 →| 」のボタンを押すと
タイムライン上で
動画の終了位置をセットできる。
・動画の開始位置から
終了位置までの間は,
タイムラインのものさしみたいな目盛りの部分で
水色の範囲として表示される。
・AviUtl本体のウィンドウの右下の
一番右の「 →| 」のボタンを押すと
タイムライン上で
動画の終了位置をセットできる。
・動画の開始位置から
終了位置までの間は,
タイムラインのものさしみたいな目盛りの部分で
水色の範囲として表示される。
BATで変数の「遅延展開」
https://language-and-engineeri...
けっこう面倒。
書き方:
rem forループ内の環境変数を遅延展開する
SETLOCAL enabledelayedexpansion
~forループ~
ENDLOCAL
BATで変数の「遅延展開」
https://language-and-engineeri...
けっこう面倒。
書き方:
rem forループ内の環境変数を遅延展開する
SETLOCAL enabledelayedexpansion
~forループ~
ENDLOCAL
1列目内で
最後にデータが存在する(空白でない)セルの
行番号を取得
last_rownum = sheet1.Cells( sheet1.Rows.Count, 1).End(xlUp).Row
Rows.Countでシート内最終行を指定し
そこからxlUpで上方向にジャンプ。
データが存在する範囲の下端に到達する。
1列目内で
最後にデータが存在する(空白でない)セルの
行番号を取得
last_rownum = sheet1.Cells( sheet1.Rows.Count, 1).End(xlUp).Row
Rows.Countでシート内最終行を指定し
そこからxlUpで上方向にジャンプ。
データが存在する範囲の下端に到達する。
$dt1 = new DateTime("2019-01-01 00:00:00");
$dt2 = new DateTime("2020-02-29 12:34:56");
$dt_diff = $dt1->diff( $dt2 );
// 年や月をまたいだ日付の差分
echo $dt_diff->days;
→424
// 日だけに注目した差分
echo $dt_diff->d;
→28
$dt1 = new DateTime("2019-01-01 00:00:00");
$dt2 = new DateTime("2020-02-29 12:34:56");
$dt_diff = $dt1->diff( $dt2 );
// 年や月をまたいだ日付の差分
echo $dt_diff->days;
→424
// 日だけに注目した差分
echo $dt_diff->d;
→28
Selenium VBA (WebDriver) で
XPathではなく,
CSSセレクタで要素を取得する方法:
driver.FindElement(By.XPath, "XPath文字列")
↓
driver.FindElement(By.CssSelector, "CSSセレクタ文字列")
driver.FindElementsByCssSelector("CSSセレクタ文字列")→複数要素
Selenium VBA (WebDriver) で
XPathではなく,
CSSセレクタで要素を取得する方法:
driver.FindElement(By.XPath, "XPath文字列")
↓
driver.FindElement(By.CssSelector, "CSSセレクタ文字列")
driver.FindElementsByCssSelector("CSSセレクタ文字列")→複数要素
「セルの番地」を
行番号と列番号で指定したい場合,
ADDRESS関数やINDEX関数で指定可能。
では,「セル範囲」を
行番号と列番号で指定するには?
https://docs.grapecity.com/hel...
表示設定がR1C1形式なら
A1:B10 を
R1C1:R10C2 のように
行番号と列番号で表記できます。
「セルの番地」を
行番号と列番号で指定したい場合,
ADDRESS関数やINDEX関数で指定可能。
では,「セル範囲」を
行番号と列番号で指定するには?
https://docs.grapecity.com/hel...
表示設定がR1C1形式なら
A1:B10 を
R1C1:R10C2 のように
行番号と列番号で表記できます。
世界人気ランキング
「TIOBEインデックス」2020年
https://www.atmarkit.co.jp/ait...
1 C言語
2 Java
3 Python
4 C++
5 C#
6 VB
7 JavaScript
8 PHP
9 SQL
10 R言語 (※前回21位から急上昇)
11 Swift
12 Go言語
13 MATLAB
14 アセンブリ
15 Ruby
世界人気ランキング
「TIOBEインデックス」2020年
https://www.atmarkit.co.jp/ait...
1 C言語
2 Java
3 Python
4 C++
5 C#
6 VB
7 JavaScript
8 PHP
9 SQL
10 R言語 (※前回21位から急上昇)
11 Swift
12 Go言語
13 MATLAB
14 アセンブリ
15 Ruby
頻出パターン:
セル内の "一部の文字列" だけ
フォントの色を変えたい
https://computer-technology.ha...
・条件付き書式を使えば
セル "全体" のフォント色を
自動的に変化させることは可能
・セル内の一部の文字列色を変えるには,VBAが必要
・Excel関数では無理
頻出パターン:
セル内の "一部の文字列" だけ
フォントの色を変えたい
https://computer-technology.ha...
・条件付き書式を使えば
セル "全体" のフォント色を
自動的に変化させることは可能
・セル内の一部の文字列色を変えるには,VBAが必要
・Excel関数では無理