VBA100本ノックチャレンジ:61~70本目

61本目以降は1本あたりの取り組みにかかる時間が伸びているため、Twitter上で進捗報告をすることにしました。ので、回答もそのリンクを貼ります。

61本目。

自分の回答はこちら。

Phoneticオブジェクト (Excel)
セルの指定されたふりがなテキスト文字列についての情報を表します。
<VB>
ActiveCell.Phonetics(1).Text = "フリガナ"

62本目。

自分の回答はこちら。

試しに以下のユーザー関数を作って使ってみたところ、確かに引数の型と一致しなければ#Valueが返ってました。

画像1

63本目。

自分の回答はこちら。

【VBA入門】Like演算子(ワイルドカード、エスケープ、否定)
?:任意の1文字
*:0文字以上の文字
#:0~9の半角数字
[charlist]:charlistに含まれる全角または半角の1文字
[!charlist]:charlistに含まれない全角または半角の1文字

64本目。

自分の回答はこちら。

図の扱いは鬼門。

Worksheet.Paste メソッド (Excel)
Link:貼り付けたデータと元のデータの間にリンクを設定するには、 True を指定します。 この引数を指定すると、引数 Destination は指定できません。 既定値は False です。

というかWorksheet.Picturesコレクションって使えるけど自動メンバ表示とかで出てこなくてあらかじめ知っておくかマクロ記録とかじゃないと目にしないやつでしょうか…?

Dim p As Picture
For Each p In ActiveSheet.Pictures
    Debug.Print p.Name ; "["; p.Formula; "]"
Next

とかすると確かに図の名前と数式があればその式が表示されるんですよね。
ちなみに当然と言えば当然か、挿入された図形なんかは取得しないので、まさに「図として貼り付け」で貼り付けされた図のみを対象とする場合はぴったり。

65本目。

自分の回答はこちら。

JOINについては「VBA100本ノックチャレンジ:31~40本目」の31本目でもちょっと触れました。最近ちょっと使う機会があったので今なら活用できそう。

Join
Join(sourcearray[,delimiter])
引数sourcearrayには、要素を結合する配列を指定します。
引数delimiterは省略可能です。結合する要素を区切るセパレータを指定します。

66本目。

自分の回答はこちら。

where - Windowsコマンド虎の巻
WHERE [オプション] <ファイル名パターン>
/R パス:検索対象のディレクトリを指定する※サブディレクトリ内も検索対象に含まれます。
/Q:結果としてファイル名を表示せず、終了コードのみを返す(0:検索結果あり 1:検索結果なし 2:エラー)
/F:結果のファイル名をダブルクォーテーションで囲って表示する
/T:ファイルサイズ、ファイル更新日時も表示する
/?:コマンドのヘルプを表示する
Exec (WshShell オブジェクト)
コマンドシェルでアプリケーションを実行します。
Exec メソッドを使って実行したスクリプトのステータス情報やエラー情報だけでなく、 StdIn、StdOut、および StdErr チャンネルにもアクセスできます。

たとえば「c:\temp\066.xlsm」なら、コマンドプロンプトで

where /r "c:\temp" "066.xlsm"

とすれば「C:\temp」以下のサブフォルダまで全部検索して合致するファイルを探してくれます。
このコマンドをoWSH.Execで実行して出力される結果を1行ずつ読んで対象シートのA列に出力、ってやるんだと思います。

ファイルパスから更新日時やファイルサイズを出してくれる関数についてはリンク先ツイートのとおり。

67本目。

自分の回答はこちら。

Range.Address プロパティ (Excel)
External:外部参照を返すには、 True を指定します。 ローカル参照を返すには、 False を指定します。 既定値は False です。
第12回.リストボックス(ListBox)の追加
.ColumnHeads = True
これは列見出しを表示する指定です。
ただし、このプロパティは、RowSourceを指定した場合にのみ有効となります。

68本目。

自分の回答はこちら。

TypeName関数は「VBA100本ノックチャレンジ:11~20本目」の13本目でもちょろっと触れてました。変数の型を文字列で返してくれる便利な関数。

VBA TypeName 関数
TypeName 関数は、指定した変数の型名を返します。
Variant や Object 型に設定されている型を調べたいときに使用します。

69本目。

自分の回答はこちら。

これはシンプルなので特筆することは特になし。

70本目。

自分の回答はこちら。

DoEventsがOpenイベント内で動作しなかった問題については、神髄さんご本人が検証してくださいました。
Office365の最近のアップデートで挙動が変わった模様。

VBA100本ノック 70本目:ステータスバーに1秒ごとに時刻が表示
追記
現象確認しました。
最近のupdateで挙動が変化したようです。
本来、添付画像のようにOnTimeで切り離した方が良いのですが、本解答作成時には問題なかったので先の掲載のとうりとしていました。
※記事には本件を追記します。
※現在でも365以外(2019,2013,2010で確認)では問題なく動いています。

■70本目を終えて。

内容は相変わらず難しいですが、Twitterで進捗を流すようにしてちょっとモチベーションが維持しやすくなった模様。
10月いっぱいで100本目まで終えられたら、自分のことめっちゃ褒めようと思います。