エクセル97と2000VBAでの区切り方法

このQ&Aのポイント
  • エクセル97と2000VBAを使用して、特定のデータのスペース区切りを行う方法について説明します。
  • 通常、エクセルではデータのスペースごとに区切られますが、特定のデータの場合はスペースで区切らずにひとつのセルにまとめたい場合があります。
  • このような場合、マクロやVBAを使用して解決することができます。適切なコードを組み合わせることで、目的の区切り方法を実現することができます。
回答を見る
  • ベストアンサー

エクセル97と2000VBAでの区切り方法

下記データがひとつのセルに収まっているとします。 2 DE1B-24 H1 H2 H3 HIROSE 24PIN 普通にエクセルでデータのスペース区切りを使うと、スペースごとに区切られますが、私のやりたいことは違って「H*(*は数値)」と並んでる箇所はスペースで区切らず、ひとつのセルにまとめておきたいのです。(その他はスペースで普通に区切ります) 尚、「H*」はアルファベットと数値の組み合わせのデータで(これは決まっています)で、「CN*」や「FIN*」とかあったりします。また*は一桁とは限りません。データも3つとは限らず1つの場合や3つ以上の場合があります。 説明下手ですが理解していただいた方々、マクロやVBAを使ってどうにかならないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

少々長くなってしまいました。なかなかおもしろい問題?でした。 分解したいセルを選択して、下記マクロを実行します。 分解したいセルの右隣から横に分解するはずです。    (当方Excel2000です。Excel97でも問題ないでしょう) Const Alp1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Const Alp2 = "abcdefghijklmnopqrstuvwxyz" Const NUM1 = "0123456789" Sub Bunkatu()   Dim rg As Range     '// セル   Dim str As String    '// 対象の文字列   Dim elm As String    '// 個々の文字列   Dim outElm As String   '// 出力する文字列   Dim pot As Integer    '// 半角スペースの位置   Dim col As Integer    '// 行、列カウンタ   Dim chkFlg As Boolean  '// 分割するかどうかのチェックフラグ      For Each rg In Selection     str = rg.Text & " @@@"  '// 最後の文字の処理のため最後に『番兵』をつける     col = 0: outElm = ""     pot = InStr(str, " ")     While pot > 0       elm = Left(str, pot)              '// 分割するか判定する       If chkBunkatu(elm) = True Then         If outElm <> "" Then           col = col + 1: rg.Offset(0, col) = outElm         End If         col = col + 1: rg.Offset(0, col) = elm         outElm = ""       Else         outElm = outElm & elm       End If              str = Right(str, Len(str) - pot)       pot = InStr(str, " ")     Wend   Next End Sub '// 文字が、英字→数字→の構成なら『TRUE』を返す関数 Function chkBunkatu(ByVal elm As String) As Boolean   Dim L As Integer     '// 文字カウンタ   Dim pot As Integer    '// 文字を調べる位置   Dim AlpChk As Boolean  '// 英字のチェックフラグ   Dim NumChk As Boolean  '// 数字のチェックフラグ   Dim chk As Boolean    '// 条件に合うかのチェック      elm = Trim(elm)   '// 左から英字だけか調べる   pot = InStr(Alp1 & Alp2, Left(elm, 1))   While Len(elm) > 0 And pot > 0     AlpChk = True     elm = Right(elm, Len(elm) - 1)     pot = InStr(Alp1 & Alp2, Left(elm, 1))   Wend      '// 右から数字だけか調べる   pot = InStr(NUM1, Right(elm, 1))   While Len(elm) > 0 And pot > 0     NumChk = True     elm = Left(elm, Len(elm) - 1)     pot = InStr(NUM1, Right(elm, 1))   Wend      chkBunkatu = True   If elm = "" And AlpChk = True And NumChk = True Then     chkBunkatu = False   End If End Function

poppoyaya
質問者

お礼

どうもありがとうございます。 処理に時間がかかってしまうのは仕方の無いことなんでしょうか。 参考に使用させていただきますm(__)m

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

