目次
メルクマール
こんにちは。伊川(@naonaoke)です。
よく、小池百合子さんが、メルクマールという言葉を使っていました。
メルクマールはドイツ語の「merkmal」を語源とするカタカナ語です。
ドイツ語「merkmal」は「気づく」という「merken」の複合語です。
物事を見分ける時に手がかりとなる特徴や特性、判断するための指標や目印のことです。
文字抽出に関しては、上の記事も参考にしてください。
問題提起
(株)IKAWAの柄久 瀬瑠子(エク セルコ)は、
競馬好きの上司から、下記の依頼を受けました。
セルの中から、競走馬の馬名だけを抽出してほしい。
ふざけるな!と思いましたが興味がわいてきました。
どのように、抽出するのか?
解決策
回答
・ExcelデータにVBAで目印(メルクマール)を意図的につけて、抽出する
文字抽出の考え方
ExcelをVBAで操作していると、何か目印があればと思うことがたくさんあります。
その時には、意図的に目印(メルクマール)を作成することです。
考え方を柔軟にすることによって、様々なコードが書けるようになります。
文字抽出 作成手順その1 データベース確認
上の図のように、カタカナの馬名を抜きたいのです。
文字抽出の手がかり
・文字は、左から始まっている。
・始まりは、数字が33文字である。
・馬名に関しては、ランダムのカタカナの組み合わせである。
・始まりは、数字が33文字である。
・馬名に関しては、ランダムのカタカナの組み合わせである。
文字抽出 作成手順その2 想像するVBAのコード
VBAのコードを組み立てる過程
・文字は、左から始まっている⇒LEFT関数を使うと想定する。
・始まりは、数字が33文字である⇒文字列の中から抽出するので、
・始まりは、数字が33文字である⇒文字列の中から抽出するので、
MID関数を使うと想定する。
・文字列の操作といえば⇒InStr関数を利用すると想定する。
・文字列の操作といえば⇒InStr関数を利用すると想定する。
では、意図的に空白を入力しましょう。
文字抽出 作成手順その3 VBAのコード
Sub 名前抽出() Dim d As Long maxrow4 = Cells(Rows.Count, "A").End(xlUp).Row For d = 1 To maxrow4 Cells(d, 1) = Cells(d, 1) & " " '半角入れる Cells(d, 3) = Mid(Cells(d, 1), 33, InStr(Cells(d, 1), " ") - 1) '馬名抽出 Next d End Sub
文字抽出 作成手順その4 完成図
ここがポイント
ここがポイント
不規則な文字列でも、あきらめてしまうとそこで終わりです。しかし、何等かの規則性を見つけることです。規則性がなければ、規則性を作成することで、文字列は操作できます。文字列操作の場合には、InStr関数が、絶対といっていいほど活躍します。InStr関数は絶対に覚えておきましょう。
まとめ
今回のまとめ
今回は、見事に馬名だけを抽出できて、
上司に褒められた柄久 瀬瑠子(エク セルコ)なのでした。。
伊川
この書籍は、本当に良い本です。
この本を熟読すれば、伊川くらいのスキルはすぐ、つきますよ。
この本を熟読すれば、伊川くらいのスキルはすぐ、つきますよ。
TwitterからのDM
突然のDM失礼致します。
伊川さんが以前、YouTubeで紹介されていた『仕事に役立つExcelデータベース』を購入しました。
紹介の通り、良書で初級の私でもわかりやすく理解できています。
これからもExcelやVBAの情報発信をしてくださればと思います。
ありがとうございました。
伊川さんが以前、YouTubeで紹介されていた『仕事に役立つExcelデータベース』を購入しました。
紹介の通り、良書で初級の私でもわかりやすく理解できています。
これからもExcelやVBAの情報発信をしてくださればと思います。
ありがとうございました。
ご視聴者様からのコメント
今日は、この動画を拝見しました^^
空白文字をいれてそこまでの数を取得する、面白い方法だと思いました。
左側の数字が一定でないなら、こんな方法も考えてみました^^
文字をひとつずつ探って、Likeを使って数字の部分だけ削除するという方法です
空白文字をいれてそこまでの数を取得する、面白い方法だと思いました。
左側の数字が一定でないなら、こんな方法も考えてみました^^
文字をひとつずつ探って、Likeを使って数字の部分だけ削除するという方法です
Sub 名前抽出2() Dim maxRow As Long Dim d As Long Dim buf As String, RightStr As String, i As Long maxrow4 = Cells(Rows.Count, "A").End(xlUp).Row For d = 1 To maxrow4 buf = Cells(d, 1) For i = 1 To Len(buf) If Mid(buf, i, 1) Like "#" Then RightStr = Mid(buf, i + 1) End If Next i Cells(d, 4) = RightStr Next End Sub
今回のサンプルファイルは、No94です。
毎日の業務が、3時間短縮できます
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。