VBA
Excelで方眼紙のつくりかた
①リボンの表示タブで「ページレイアウト」ボタンをクリックしてから「ルーラー」チェックボックスにチェック。ルーラーが表示される。
②オプションで「詳細設定」にある「表示」見出しで「ルーラーの単位」を「センチメートル」にする
③列の幅と行の高さを1cmに直す
2つの日付間の年数や日数を求める
=DATEIF(C5,G5,”Y”) >>> 日付間の年数
=DATEIF(C5,G5,”YM”) >>> 1年未満の月数
引数にはY、M、D、YM、YD、MDが存在する
Select Case
Select Case Cells(1,1).Value
Case 1, 2
MsgBox “1か2です”
Case 3 To 5
MsgBox “3~5です”
Case Is >= 10
MsgBox “10以上です”
Case Else
MsgBox “それ以外の数です”
End Select
Range範囲内に特定の文字が一つでも含まれているかどうか
If WorksheetFunction.CountIf(Range(“A1:A10”), “前”) > 0 Then
End If
1つのセルが特定の文字列を含むかどうか
InStr(“あいうえお”, “う”) >>> 3
If InStr(Cells(1,1).Value, “前”) = 0 Then
End If
日付から年を取得
Year(Cells(1,1).Value) >>> 2023
Format(Cells(1,1).Value, “ggge”) >>> 令和5年
ggge等の引数はhttps://www.relief.jp/docs/000018.htmlを参照
列番号対応表
値が数値であるかどうか
If IsNumeric(Cells(3,4).Value) = True Then
x = 5
End If
IsNumeric関数は空白のセルでもTrueを返すため注意
値 | IsNumeric | IsNumber |
”” | TRUE | FALSE |
4月1日 | FALSE | TRUE |
21:30 | TRUE | TRUE |
“2020/04/01” | FALSE | FALSE |
“1000” | TRUE | FALSE |
1000 | TRUE | TRUE |
For Step Next
For i = 1 To 9 Step 2
total = total + i
Next
結合セルの値を取得
Cells(5,6).MergeArea(1,1).Value
VLOOKUP
vlookup(検索値、検索範囲、左から何列目を表示、検索方法)
「左から何列目」は表示したい列が検索範囲より右にある場合はエラーになるので注意
「検索方法」は完全一致の場合、0またはFALSE
XLOOKUP
xlookup(検索値、検索範囲、値を取り出す範囲、見つからない場合、一致モード、検索モード)
xlookup(B2, $AC$6:$AC$100, $BQ$6:$BQ$100, ROUNDDOWN(V44*0.03063, 0), -1, 1) の場合、
B2をAC6からAC100から探し、AC20だったらBQ20の値をセルに表示する
ただし、見つからなかった場合、ROUNDDOWN()の値をセルに表示する
一致モードは0,-1,1とあり、
0 | 完全一致が見つからなかった場合、#N/Aを返す |
-1 | 完全一致が見つからなかった場合、それより小さな値で最大の値を探す |
1 | 完全一致が見つからなかった場合、それより大きい値で最小の値を探す |
今回は-1なのでB2が136528の場合は、136528の完全一致が見つからなかった場合は、それより大きい値で最小の値を探す
検索モードは1、-1があり
1 | AC6:AC100の先頭から探す |
-1 | AC6:AC100の末尾から探す |
※XLOOKUPはEXCEL2021から登場した関数なので、EXCEL2016や2019では=xlfs.XLOOKUP()となる
もし値が入っていたなら
If Cells(i, “B”).Value <> “” Then
~~~
End If
四捨五入や切り捨て
四捨五入: round(123.45, 0) —>123
切り捨て: rounddown(123.45, 1) —>123.4
切り上げ: roundup(123.45, -1) —>130
文字列の長さを取得
Len(“sample”) —> 5
Len(“サンプル”) —> 4
LenB(“sample”) —> 5
LenB(“サンプル”) —> 8
ハイパーリンクを追加
同ブックの別シートへのハイパーリンクを追加
ActiveSheet.Hyperlinks.Add Anchor:=ActiveSheet.Cells(1, 1), _
Address:=””, _
SubAddress:=”’” & ws.Name & “‘!A1”
全てのシート名を取得
Dim ws As Worksheet
Dim i As Integer
For i = 1 To Worksheets.Count
Set ws = Worksheets(i)
Cells(i, 1).Value = ws.Name
Next
半角2文字と全角1文字で文字幅が異なる
フォントを「MSゴシック」で統一すること
Excel方眼紙
通常は幅8.38point(72pixel)・高さ18.75point(25pixel)になっているので、
幅2.50point(25pixel)にすればいい
1列を複数列に分割
1列目のデータを2~4列目に3分割する場合
Dim i As Integer
Dim j As Integer
Dim k As Integer
k = 1
Dim ws As Worksheet
Set ws = Worksheets(“Sheet1”)
For i = 1 To 5
For j = 2 To 4 Step 1
ws.Cells(k, 1).Copy
ws.Cells(i, j).Paste
k = k + 1
Next
Next
改行(便箋)
A1の値をB10以降に貼り付ける場合(一行30byteまで)
Dim s As String
Dim i As Integer
Const 行間隔 As Long = 0
Const 行桁数 As Long = 30
s = Range(“A1”).Value
For i = 10 To Cells(Rows.Count, 2).End(xlup).Row
s = s & Cells(i, 2).Value
Next
For i = 0 To (LenB(s) – 1) / 行桁数
Range(“B10”).Offset(i * (行間隔 + 1)).Value = Mid(s, i * 行桁数 + 1, 行桁数)
Next
曜日番号を取得
Weekday(“2023-03-01”)
1 | 月曜 |
2 | 火曜 |
3 | 水曜 |
4 | 木曜 |
5 | 金曜 |
6 | 土曜 |
7 | 日曜 |
〇日後の日付を取得
DateAdd(“d”, 1, “2023/03/01”)
検索範囲に検索値があるか調べる
xlookup(検索値, 検索範囲, 戻り範囲, 見つからなかった場合, 一致モード, 検索モード)
xlookup(v45, ac6:ac100, bq6:bq100, rounddown(v45*0.03063, 0), -1, 1)
一致モード
0:完全一致
1:検索値以上の最大値
-1:検索値以下の最大値
検索モード
1:先頭から末尾に向かって検索
配列内に特定文字があるか調べる
Dim s(3) As Variant
s(0) = “abc 456”
s(1) = “ABC DEF”
s(2) = “123 ABC”
f = Filter(s, “ABC”)
f(0) = “ABC DEF”
f(1) = “123 ABC”
ウィンドウサイズの変更
サイズ指定(その1)
Application.WindowState = xlNormal
Application.Width = 320
Application.Height = 160
サイズ指定(その2)
Windows(“sample.xlsx”).Width = 600
Windows(“sample.xlsx”).Height = 300
最大化・最小化
Application.WindowState = xlMaximized
Application.WindowState = xlMinimized
アクティブウィンドウのサイズ変更
ActiveWindow.Width = 600
ActiveWindow.Height = 300
ファイル名を取得
ThisWorkbook.Name
ファイルのパスを取得
ThisWorkbook.path & “\” & ThisWorkbook.Name
BACK