①と②の順序が入れ替わった時、自動で②を①に、①を②に変更したい。
突然、強烈に面倒くさくなった。
何が面倒くさいって、番号を一々入れ替えるのが。
私の書く週報は、良し悪しはさておき、こんな書式になっている。
例えば時系列の関係などから、①と②を入れ替えたとする。
②と①の文字が自動で入れ替わるはずもなく、次いで手作業で修正が必要になる。
これが、とても面倒くさい。
そこで、極めて限定的ではあるが、これが自動で入れ替わる関数を作成してみた。
限定的とした理由は、以下の制約があるから。
- ① ~ ⑳ のみ対応
- 数字は全て、同じ列になければならない
- 数字以外の文字が含まれてはならない。
作戦としては、こうだ。
①は、パソコンの中では「-30912」という数字で管理されている。
②は、-30192 + 1 = -30191 といった具合。
これらを踏まえると実際は、こんな感じだ。
Function GetNextNumber(target_range As Range) As String Application.Volatile If target_range.Row = 1 Then GetNextNumber = "①" Else Dim BeforeNumber As String If target_range.Offset(RowOffset:=-1) <> vbNullString Then BeforeNumber = target_range.Offset(RowOffset:=-1).Value Else BeforeNumber = target_range.End(xlUp).Value End If If BeforeNumber = vbNullString Then GetNextNumber = "①" ElseIf Asc(BeforeNumber) >= -30912 And Asc(BeforeNumber) <= -30912 + 18 Then GetNextNumber = Chr(Asc(BeforeNumber) + 1) Else GetNextNumber = "①" End If End If End Function
実際設定する時は、こんな感じだ。数式を書いているセルを、引数としている。
それでは、入れ替えて実験してみよう。
一応、想定した動きを実現できた。これで週報を書く時間と、文字入れ替えの面倒くささにまつわるストレスが、少しだけ低減できそうだ。
※決して、週報を書くのが面倒だと言っている訳ではないですよ?
と、謎の言い訳を添えておきます。
参考まで。