実例でももう少し沢山挙げないと質問の意味が取れません。 >普通にエクセルでデータのスペース区切りを使うと、スペースごとに区切られますが そうでもないです。カンマで区切るのが一番代表的です。 >「H*(*は数値)」と並んでる箇所はスペースで区切らず ->しかし実例ではH*のあとがスペースが入っている例を上げておられるが、実際はどうなのでしょう。 H1H2H3HIROSEとなっているのでしょうか。 >その他はスペースで普通に区切ります 普通にスペースで区切ると、どんな困った(したいような状態と反する)状態になるのですか。 >「CN*」や「FIN*」とかあったりします 「CN*」や「FIN*」は「F*」と同じような接頭辞扱いですか。別セルにしたいのでしょうか。 「F*」「CN*」や「FIN*」のほかにどんな記号が、何種類ぐらいあるのでしょうか。 ○プログラムを組める前提は、文章できっちり表現できることです。文章に表現できても、プログラムにするには難しいことも多いです。 他人にやらせる場合はなおさらです。 (1)スペースで一旦区切る。->各々を各セルに分散する。 (2)分散したセルの中身を見て、「F」、「CN」、「FIN」で始まるストリングに注目する。 (3)切り出す終りは、続く数字の終りとする。 (4)切り出せたら、「それより前」「切りだし部分」「その後の部分」と3セルに分散し、後続部分セルは右列へずらす。 こう言うタイプの文字列を処理するプログラムは、力ずくのスッキリしないプログラムになります。

poppoyaya
質問者

補足

説明不足ですみません。補足して行きます。 まず、データの例は 2▲DE1B-24▲H1▲H2▲H3▲HIROSE▲24PIN となっています(▲はスペース)。スペースは全角の時もあれば半角の時もあり、何個もスペースが入ってる時がありますが、必ずスペースでデータ分けされています(カンマ等ではデータ分けされていません)。 VBAでやりたい事はスペースで区切った時に H1▲H2▲H3の部分はひとつのセルにまとめたいと言うことです。 >そうでもないです。カンマで区切るのが一番代表的です。 →今回私が挙げたデータはスペースでデータ分けされているのでスペースで区切ろうと思っています。 >しかし実例ではH*のあとがスペースが入っている例を上げておられるが、実際はどうなのでしょう。 →「H*」のデータが並んでいるところもスペースでデータ分けされていますが、そこだけ区切りたくないと言う意味です。 >普通にスペースで区切ると、どんな困った(したいような状態と反する)状態になるのですか。 →スペースで区切ると同じセルにまとめておきたいデータ(例で挙げたH1▲H2▲H3部分)まで区切られてしまいます。 >「CN*」や「FIN*」は「F*」と同じような接頭辞扱いですか。別セルにしたいのでしょうか。 →これらのデータは同じセルにしたいです。 >「F*」「CN*」や「FIN*」のほかにどんな記号が、何種類ぐらいあるのでしょうか。 →区切った時にひとつのセルにまとめておきたいデータは必ず「アルファベット+数値」の組み合わせになっていますが、アルファベットの組み合わせは無限大です。

