雪ん子パースペクティヴ

読むとちょっとタメになるエントリー。コメントあると嬉しいです。

【Powershell】Excelのセル内で改行された文字群を一つずつのセルに置き直す方法。

Powershellを使ってExcelも使う。

 

はろー、yukiです。

 

Excelのセル内で改行して情報を集約する方法。Alt+Enterでできますよね。

 

便利ではあるんですが、例えばこういうことが起きます。

f:id:yuki_sasano:20181212210108p:plain

セルの間で同じ値が発生し、重複している文字列をカウントしたい場合。

この状態で下の関数を使用してもうまくいきません。

=COUNTIF(B2:B4, "a")

 

ということで、今回のタスクはこちら。

ーーーーーーーーーーーーーーーーーーーーーーーーー

  1. セル内で改行された文字群から、一行ずつの文字列に成形
  2. 文字列を一つずつのセルに置き直す

ーーーーーーーーーーーーーーーーーーーーーーーーー

 

Excelでやろうとすると、[データ]タブの[区切り位置]から、文字ごとに区切ることが可能です。

ですが、張り付けると列(横)に広がってしまうので、行/列の入れ替えで張り付けます。

...ということをすると、できることはできますが、数が多いと大変ですよね。

 

 

 

Windows系のPCであれば、Powershellを使用しましょう。

手順はこちら(太字下線の文字を追えば、すぐにできます)。

 

Excel上で対象範囲をコピーし、テキストファイルに張り付け、任意の名前で保存し、Powershellで読込み。

それをしたのがこちら。

 

> cat .\test.txt
"a
b"
"a
a
a"
c

おっと、「"」を消すのを忘れていました。

テキストファイルに戻り、[置き換え]から「"」を全て消してください。

 

> cat .\test.txt
a
b
a
a
a
c

はい。うまくいきましたね。

あとは簡単です。Powershellで対象部分をコピーし、Excelへ貼り付けます。

f:id:yuki_sasano:20181212211025p:plain

上図のようになりましたね。

この状態であれば、COUNTIF文も使用できます。 

 

 

 

実は、今回のやり方は、けっこう手抜きです。分かりますよね(笑)。

vbaを使用すれば、今回の例よりもさらに多くのセルに対し、対応できます。

 

平日ということもありますので、ちょっと勘弁してください。

 

 

以上。