共通文字を削除 ①(昨日までの数独は少し休憩)

一昨日まで、Excel VBA数独を解く試みを行っていた。
できれば総当たりではなく、人間が考えるように解きたかったのだが、今のところ行き詰まっている。このままで更新がままならないため、数独は進展があるまで少し休憩する(半ば敗北宣言)。
f:id:Infoment:20190508224601p:plain
ということで今日は、先日職場で受けた質問の回答を、簡単に紹介しよう。

例)あるセルに、このような文字が入力されている。
f:id:Infoment:20190508223116p:plain

A-3とA-4の間は、セル内改行されている。この文字列を、こんな風に編集したいとのことだった。
f:id:Infoment:20190508223209p:plain

【条件】

  1. セル内改行を止めたい
  2. 出来るだけ文字数を少なくしたい ⇒ 共通する「A-」を、一つを除き除去したい

確認したところ、「A-」「B-」「AB-」など、先頭に来る英字の種類と数は複数あるものの、一つのセル内には1種類しか存在しないとのことだった。
※つまり、「A-1, B-2, AB-3」などは存在しない。

そこで質問者様と一緒に考えたコードがこちら。

Sub HogeTest()
    Dim str As String
        str = Range("C5").Value
        ' 改行を","に置換。
        str = Replace(str, vbLf, ",")
    Dim Arr As Variant
        ' 文字を"-"で分割。
        ' 二つ以上に分割できたのであれば、"-"が存在するものとして、
        ' 一旦"A-"を除去。最後に、先頭に"A-"を付して完了。
        Arr = Split(str, "-")
        If UBound(Arr) > 0 Then
            str = Replace(str, Arr(0) & "-", vbNullString)
            str = Arr(0) & "-" & str
        End If
        
        MsgBox str
End Sub

f:id:Infoment:20190508223609p:plain

何とかうまくいったようだ。
それにしても、これは永遠のテーマだとつくづく思う。

  1. 入力者によってルールが変わる
    ↓こんな場合もあるらしい
    f:id:Infoment:20190508223818p:plain
  2. 同じ人が入力しても、入力ルールが統一されているとは限らない

これら入力表現に揺らぎについては、入力規則をきつくすれば扱いにくいと文句を言われ、自由度をあげれば無法地帯と化す。道理を説けば煙たがられ、兎角人の世は住みにくい。

などと、草枕よろしくぼやいていると、次の課題が舞い込んでくる。
「『A-1~6』という場合もあるんですが・・・」

これについては、明日に続きます。

参考まで。