共通文字を削除 ①(昨日までの数独は少し休憩)
一昨日まで、Excel VBAで数独を解く試みを行っていた。
できれば総当たりではなく、人間が考えるように解きたかったのだが、今のところ行き詰まっている。このままで更新がままならないため、数独は進展があるまで少し休憩する(半ば敗北宣言)。
ということで今日は、先日職場で受けた質問の回答を、簡単に紹介しよう。
例)あるセルに、このような文字が入力されている。
A-3とA-4の間は、セル内改行されている。この文字列を、こんな風に編集したいとのことだった。
【条件】
- セル内改行を止めたい
- 出来るだけ文字数を少なくしたい ⇒ 共通する「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
何とかうまくいったようだ。
それにしても、これは永遠のテーマだとつくづく思う。
- 入力者によってルールが変わる
↓こんな場合もあるらしい - 同じ人が入力しても、入力ルールが統一されているとは限らない
これら入力表現に揺らぎについては、入力規則をきつくすれば扱いにくいと文句を言われ、自由度をあげれば無法地帯と化す。道理を説けば煙たがられ、兎角人の世は住みにくい。
などと、草枕よろしくぼやいていると、次の課題が舞い込んでくる。
「『A-1~6』という場合もあるんですが・・・」
これについては、明日に続きます。
参考まで。