シート名のカウントと一覧出力
■カウント
任意のセルを選択 > =sheets()
■一覧出力
VBAのイミディエイトウィンドウを開く(Alt + F11 > Ctrl + G)
以下を入力してEnter
For Each i In ThisWorkbook.Sheets: debug-print i.name : next i
インシデント
マクロが無効のエラー
エラーメッセージ:セキュリティ上の理由から、エンタープライズ管理者がこのドキュメント内のマクロを無効にしました。
対象のマクロを含むエクセルを右クリック>プロパティ>全般タブの最下部に表示されるセキュリティメッセージで『許可する』にチェックを入れる
※以降、プロパティを開いても、このセキュリティメッセージは表示されなくなる
■Nextに対応するForがありません。
For文の中のEnd Ifがない
■中断モードでコードを実行することはできません
アドオンのせいっぽい
https://qiita.com/thakaz/items/113c689ea9e8fed3080b
エラーメッセージの非表示
コンパイルエラー
自動構文チェックを無効化する
ツール> オプション >自動構文チェック
文字列の置き換え
Replace (対象文字列, 検索文字列, 置換文字列)
ただ、めちゃ重い
Excel VBA Replace 関数で文字列を高速で置換する方法と速度検証
vba コメントアウト ツールバー 無い
表示> ツールバー > 編集
■セルに関数を設定
repoSh.Cells(i, 3).Formula
= “関数 “
動的に作れないが、 頑張って文字列を&でつなげて関数作るしかない
■URLを開く
endRow = sh.Cells(Rows.Count, TARGETCOL).End(xlUp).Row // 最終行
Dim targetVal As Variant
For i = HEADROW + 1 To endRow
targetVal = sh.Cells(i, TARGETCOL)
sh.Hyperlinks.Add(Anchor:=sh.Range("A1"), _
Address:=targetVal).Follow
Next i
sh.Range("A1").Delete
■文字列、 含む: instr
instrは文の中の検索文字列の位置を返す
文字列が存在しない場合は0を返す。
instr(文, 検索文字列)
文字列が存在しない場合は0を返すので、IF文で分岐できる
if instr(文, 検索文字列) Then
■全角を含むかどうか
・文字列が存在すればTrue、存在しなければFalesと同じ扱いになる
Len(targetVal) <> LenB(StrConv(targetVal, vbFromUnicode))
■全セル消去
[ShName.]Cells.Clear
■Forを逆順にする ※空白行削除
For i = lastRow To firstRow Step -1 // 最終行を先に指定する点に注意
If sh.Cells(i, TARGETCOL) = "" Then
'A列が空白なら行削除
Application.Rows (i).Delete
End If
Next
■日付
Year(Date)
Month (Date)
Day (Date)
■テキストファイルの読み込み (UTF-8対応、1行ずつ)
filepath = "C:/…/import.txt"
With CreateObject("ADODB.Stream")
.Open
.Charset = "UTF-8" // BOMあり、BOMなし両対応
.LineSeparator = -1'-1=CRLF
.LoadFromFile filepath
'1行毎に処理
Do Until .EOS
TextLine = .ReadText(-2) // 1行取り出す
// 処理‥‥‥‥
Loop
.Close
End With
■CurDirは要注意
カレントディレクトリの初期値はOSでは一般的に\User\Documentを指す。
■For文のループ回数、 endを可変にしたい
Step -1 で後ろからやる
■Nothing判定
If target is nothing then
逆
if not target is nothing then
■Rangeオブジェクトが勝手にString型になる
> 参照だから評価後の値になるため自然な挙動。
■オブジェクトが必要です、エラー
Dim a As Range
Set a Range(“A1”)
sampleSub(a) // エラー
> Callを忘れている。
Call を付けないとFunctionとして戻り値を求められる。
その戻り値を格受け取るオブジェクトが無いというエラー。
Call sampleSub (a)
コメント