指定範囲内のセルに情報が入っているか調べる
CountBlank関数を使って対象のレコードに情報が入っているか調べる
Sub AAA()
MsgBox WorksheetFunction.CountBlank(Range(Cells(1, 1), Cells(1, 8)))
End Sub
For 〜NextとCaseの組合せ
繰り返し作業の中で別の場所を参照したい場合
For a = 25 To 37 Step 2
Select Case a
Case 25: b = 7
Case 27: b = 11
Case 29: b = 15
Case 31: b = 17
Case 33: b = 19
Case 35: b = 21
Case 37: b = 23
End Select
Replaceの使用例
ユーザーフォームで指定したセルの値がが該当の値の時置き換える
Check_Row = Val(Label10)
Check_Column = Val(Label11)
Sheets(1).Cells(Check_Row, Check_Column).Replace What:="△", Replacement:="▲"
Sheets(1).Cells(Check_Row, Check_Column).Replace What:="☆", Replacement:="★"
Sheets(1).Cells(Check_Row, Check_Column).Replace What:="□", Replacement:="■"
シート内のどのセルが変更されたか記録したい場合(別シートに記録)
以下のイベントマクロを管理したいシートに記述します。
記録用に別シート(例では「書換履歴」シート)を作成します。
'********************************************************
Private Sub Worksheet_Change(ByVal Target As Range)
'********************************************
'書き替えた行列を「書換履歴」シートに記録する
'複数範囲一括書換に対応
'********************************************
Dim r As Range
Dim i As Long
i = Sheets("書換履歴").Cells(Rows.Count, 1).End(xlUp).Row
For Each r In Target
Sheets("書換履歴").Cells(i + 1, 1) = Date
Sheets("書換履歴").Cells(i + 1, 2) = r.Row
Sheets("書換履歴").Cells(i + 1, 3) = r.Column
i = i + 1
Next
End Sub
'********************************************************
また、同じセルに何度も書き換えたりした場合
重複しているセル情報を削除するマクロは以下になります。
'********************************************************
Sub 重複削除()
Dim maxRow As Long
'重複しているデータを削除
maxRow = Sheets("書換履歴").Cells(Rows.Count, 1).End(xlUp).Row
Sheets("書換履歴").Range("A1:C" & maxRow).RemoveDuplicates (Array(2, 3))
End Sub
イベントマクロを一時的に停止しておきたい場合には・・・
'********************************************************
Sub EventOn()
Application.EnableEvents = True
End Sub
Sub EventOff()
Application.EnableEvents = False
End Sub
またいつまでも記録した状態ではデータが積もり積もって
大変なことに
'********************************************************
Sub クリア()
Sheets("書換履歴").Range("A:C").Clear
Sheets("書換履歴").Range("A1").Value = "日付"
Sheets("書換履歴").Range("B1").Value = "行"
Sheets("書換履歴").Range("C1").Value = "列"
End Sub
利用シーンはかなりありそうですが・・・
ステムプロット(幹葉表示)・箱ひげ図
幹(ステム)と葉(リーフ)と呼ばれる2つの部分に値をわけて表しヒストグラムに似た図になる。
今日(2020.10.22)現在のパ・リーグ規定打席以上(26名)の打撃成績を見ると
0.355 | 0.29 | 0.278 | 0.259 | 0.245 | 0.212 |
0.344 | 0.283 | 0.277 | 0.258 | 0.241 | |
0.34 | 0.282 | 0.277 | 0.251 | 0.234 | |
0.306 | 0.281 | 0.274 | 0.246 | 0.227 | |
0.294 | 0.28 | 0.264 | 0.246 | 0.227 |
ステムプロットに表すと割分が幹に、厘が葉になって以下のようになる
「幹」の数字は上から下に向かって小さい順に並び、同様に「葉」の数字も左から右に向かって小さい順に並べる
幹 | 葉 |
0.21 | 2 |
0.22 | 7,7 |
0.23 | 4 |
0.24 | 1,5,6,6 |
0.25 | 1,8,9 |
0.26 | 4, |
0.27 | 4,7,7,8 |
0.28 | 0,1,2,3 |
0.29 | 0,4 |
0.30 | 6 |
0.34 | 0,4 |
0.35 | 5 |
中央値は、26名なので13番目と14番目の平均値となる
13番目は0.274、14番目は0.277 となるので中央値は0.2755となる
続いて四分位数は
第一四分位数 7番目(0.246)
第三四分位数 20番目(0.283)
※ 最小値、第一四分位数、中央値、第三四分位数、最大値を5数要約と呼ぶ
<箱ひげ図>
VBA 丸付き数字を使う
データ内の数字を①、②・・・や➊、➋・・・Ⅰ、Ⅱ・・・で表示して目立つようにしたい場合、文字として扱うと①、②と順番に変えていくことが面倒です。
そこでUnicodeを使いたいのですがUnicode表は16進数で表示されているのが多く変数として扱うにはハードルが高い。
10進数に変換してしまえばVBA内で変数として扱えます。
ただし、最大値を意識せずにやってしまうと思わぬ文字が入ってきますので扱う最大値を考慮しながら使ってください。(Unicode一覧表で確認してください)
Sub 変数()
Dim AA
For AA = 2 To 5
Cells(AA, 1) = ChrW(8544 + AA - 2)
Next AA
End Sub
Ⅰ |
Ⅱ |
Ⅲ |
Ⅳ |
(参考1)ある文字のUnicodeを調べたいとき
Sub 調査()
Dim txt As String
txt = "勝"
Cells(2, 1) = AscW(txt)
Cells(2, 2) = Hex(AscW(txt))
End Sub
21213 | 52DD |
(参考2)Unicode(HEX)から文字に変換する場合
Sub 変換2()
Cells(2, 1) = ChrW(&H2460)
Cells(3, 1) = ChrW(2460) ’間違えると予期せぬ文字が・・
End Sub
① |
জ |
UNICODE | (HEX) | UNICODE | (HEX) | |||
① | 9312 | 2460 | ➊ | 10122 | 278A | |
② | 9313 | 2461 | ➋ | 10123 | 278B | |
③ | 9314 | 2462 | ➌ | 10124 | 278C | |
④ | 9315 | 2463 | ➍ | 10125 | 278D | |
⑤ | 9316 | 2464 | ➎ | 10126 | 278E | |
⑥ | 9317 | 2465 | ➏ | 10127 | 278F | |
⑦ | 9318 | 2466 | ➐ | 10128 | 2790 | |
⑧ | 9319 | 2467 | ➑ | 10129 | 2791 | |
⑨ | 9320 | 2468 | ➒ | 10130 | 2792 | |
⑩ | 9321 | 2469 | ➓ | 10131 | 2793 | |
⑪ | 9322 | 246A | ⓫ | 9451 | 24EB | |
⑫ | 9323 | 246B | ⓬ | 9452 | 24EC | |
⑬ | 9324 | 246C | ⓭ | 9453 | 24ED | |
⑭ | 9325 | 246D | ⓮ | 9454 | 24EE | |
⑮ | 9326 | 246E | ⓯ | 9455 | 24EF | |
⑯ | 9327 | 246F | ⓰ | 9456 | 24F0 | |
Ⅰ | 8544 | 2160 | ⅰ | 8560 | 2170 | |
Ⅱ | 8545 | 2161 | ⅱ | 8561 | 2171 | |
Ⅲ | 8546 | 2162 | ⅲ | 8562 | 2172 | |
Ⅳ | 8547 | 2163 | ⅳ | 8563 | 2173 | |
Ⅴ | 8548 | 2164 | ⅴ | 8564 | 2174 | |
Ⅵ | 8549 | 2165 | ⅵ | 8565 | 2175 | |
Ⅶ | 8550 | 2166 | ⅶ | 8566 | 2176 | |
Ⅷ | 8551 | 2167 | ⅷ | 8567 | 2177 | |
Ⅸ | 8552 | 2168 | ⅸ | 8568 | 2178 | |
Ⅹ | 8553 | 2169 | ⅹ | 8569 | 2179 | |
Ⅺ | 8554 | 216A | ⅺ | 8570 | 217A | |
Ⅻ | 8555 | 216B | ⅻ | 8571 | 217B |
UNICODE | (HEX) | UNICODE | (HEX) | UNICODE | (HEX) | |||
A | 65 | 41 | a | 97 | 61 | Ⓐ | 9398 | 24B6 |
B | 66 | 42 | b | 98 | 62 | Ⓑ | 9399 | 24B7 |
C | 67 | 43 | c | 99 | 63 | Ⓒ | 9400 | 24B8 |
D | 68 | 44 | d | 100 | 64 | Ⓓ | 9401 | 24B9 |
E | 69 | 45 | e | 101 | 65 | Ⓔ | 9402 | 24BA |
F | 70 | 46 | f | 102 | 66 | Ⓕ | 9403 | 24BB |
G | 71 | 47 | g | 103 | 67 | Ⓖ | 9404 | 24BC |
H | 72 | 48 | h | 104 | 68 | Ⓗ | 9405 | 24BD |
I | 73 | 49 | i | 105 | 69 | Ⓘ | 9406 | 24BE |
J | 74 | 4A | j | 106 | 6A | Ⓙ | 9407 | 24BF |
K | 75 | 4B | k | 107 | 6B | Ⓚ | 9408 | 24C0 |
L | 76 | 4C | l | 108 | 6C | Ⓛ | 9409 | 24C1 |
M | 77 | 4D | m | 109 | 6D | Ⓜ | 9410 | 24C2 |
N | 78 | 4E | n | 110 | 6E | Ⓝ | 9411 | 24C3 |
O | 79 | 4F | o | 111 | 6F | Ⓞ | 9412 | 24C4 |
P | 80 | 50 | p | 112 | 70 | Ⓟ | 9413 | 24C5 |
Q | 81 | 51 | q | 113 | 71 | Ⓠ | 9414 | 24C6 |
R | 82 | 52 | r | 114 | 72 | Ⓡ | 9415 | 24C7 |
S | 83 | 53 | s | 115 | 73 | Ⓢ | 9416 | 24C8 |
T | 84 | 54 | t | 116 | 74 | Ⓣ | 9417 | 24C9 |
U | 85 | 55 | u | 117 | 75 | Ⓤ | 9418 | 24CA |
V | 86 | 56 | v | 118 | 76 | Ⓥ | 9419 | 24CB |
W | 87 | 57 | w | 119 | 77 | Ⓦ | 9420 | 24CC |
X | 88 | 58 | x | 120 | 78 | Ⓧ | 9421 | 24CD |
Y | 89 | 59 | y | 121 | 79 | Ⓨ | 9422 | 24CE |
Z | 90 | 5A | z | 122 | 7A | Ⓩ | 9423 | 24CF |