VBA備忘録

シート名のカウントと一覧出力

■カウント

任意のセルを選択 > =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)

 

 

 

 

コメント

タイトルとURLをコピーしました