Registered 2022.09.09 Update 2023.05.21 技術習得:業務系アプリQ&A,独自開発
Registered 2022.09.09 Update 2023.05.21 技術習得:業務系アプリQ&A,独自開発
送り状や宛名ラベルの作成で住所録を扱うことがあります。
基本はわかりやすいのですが、気になるのが「データが足りない」ことと「表記がバラバラ」なこと。
Excelでは関数が使えるので、データの整形が可能です。
文字列の取り出しや置換になるので、以下の関数を知っておくと良いでしょう。
また、純粋な文字の置換や削除ではExcelの検索と置換、英数字の半角と全角の置換は以下で紹介するVBAがおすすめです。
文字列操作 | |
---|---|
LEN | 文字列又は対象セルの文字数を求める。 |
LEFT | 左端から指定した文字数分の文字列を取り出す。 |
RIGHT | 右端から指定した文字数分の文字列を取り出す。 |
MID | 文字列の内、指定位置から指定数分だけ文字列を取り出す。 |
FIND | 指定した文字列の位置を調べる。 |
REPLACE | 指定した文字数の文字列を置換する。 |
CONCATENATE(CONCAT) | 指定範囲の文字列を連結する。 |
TEXT | 数値を指定した表記に置換する。 |
論理 | |
IF | 条件式。もし1ならGO、2ならEndなどが可能。 |
AND | すべての条件を満たすか調べる。 |
OR | いずれかの条件を満たすか調べる。 |
NOT | 条件が満たされないことを調べる。 |
TRUE | 真であること。条件式で使う。 |
FALSE | 偽であること。条件式で使う。 |
検索と行列 | |
LOOKUP | 1行又は1列の範囲を検索する。 |
VLOOKUP | 縦範囲(行方向)を検索する。 |
HLOOKUP | 横範囲(列方向)を検索する。 |
XLOOKUP | 縦横に検索する。Office365とExcel2021が対応 |
INDEX | 指定した行列の位置にある値を求める。 |
MATCH | 検索値の相対位置を求める。 |
XMATCH | 検索値の相対位置を求める。Office365とExcel2021が対応。 |
演算子 | |
算術、比例 | 関数と組み合わせる。 |
文字列 | 「&」で文字列を繋げられる。 |
郵便番号の例としてよくある4パターンが以下のものです。
「000-0000を手入力」パターンは、ハイフンが必要な時はそのまま使え、ハイフンが不要な時は置換で削除できるので汎用性が高いです。
この入力方法は一般的なのか、人からもらうと高確率でこの入力規則が適用されています。
しかし、汎用性の低い「2.」から「4.」も存在します。
この3種は数式や置換で規則を変換する必要があり、ひと手間かかります。
「0000000」で入力、又は書式設定で見た目を変えているが実際は「0000000」の場合、TEXT関数で置き換える方法が有効です。
=TEXT(A1,"000-0000")
A1が7桁の郵便番号が入っているセルです。
こちらも関数で解消できます。
=TEXT(A1,'000')&"-"&TEXT(B1,'0000')
A1が3桁の数字、B4が4桁の数字が入っているセルです。
「漢字とかな、カナ」は全角、「英数字」は半角、複数あるハイフンは「-」に統一する時はマクロ(ExcelVBA)に限ります。
以下は選択範囲内の表記統一で実際に使っているものから引用しました。
'変数の宣言を強制する
Option Explicit
Sub henKanMacro()
'動作が遅くなるため、画面の再描画/自動計算を停止
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'謎の文字コードハイフンがあるので、ハイフンを半角に統一する
'以下はhttps://www.wordvbalab.com/code/3178/より
Selection.Replace what:=ChrW(&H2010), replacement:="-", lookat:=xlPart
Selection.Replace what:=ChrW(&H2011), replacement:="-", lookat:=xlPart
Selection.Replace what:=ChrW(&H2012), replacement:="-", lookat:=xlPart
Selection.Replace what:=ChrW(&H2013), replacement:="-", lookat:=xlPart
Selection.Replace what:=ChrW(&H2014), replacement:="-", lookat:=xlPart
'Selection.Replace what:=ChrW(&H2015), replacement:="-", lookat:=xlPart
'これを有効にすると、?になる箇所が多いので封印しています。
Selection.Replace what:=ChrW(&H2043), replacement:="-", lookat:=xlPart
Selection.Replace what:=ChrW(&H2212), replacement:="-", lookat:=xlPart
Dim re As Object
Dim Cell As Range
Dim Match As Object
Dim Str As String
' 正規表現オブジェクトを作成
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "[。-゚]+" ' 1文字以上の半角片仮名
re.Global = True ' 検索範囲はグローバル
' 選択されたセル範囲について、以下の処理を実行
For Each Cell In Selection
Str = Cell.Value
If Str <> "" Then
' 半角変換可能な文字を全て半角に変換
' 全角片仮名文字もいったん半角片仮名に変換される。
Str = StrConv(Str, vbNarrow)
' 1文字以上の半角カナを検索し全角に変換
' 半角片仮名文字の直後に濁点・半濁点があればここで合成される。
For Each Match In re.Execute(Str)
Str = Replace(Str, Match, StrConv(Match, vbWide), , 1)
Next
Cell.Value = Str
End If
Next
'画面の再描画/自動計算を再開
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
'メッセージで最終確認を促す
MsgBox ("ハイフンが?に変換されていないか確認してください。")
End Sub
注意点は「ハイフンが?に置換される」可能性です。
このマクロを実行した場合、検索文字列「~?」を検索してクエスチョンマークが無いか確認してください。
住所録は見た目重視の表を作ると再利用時に面倒が生じます。
再利用が考えられるデータは「データ用シートに1件1行、1項目1列で入力」し、印刷や閲覧は専用シートを作ってデータ用シートを参照する方式がおすすめです。