関連するQ&A

  • Excel(mac)での桁区切り点が付けられない

    Excelは苦手で仕事でも遅れがちになってしまいますが、今特にこれらの2点に困っています。知っている方がいましたら教えてください。 (1)Excelで大量のデータに一括で桁区切りのカンマを付けようと思い、「セルの書式設定」→「表示形式」→「数値」→「桁区切りにチェック」(ツールバーの「桁区切り点」ボタン)を使用したのですがかかりません。がその後セルを一つずつダブルクリックするとカンマが表示されます。なぜこうしたことが起こるのでしょう?解決方法はありますか? (2)数値の上2桁の後ろに半角スペースを一括で入れたいのですが何か良い方法はあるでしょうか? どうぞよろしくお願いします。

  • エクセル2003 数値の桁区切りについて2点質問があります。

    エクセル2003 数値の桁区切りについて2点質問があります。 ツールバーにある桁区切りスタイルを選択すると、数値の後にスペースができませんが、 セルの書式設定-数値-『桁区切り(,)を使用する』を選択すると数値の後に スペースが発生します。 (1)このスペースは何の為でしょうか。 そのスペースを消去するには、セルの書式設定-分類-ユーザー定義- ここから、#の後に『-』がついているものを選択して、『-』がスペースなので 消去することにより、数値の後のスペースがなくなるということを学びました。 (2)ユーザー定義の中には、#と『-』のものはたくさんあり、¥、$、()などが ついていなければ、どれを選択しても『-』を消去すると数値の後のスペースは なくなり、私が望んだような結果になりますが、どれを選択しても問題ないのでしょうか。 ぐだぐだの内容ですみませんが、ご教示どうぞ宜しくお願いいたします。

  • エクセルの数値の桁区切りについて

    エクセルの桁区切りがいつの日からか「@」になってしまいました 以下のように表示されています ■これまで 123,456 ■今 123@456 数値が全て「,」ではなく「@」で区切られているのでキモチ悪いです・・・・。 ツールバー>書式>セル>セルの書式設定>表示形式 の画面で「分類」で「数値」を選ぶと「桁区切り(@)を利用する」となっていて@を変更できません。 桁区切りは利用しなければ@は表示されないのですが、高額の数値を扱うので 元通りに「,」として桁区切りを表示させたいです。。。。 どうすればこれまでの状態に修正できますか?? 教えてくださいm(_ _)m

  • 桁区切りの方法について。

    “ピポットテーブルフィールド”内の数値に桁区切りを付ける場合 “ピボットテーブルフィールド”の“表示形式”からセルの書式設定で桁区切りを付けるのとExcelの書式設定ツールバーの“桁区切りスタイル”を使うのとでは 何か違いがあるのでしょうか? 私の持っているテキストでは “ピボットテーブルフィールド”の“表示形式”から桁区切りを付けるようになっているのですが 書式設定ツールバーの“桁区切りスタイル”を使う方が簡単なように思います。 何か意味があるのでしょうか? 宜しくお願い致します。

  • VBAでの桁区切り表示について

    データベースからSQL文よりデータをSELECTして、Excelのセルに表示しています。 その際、数値を下記のように桁区切り表示したいのですが、どのようにしたらできるのでしょうか。 (1)100   → 100 (2)1000   → 1,000 (3)0.25   → 0.25 (4)1.75   → 1.75 (5)1111.25 → 1,111.25 もし、桁区切りと小数点以下を表示できない場合は、小数点以下を切り上げ表示したいと 思っています。 (3)0.25   → 1 (4)1.75   → 2 (5)1111.25 → 1,112 <今のプログラム> ★DBよりデータをSELECT Do Until .EOF    Cells(i, 2).Value = .Fields(0).Value    i = i + 1    .MoveNext Loop

  • Excelで、桁区切り使用時でも"0"は"0"と表示する方法

    Excel2002を再インストしたら、ツールバーの桁区切りアイコン","を使ってセルに桁区切りを設定すると、セルの中身が"0"の場合"-"と表示される様になってしまいました。 セルの書式で変更は可能ですが、毎回変更するのは非常に大変です。桁区切りでデフォルトで"0"は"0"と表示する方法をご教授ください。 なお、今まではそんな事はなかったし、前回も特に"0"は"0"と表示する様特別な設定をした記憶はありません。 よろしくお願いします。

  • =A1& "円です" でも桁区切りで表示させたい

    セルに1200と入っていて、ほかのセルで、=A1& "円です"としてるのですが その時に1,200円です、って表示させる方法はありますか? 桁区切りにしたいです。 参照元のセルの書式設定で、数値にして桁区切りにしても意味はなかったです。

  • エクセルでの数値の表記方法(桁区切りや小数点)

    数値に桁区切り表示や小数点表示をする場合、日本や英米では、例えば1千2百34万5千6百78小数点9なら、12,345,678.9 のように、桁区切りはカンマ、小数点はピリオドで表記しますね。 ところがヨーロッパでは、ドイツ、イタリア、ベルギーなどでは、12.345.678,9 のように、桁区切りはピリオド、小数点はカンマで表記します。 また、フランスやロシアでは、12 345 678,9 のように、桁区切りはスペース、小数点はカンマで表記します。 スイスでは言語(独、仏、伊)にかかわらず、12'345'678.9 のように、桁区切りはアポストロフィー、小数点はピリオドです。 Window自体を「地域設定」で直してしまえば、国別にあわせ数値の表記方法は如何様にも対応はできると思いますが、実は今作成しているエクセルはシートごと数値の表記を変えたいのです。1シート目には日本語、2シート目には英語、3シート目がフランス語のようになっており、各シートは1枚目に入力した数値を参照して計算し、表示されます。したがって、地域設定は使えないと思います。 このようにシートごとに数値の表記方法を変えるにはどうしたらよいのでしょうか? ご教示くださいませ。

  • Excel2007の桁区切りスタイルに関する質問です。

    Excel2007の桁区切りスタイルに関する質問です。 数値を入れて、桁区切りスタイルにすると、書式形式が通貨となります。 たとえば、1200本とか、2350個をあらわす数値データでも、桁区切りをいれると表示形式は通貨と表示されます。 桁区切りをする数値って、通貨だけではないと思うのですが、なぜ、通貨と限定するのでしょうか。 初心者なのでつまらない質問をしているかもしれませんが、疑問なのでどなたか教えてくださいますか。

  • エクセルデータからスペースを取り除く

    エクセルにデータを貼り付けたのですが、下2桁にスペースが入っていて、数値認識がされません。 数値がすべて同一桁数であれば、「データ」「区切り位置」「スペースによって右または・・・」で、下2桁のスペースを削除できます。しかし桁数は様々で、データのプレビューでは、すべて左詰めになっていて、データ量もあるので大変です。 すみません、教えてください。 25,410&nbsp;&nbsp; 195,346&nbsp;&nbsp;

専門家に質問してみよう