3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

文字列データの整形はStrconv関数、Replace関数でたいていなんとかなります

2019年5月31日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

5月も、今日で終わりですね。

先日、自宅マンションの廊下でコクワガタのオスを捕まえました。
今季初です。

去年捕まえたクワガタが産んだ卵もサナギになっています。
夏はもうすぐだな、と感じます。

今日のメルマガでは、マクロでの文字列データの整形について書きます。

というのは、ちょうど、以下のような問いあわせをいただいたので。

型式ごとに月別の購入データを作成する時に、元データを半角関数に整えてピボットで集計しています。
同じ商品でも微妙に抽出するエクセルシートで表記が違う場合があります。
プログラムで表記を整える(型式を統一)指示はできるのでしょうか?
数あり(例)データのabc-zとabcz、ABC-Zは同じ商品、bcd-zとbcdzとBCD-Zは同じ商品と言った具合に。

以下は、僕からした回答。(に、ちょっと編集+追記をしたもの)

こんにちは。

文字列の書式を整えるには。
いろんな関数がありますが、基礎編で登場する基本的なものに加えて、trim関数、strconv関数、replace関数を組み合わせればたいていなんとかなります。
以下のとおり。

Sub MojiretsuSample()
	 Range("B2").Value = " AaBbCc−Dd " '←セルB2にテストデータ投入

	'以下が本番
	 Dim st As String
	 st = Range("B2").Value
	 Debug.Print st

	 Range("C2").Value = Trim(st)
	 Range("D2").Value = StrConv(st, vbLowerCase + vbNarrow)
	 Range("E2").Value = Replace(st, "−", "")
	 Range("F2").Value = Trim(StrConv(st, vbLowerCase + vbNarrow))
	 Range("G2").Value = Trim(Replace(StrConv(st, vbLowerCase + vbNarrow), "-", ""))
End Sub

複数行にあるデータを整形するには、上記に基礎編で学ぶFor Next構文を組み合わせます。
以下のとおり。

Sub MojiretsuSample_ForNext()
	 Range("B2:B11").Value = " AaBbCc−Dd " '←セルB2:B11にテストデータ投入

	'以下が本番
	 Dim st As String
	 Dim gyo As Long

	 For gyo = 2 To 11
		 st = Range("B" & gyo).Value
		 Debug.Print st
		 Range("C" & gyo).Value = Trim(st)
		 Range("D" & gyo).Value = StrConv(st, vbLowerCase + vbNarrow)
		 Range("E" & gyo).Value = Replace(st, "−", "")
		 Range("F" & gyo).Value = Trim(StrConv(st, vbLowerCase + vbNarrow))
		 Range("G" & gyo).Value = Trim(Replace(StrConv(st, vbLowerCase + vbNarrow), "-", ""))
	 Next
End Sub

上記のサンプルでは以下のとおりに文字列を整形しました。
[1] 文字列前後のスペースを削除
[2] ハイフンは消す
[3] 全部小文字に
[4] 全部半角に

[3], [4]では、「全部大文字に」とか「全部全角に」といったことも可能です。
strconv関数でできることについては、Microsoftの公式ページで調べてみてください。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/strconv-function

なお、
「エクセルに値が入ってしまっているから、マクロをガシガシ書いて修正する」というのも解決アプローチのひとつですが。
「入力フォームを用意し、データベース利用者がおかしな値を入れられないようにする」というのもこういう仕事では有力なアプローチです。

そのときは、エクセルマクロのフォーム機能を使います。
以下に動画デモがあります。
https://www.exvba.com/demo_formsample.php

☆この記事に関連する講座:

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド