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数要約と呼ぶ

<箱ひげ図>

f:id:ava7545:20201023143205p:plain



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