!pattern) の違いを紹介します。 正規表現の置換で式による結果の違いを比較します。 SQL ダブルクォーテーションのエスケープ. GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~, VBAやGoogle Apps Scriptのツール開発と研修をセットで依頼される企業が増えている理由. エクセルの「区切り位置」を紹介するシリーズ。第二回目は「各フィールドの値がダブルクォートで囲まれているカンマ区切りのデータ」のダブルクォートを削除し、カンマで分割する方法を紹介していま … 正規表現 ※赤い字がメタ文字、グレーの「\」はエスケープのための「\」 bから始まってkで終わる3桁の文字列: b. k: bから始まってkで終わる2桁以上の文字列: b. ダブルクォーテーション・シングルクォーテーションで囲まれた文字列に対して処理を行う sedの使い方というよりも正規表現の書き方になりそうだが、ダブルクォーテーション・シングルクォーテーションで囲まれた文字列に対し処理を行う場合、以下のようにコマンドを実行する。 正規表現式の (?=pattern) (? :pattern) (? 2-2. CSV形式のファイルの中からダブルクォーテーションに囲まれていない数値にマッチする正規表現についてCSVファイル中にある数値をVBA(RegExp)にて以下のように置換したいです。 例)0の場合→0※そのまま例)1の場合→+1.※前に+、後ろに.例)10の場合→+10.※前に+、後ろに.例)-1の場 … 冒頭でフィールド内の改行コードの置換についても言及したが、ここまでの記事作成で疲れたので、またの機会ということで。, Excel VBAによるCSVインポート機能の自作(フィールド内の改行も取り込む), https://weblabo.oscasierra.net/tools/regex/, パターンA, パターンBを一つのグループとして、そのグループが 0回以上 繰り返す場合にマッチ. 正規表現; 1. sedでダブルクォーテーションの中にある文字列を抽出する. 今回の記事では、「各フィールドの値がダブルクォートで囲まれているカンマ区切りのデータ」を「区切り位置」で分割する方法を紹介します。, 「区切り位置」とは、エクセルシート上の、1つの列に入っているデータを「区切り文字」を目印にして複数の列に分割する機能です。, 手順のおさらいもかねて、まずは「ダブルクォートなし・カンマ区切り」のデータを分割してみます。, システムからダウンロードしたテキストファイルは、このようにカンマで区切られていることがありますね。(※なんちゃって個人情報というサイトから取得したダミーのデータです。), 貼り付け後、分割するデータの範囲を選択します。ここではA1~A11セルを選択しています。, 「カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ」を選択し、「次へ」をクリック。, 「次へ」を押すと、区切ったあとの列のデータ形式を設定する画面に進みますが、前回の記事で、すべての列のデータ形式が初期値「G/標準」であることをお伝えしました。ここでは初期値「G/標準」のままにするので、設定は飛ばします。, 各フィールドの値がダブルクォート(”)で囲まれている場合、ダブルクォートは削除して、ダブルクォートに囲まれた部分のみをエクセルシートに取り込みたいですよね。, 実は「ダブルクォートなし・カンマ区切り」のデータを分割した手順とまったく同じ操作で可能です。, エクセルシートにデータを貼り付けて、データ範囲を選択して「区切り位置」の画面を開きます。この先も操作手順は同じなので省略します。, 実行結果がこちらです。各フィールドの値がカンマで区切られて、ダブルクォートも削除されていますね。, 自動でダブルクォートを削除してくれるポイントは「文字列の引用符」です。その仕組みを見ていきましょう。, 文字列の引用符とは、エクセルに「このマークで囲まれた範囲が文字列ですよ」と伝えるものです。, 「文字列の引用符」には、デフォルト(初期設定)で「ダブルクォート」が選択されています。, “タカハシ ノリアキ”というデータの場合、ダブルクォートに挟まれたタカハシ ノリアキが文字列として認識されます。, この初期設定のおかげで、「ダブルクォートで囲まれた部分のみが文字列と認識されて、ダブルクォートが自動で削除された」というカラクリです。, 文字列の引用符「なし」の場合は、ダブルクォートも含むすべてのデータが文字列として認識されます。, この動作を確認するために「ダブルクォートあり・カンマ区切り」のデータで、文字列の引用符「なし」を選択してみます。, 実行結果がこちらです。ダブルクォートが文字列として認識されたので、削除されずに残りました。, ダブルクォートが文字列の引用符として扱われることが多いので、初期設定でダブルクォートが引用符として選択されているのは便利ですね。, 各フィールドの値がシングルクォートで囲まれたデータを区切る場合は、文字列の引用符「シングルクォート」を選択しましょう。, 今回の記事では「各フィールドの値がダブルクォートで囲まれているカンマ区切りのデータ」をカンマで区切り、かつ、ダブルクォートを削除する方法を紹介しました。, (えっ、いままで頑張ってマクロを組んでたのに…)と、ため息が聞こえてきそうなほどの便利機能ですね。, スペースが含まれるデータをスペース区切りで分割する。システムからダウンロードしたカンマ区切りのデータファイルを整形してエクセルに取り込む。, そんな作業が、プログラミング不要・エクセル関数不要で解決できる「区切り位置」の魅力を存分に紹介しています!, ノンプログラマーがプログラミングスキルを身に着ける支援ををするコミュニティ。セミナー・もくもく会・Facebookグループのサポートで「自らで学び続ける力をつける」支援、「教え合うことで学びの価値を上げる」場の提供をしています。, エクセルの「区切り位置」を紹介するシリーズ。第一回目は「区切り位置とはどのような機能か?」「区切り位置を使用して、スペースが含まれる氏名データを姓・名に分割する方法」を紹介しています。, 異なるアプリケーション間でデータを交換する際にはCSV形式がよく使われます。今回は、エクセルVBAでエクセルシートのデータをCSVファイルとして出力する方法についてお伝えしていきます。, 複数のループを使った重複排除のVBAコードを、Dictionaryオブジェクトとメソッドを使ったコードをに置き換えていく方法をご紹介しています。今回は、指定した値がDictionaryオブジェクトに既に登録されているかどうか?をチェックしてくれる、Existsメソッドのご紹介です。, ユーザーフォームを作って使ってみることを目標に、連載記事でフォームやコントロールのプロパティやメソッド、イベントをご紹介しています。今回は、コンボボックスに値をセットする方法を、コンボボックスのRowSourceプロパティを使う方法と、AddItemメソッドを使う方法の2通りご紹介しています。, エクセルVBAでセルが結合されているかどうか、またその結合されているセルの数を判定する方法を紹介します。また結合セルがある場合のエクセル表をHTML形式に出力するプログラムも合わせて紹介します。, エクセルVBAでInternetExplorerを操作するシリーズの導入編です。今回はIEを操作するときに最初にすべきセッティングと実際にWEBページを開く動作確認までをやってみたいと思います。, 「初心者でもわかるエクセルVBAのクラスモジュール」というテーマでシリーズ連載をしております。今回は、エクセルVBAで自作コレクションの要素を取得するItemプロパティの作り方をお伝えします。, エクセルVBAでProperty Letプロシージャを使ってプロパティ設定をする方法, 当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。, マネーフォワードクラウド請求書の請求書一覧の全件をスプレッドシートに書き出すスクリプト, GASでマネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出す方法. ーケンスとして表示され,非印字文字は 8 進数表記法で表示される), w ファイル名 … ãƒ•ã‚¡ã‚¤ãƒ«ã«ãƒ‘ターンスペースを追加する。w コマンドが最初に呼び出されたときにはファイルの中身はクリアされる, g … ãƒ‘ターンスペースの内容をホールドスペースの内容で置換, G … ãƒ›ãƒ¼ãƒ«ãƒ‰ã‚¹ãƒšãƒ¼ã‚¹ã®å†…容をパターンスペースに追åŠ, h … ãƒ›ãƒ¼ãƒ«ãƒ‰ã‚¹ãƒšãƒ¼ã‚¹ã®å†…容をパターンスペースの内容で置換, H … ãƒ‘ターンスペースの内容をホールドスペースに追åŠ, x … ãƒ‘ターンスペースの内容とホールドスペースの内容を交換する, b ラベル … æŒ‡å®šã—たラベルの : コマンドに分岐, t ラベル … å…¥åŠ›è¡Œã®æœ€æ–°ã®èª­ã¿ã¨ã‚Šã¾ãŸã¯ t の実行以降に代入が行われている場合,指定したラベルの : コマンドに分岐. [^"]")), 図の一番上のように、今回扱うCSVデータには、4つのカンマセパレータがある。便宜上、1番目から4番目のカンマセパレータのそれぞれについて、後続の文字列に下線を引いている。, この下線部分にパターンを見いだせる。ダブルクォーテーションがある場合、単独ではなくペアになっていることがわかる。ちなみにフィールド内のカンマの場合は、ダブルクォーテーションのペアを作ろうとすると最後に必ず1個余ることになり、上述のパターンにマッチしない。, カンマの後続が次のパターンにマッチすれば、そのカンマはセパレータである。「①任意の文字列」+「②ダブルクォーテーションで括られた文字列」+「③任意の文字列」※1 ①~③の各文字列について、ダブルクォーテーションが含まれていないこと。そうでないと、図の下線部分にて単独のダブルクォーテーションが存在することになる。※2 ①~③は、そのいずれか、または全て無くても良い。※3 ①+②のグループは繰り返し出現しても良い。, 図のオレンジ色が①、緑色が②、紫色が③に相当する。緑色の両端にダブルクォーテーションが付いていることに留意すること。ダブルクォーテーションのペアだ。, 先読み肯定グループ、先読み否定グループについては、以下サイトが詳しい。https://abicky.net/2010/05/30/135112/, オレンジ色と緑色のグループが2回出現していることになる。正規表現のオレンジ色の最後にアスタリスク「*」が付いているので、オレンジ色がなく緑色の「”b,c”」だけでも、正規表現の黄色のグループとしてマッチする。, また、正規表現の黄色の最後にもアスタリスク「*」が付いているので、グループの繰り返しの出現にマッチする。(「,d,」「”e,f,g”」)は、2回目のグループ出現としてカウントされる。, 2~4番目のセパレータについても同様の考え方で、上記の正規表現にマッチすることが分かる。, 正規表現の動作チェックをWeb上で行える。例えば、https://regexr.com/ とか、https://weblabo.oscasierra.net/tools/regex/ など。当記事の正規表現と対象テキストを設定してみた結果が下図。, マッチした部分に自動で色がつくので分かりやすい。いろいろ試すと勉強になる。試しにグループの繰り返しを指定する「*」を「{2}」に変えてみた結果が下図。(「{2}」は直前パターンの2回の繰り返しにマッチする), 1番目のセパレータがマッチした。このセパレータの後ろには、ダブルクォーテーションのペアが2個あるのでマッチしたのだ。次に「{1}」に変えてみた。, 2番目と3番目のセパレータがマッチした。このセパレータの後ろには、ダブルクォーテーションのペアが1個だけなのでマッチしたのだ。最後に「{0}」に変えてみる。, 4番目のセパレータがマッチした。このセパレータの後ろには、ダブルクォーテーションのペアが無いのでマッチしたのだ。, ここまでくれば、あとはセパレータを別文字に置換するだけだ。先の記事で自作CSVインポート機能のVBAコードを示したが、その中のrepファンクションは、上記の正規表現を使ってカンマセパレータを別文字に置換している。サクラエディタなら以下のような感じで。, これにて今回のカンマセパレータの話は終わり。 PostgreSQLなどの標準SQLは、シングルクォートで囲まれた文字列は文字列定数、ダブルクォートで囲まれた文字列はカラム名として扱います。 【エクセル区切り位置】ダブルクォートで囲まれたカンマ区切りのデータを一瞬で分割する, 詳解! 記事がありましたので引用します。 コマンドや正規表現について詳細には書かれておりませんでしたので、2.で確認していきます。 ダブルクォーテーションがある場合、単独ではなくペアになっていることがわかる。 ちなみにフィールド内のカンマの場合は、ダブルクォーテーションのペアを作ろうとすると最後に必ず1個余ることになり、上述のパターンにマッチしない。 Copyright © 2015-2020 いつも隣にITのお仕事 All Rights Reserved. 先の記事で、ExcelVBAによるCSVインポートの自作機能を紹介した。その時に端折っていた正規表現によるカンマセパレータの置換を説明する。これが理解できれば、フィールド内の改行コードと行端の改行コードが同じ場合でも対処できる。, また、サクラエディタなどのテキストエディタで、予めCSVデータを今回紹介する正規表現を使って置換しておけば、Excel標準のインポートでもレイアウトを崩さずに取り込めるだろう。, それでは本題。カンマのケースを見ていく。次のCSVデータがあるとする。  a,"b,c",d,"e,f,g",h, 目標は、カンマセパレータを別文字(ここでは@)に置換することだ。  a@"b,c"@d@"e,f,g"@h, 先に結論を示すが、フィールド内カンマを無視して、セパレータとしてのカンマだけにマッチする正規表現が以下だ。  ,(?=([^"]"[^"]")*(?!