以下全部自分用につくりました。
頭ではわかってるのになんか出てこない。
これよくあるのでまとめました。
設定編
Excel高速化のためにやるやつ
お決まりの高速化に使うやつ。
With Application
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
.Calculation = Excel.XlCalculation.xlCalculationManual
End With
もろもろオフにして
With Application
.ScreenUpdating = True
.EnableEvents = True
.DisplayAlerts = True
.Calculation = Excel.XlCalculation.xlCalculationAutomatic
End With
オンに戻す。
個人的には最後にこれはつけます。
なぜかというと、全部オフ→オンに行く前にエラー→だるい
となるので最後がおすすめです。(というか配列使えばなくてもいい)
確認メッセージを消す&シートの追加と削除
シートやブックを消すときに出る確認ポップ。
あれのせいで作業が止まってしまうことありますよね。
Application.DisplayAlertsで制御できます。
Application.DisplayAlerts = False
Worksheets.Add.Name = "test"
ActiveSheet.Delete
Application.DisplayAlerts = True
ユーザー定義型変数の宣言
何気便利なユーザー定義型。
Type ex
namae As String
nenrei As Long
End Type
Sub test()
Dim a() As ex
c(1).namae = "azeti"
c(1).nenrei = 30
End Sub
連想配列
リンゴは赤いみたいな感じの連想配列。
便利です。
Dim dic as Object
Set dic = CreateObject("Scripting.Dictionary")
Set dic = Nothing
配列の大きさをかえる
どれくらいの大きさが必要かわからないときに便利。
Dim a
Dim i as Long
ReDim Preserve a(i)
エラー時の処理
On Error Resume Next
On Error GoTo 0
インプットボックス
Dim buf
buf = InputBox("入力して")
MsgBox buf
buf = InputBox(Prompt:="入力してみて", HelpFile:="", Context:=2)
MsgBox buf
値 | 型 |
---|---|
0 | 数式 |
1 | 数値 |
2 | 文字 |
4 | True/False |
8 | Rangeオブジェクト |
16 | エラー値 |
64 | 数値配列 |
フォルダパスを取得
Dim folderPath As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
folderPath = .SelectedItems(1)
End If
End With
ワードを開く
Dim wdApp As Object
Set wdApp = CreateObject("Word.Application")
wdApp.Visible = True
ユーザー定義型は定義されていませんとエラーが出た場合は、ツール→参照設定から「Microsoft Word ○○.〇 Object Library」にチェックを入れましょう。
〇はバージョン名です。
Microsoft XX.X Object Libraryと勘違いしがちですが、Wordと入ってるやつにチェックしてください。
クラスモジュールの参照渡し
callをつけて渡す。
Dim cls as Class1
Set cls = new Class1
Dim 変数
変数 = "test"
Call cls.test(変数)
セル操作
Find
Sub test()
Dim Rng As Range
Set Rng = Cells.Find(What:="test")
If Not Rng Is Nothing Then
msgbox Rng
End If
End Sub
Object.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection,
MatchCase, MatchByte, SearchFormat)
メソッド | 対象 |
---|---|
Object | Rangeオブジェクト |
What | 何を検索する?”対象” |
After | 検索位置、Range、省略OK |
LookIn | 検索の対象 数式(xlFormulas)、値(xlValues)、コメント(xlComments) 省略OK |
LookAt | 完全に同一なセルだけ(xlWhole)、一部一致OK(xlPart) 省略OK |
SearchOrder | 検索方向。列方向に検索する(xlByColumns)、行方向に検索する(xlByRows)省略OK |
SearchDirection | 前方に検索(xlNext:既定値)、後方に検索(xlPrevious)省略OK |
MatchCase | 大文字と小文字を区別する(True)、区別しない(False) 省略OK |
MatchByte | 半角と全角を区別する(True)、区別しない(False)省略OK |
SearchFormat | 書式を検索する (True)、検索しない(False) 省略OK |
削除
Range("A1").ClearContents
メソッド | 対象 |
Clear | 全て(削除) |
ClearComments | コメント |
ClearContents | 値と数式(値けし) |
ClearFormats | 書式 (色や罫線、条件付き書式など) |
ClearNotes | コメント |
ClearOutline | アウトライン |
ClearHyperlinks | ハイパーリンク |
書式変更
Range.NumberFormatLocal = "@" '文字列
Range.NumberFormatLocal = "yyyy/mm/dd" '日付、月、日
色変更
Range("A1").Interior.Color = vbRed '赤
vbBlack | 黒 |
vbRed | 赤 |
vbGreen | 緑 |
vbYellow | 黄 |
vbBlue | 青 |
vbWhite | 白 |
罫線、網掛け
Sheets("Sheet1").Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous
最終行、最終列を取得
Dim Maxcol
Dim Maxrow
'最終列
Maxcol = Cells(1, Columns.Count).End(xlToLeft).Column
'最終行
Maxrow = Cells(Rows.Count, 1).End(xlUp).Row
コピペ
Sheets("Sheet1").Range("A1").Copy Destination:=Sheets("Sheet2").Range("A1")
計算編
乱数
Randomize
Range("A1") = Rnd
Randomizeが初期化。
Rndで乱数です。
※0<Rnd<1です。
Range("A1") = Int(6 * Rnd + 1)
Intを使って整数値の範囲内で乱数を起こすことも可能です。
演算子一覧
さすがに忘れることはないけど一応。
比較系
記号 | 意味 |
---|---|
< | 小さい |
<= | 以下 |
> | 大きい |
>= | 以上 |
= | 等しい |
<> | 等しくない |
計算系
記号 | 意味 |
---|---|
+ | 加算 |
− | 減算 |
* | 乗算 |
/ | 定数の除算 |
\ | 整数の除算 |
Mod | 除算の余り |
論理系
記号 | 意味 |
---|---|
And | 論理積 |
Or | 論理和 |
Not | 否定 |
○○を含む
関数でやるとき、”*含む*”みたいに*で挟むと含むという意味になりますよね。(ちなみに””は空白)
イメージ的には*は何でもいいという感じです。
なので”*含む”とやると、左側がなんでもいいとなります。
セルで指定するときは、”*”&A1&”*”となります。
これをVBAでやるときに便利なのがLikeです。
If Range("A1") Like "azechi" Then
End If
おわり
随時更新していきます。
[temp id=2]
コメント