• ベストアンサー

エクセル VBA

エクセルのVBAでの質問です。 1つのセルの中にカンマで処理したデータがあるとします。 例えば A組,32番,山田太郎,男,12歳,45人中35位,性格明るい この1つのセルでたとえば3番目だけの「山田太郎」を VBAで取り出す方法はあるのでしょうか。 要するに1つのセルの中でカンマで区切られたデータを 個々に取り出す方法か知りたいのです。 どなたか教えてください。 なぜこのようなことが必要かといいますと、 歯科において、レセ電が導入されることになりました。 そこでそれを開発しているのですが、 最後に点数の検算をしようと考えていまして、 その点数をセルから取り出す方法が知りたいのであります。 もしどなたかご存知でしたら、是非、ご教示ください。 よろしくお願い申し上げます。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Sub try() Dim st As String Dim v st = "A組,32番,山田太郎,男,12歳,45人中35位,性格明るい" v = Split(st, ",") ' ","で区切って3番目「0,1,2・・・で(2)のこと」 MsgBox v(2) End Sub 一例まで。

MrTakuya
質問者

お礼

大変参考になりました。ありがとうございました。 ついでにカンマで区切られたそのセル内の配列の個数を知る方法もおしえていただけませんでしょうか。 すいません。いろいろとありがとうございました。 本当に参考になりました。

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

#1です。 UBound 関数 配列の指定された次元で使用できる添字の最大値を、長整数型 (Long) の値で返します。 No.1だと、 Ubound(v) で添字の最大値(0から始まる)を求められるので、 st = "A組,32番,山田太郎,男,12歳,45人中35位,性格明るい" v = Split(st, ",") なら6になります。 ⇒v(0)="A組" ~ v(6)="性格明るい"

MrTakuya
質問者

お礼

ありがとうございます。 わからなくて、困っていましたので、 本当に参考になりました。 しかも、すぐに答えていただいて、 すごーーーく、うれしいです。 助かりました。 では、またのご活躍をお祈りしています。 ありがとうございました。

  • inara1
  • ベストアンサー率78% (652/834)
回答No.2

VBAを使わなくてもExcel関数だけでできます。 以下の式を適当なセルに書けば、そのセルに「山田太郎」と出ます。式中のA1は元の文字列が入っているセル位置です。 =MID(A1,FIND(",",A1,FIND(",",A1,1)+1)+1,FIND(",",A1,FIND(",",A1,FIND(",",A1,1)+1)+1)-FIND(",",A1,FIND(",",A1,1)+1)-1) 上は3番目の文字列を抜き出す方法ですが、1番目や2番目の文字列を抜き出すには以下のような式にします。 1番目(A組) =MID(A1,1,FIND(",",A1,1)-1) 2番目(32番) =MID(A1,FIND(",",A1,1)+1,FIND(",",A1,FIND(",",A1,1)+1)-FIND(",",A1,1)-1) この方法は「番目」が大きくなると式が長くなってしまいます。他にもっと良い方法があると思います。

MrTakuya
質問者

お礼

ご丁寧に回答いただきありがとうございました。 ちょっと長い感じがしますので、 やっぱり、別回答のsplit関数でいきます。 でも、早速ご回答頂いてありがとうございました。

関連するQ&A

  • エクセル VBA 関数

    いつも、ご回答いただきありがとうございます。 京都で歯科医院を開業しているものです。 レセ電で、日付情報が来年の4月から義務化されることになりました。 そこで、エクセルにおいて、日付情報を現在開発中なのですが、 カンマで区切られたセルに、例えば、 ",,,,,,,,,,,,,,,,," とまあ日付なので、 31個で区切られているのですが、 そこの4番目に5という数字を入れる方法はないでしょうか ",,,,,,,,,,,,,,,,," →",,,,5,,,,,,,,,,,,,"  にするというようなことですが、 配列という考え方なのでしょうけど、 こんなことを出来る関数をご存知であれば、 どなた様か教えていただけると大変助かります。 国の施策なので、しないわけにいかないので、何とか簡単に出来る方法があれば 助かると思って、悩んでおります。 どなた様かよろしく、よろしくお願い申し上げます。

  • エクセル VBA

    いつも、皆々様にはお世話になり、大変役立たせていただいております。 エクセルのデータについての質問です。 セルごとに A,B,C,D,E...... イ,ロ,ハ,ニ,ホ,ヘ,ト... と並んでいるデータがあるとします。 それをテキストデータとして取り出して、 A B C D E . . イ ロ ハ . . . と 各データを改行して取り出すことは可能でしょうか。 行列の変換ではありません。 各セルのデータをひとつずつ取り出して、 テキストデータとして1行ずつ取り出す方法なのです。 VBAで別のシートに1個ずつデータを移して、 ちまちまやっていれば出来そうなのですが、 一発でやる方法はないでしょうか。 よろしくお願い申し上げます。 なぜこのようなことが必要かと申しますと、 歯科のレセ電のプログラムの一環であります。

  • ExcelのVBAに明るい方・・・

    Excelの、Sheet1 に 1日目,鈴木くん,点数,・・・ 2日目,佐藤くん,点数,・・・ 2日目,山田くん,点数,・・・ 3日目,佐藤くん,点数,・・・ 3日目,鈴木くん,点数,・・・ 4日目,山田くん,点数,・・・ ・・・ という、元ダネの一覧表があって、 このデータを日々追加入力していくごとに、自動的に、 Sheet2 には、鈴木くんのみの一覧表のデータ 1日目,鈴木くん,点数,・・・ 3日目,鈴木くん,点数,・・・ ・・・ Sheet3 には、佐藤くんのみの一覧表のデータ 2日目,佐藤くん,点数,・・・ 3日目,佐藤くん,点数,・・・ ・・・ Sheet4 には、山田くんのみの一覧表のデータ 2日目,山田くん,点数,・・・ 4日目,山田くん,点数,・・・ ・・・ が、自動的に追加入力されるVBAの記述って、 どうすればいいんでしょうか? VBAに明るい方、どうかよろしくお願いします。

  • エクセル VBA

    先ほどの回答もすごく参考になったのですが、 要素ではなく、カンマごと取り出すという方法はどうすればよいのでしょうか。 V="A,B" W="C,D,E,F,G,H" Splitにパラメーターをつける方法とかあるのでしょうか。 つまり配列の中から、前二つを取り出すとか言う方法なのですが、 配列の一つずつを & でつなぐのも大変そうだし、、、 以下は前回と同文です。 ひとつのセルに A,B,C,D,E,F,G,H と配列があったとします。 そこから、たとえば、前半と後半の2分割とか、 別に、 前2つ、つまりAとBと 残り6つ CからHまでとか 分けて取り出す方法はあるのでしょうか。 これもレセ電の一環です。 すいません。お手数ですが教えていただけると助かります。 よろしくお願いいたします。

  • エクセルのデータで・・

    ご存じの方教えてください!! エクセルで、1つのセル内に名前とメールアドレスがカンマ(,)で 区切られて入っています。 例 山田太郎,123@456.ne.jp   ←こんな感じです。 これから、別のセルに、アドレスのデータだけ抜き出したいのですが どうしたらできますか? 教えてください~m(_ _)m

  • エクセルでの文字列の分割&結合、年齢の更新について

    テキストファイルをエクセルに読み込ませて編集した後に、テキストファイルとして保存して あるソフトで使用したいと思っています。 そのソフトの仕様で思うようにいかないのでアドバイス下さい。 [山田太郎_28歳]といった一つのセルを翌年度に[山田太郎_29歳]にしたいのですが どういう方法を取れば良いでしょうか? テキストを開く際、[区切り位置]機能を使って[山田太郎]と[28歳]でセルを分けると _(アンダーライン)が消えてしまいますし… これが不可能な場合、[山田太郎_28歳]といった一つのセルを [山田太郎],[_28歳]もしくは[山田太郎_],[28歳](アンダーラインはどちらかに) と二つのセルに分ける方法はありますでしょうか? その場合、[_28歳]もしくは[28歳]を翌年度に[29歳]にしたいのですが どういう方法を取れば良いでしょうか? 最終的には元のセルに[山田太郎_29歳]としたいです。 VBAは分かりません。

  • エクセルVBAのヒントをください

    エクセルのある列に、文字列が入っているとします。 たとえば、Aであったり、Cであったり、A,C,Fとカンマ区切りで複数の文字列(個数は不定) が入っていたりします。 このとき、一行に一つの文字列しか含まないように、カンマで区切られた文字列を展開し、 複数行に分けて格納したいと思っています。 たとえば、一番上の行のセルにA、二番目の行に「C,D,A」、三番目の行にB、四番目の行に 「E,A」と入っていたら、各行に一文字列のみ入るように、上からA、C、D、A、B、E、Aという行を 作りたいと思います。各セルに含まれる文字列の個数は不定で、規則性はありません。 基本的に、 (1)各セルに含まれているカンマの数を調べる (2)カンマの数だけ次の処理を繰り返す  ・行挿入   ・最初のカンマの位置を調べる   ・先頭からカンマまでを切り取る   ・上記の値をセルに入力  ・行挿入   ・2番目のカンマの位置を調べる   ・1番目のカンマの位置+1から2番目のカンマの位置まで切り取る   ・上記の値をセルに入力 上記をカンマの数だけ繰り返す。 といった具合にしていくのだと思いますが、このような処理をするのに はどの程度のVBAのスキルが必要ですか? 上記のヒントや、参考になるサイト、書籍があればご教授ください。

  • EXCELで条件を満たす時コピー挿入したい

    EXCEL2002ですが、以下のようなデータがあるとします。      A      B 1    山田太郎 100 2    山田花子 100,200,300 3    鈴木一郎 300 B列にカンマ区切りで入力しているデータがある場合、      A      B 1    山田太郎 100 2    山田花子 100 3    山田花子 200 4    山田花子 300 5    鈴木一郎 300 上記のように、B列のカンマ区切り分を振り分けたレコードを新たに 挿入したいのです。 尚参考までに、A列は名前などでデータ内容は多様になり、B列は ある程度決まった選択肢(20~30通り)になります。 一般の関数では無理なような気がするのですが、VBAなどでは可能でしょうか? もし可能であれば、マクロなども組んだことがないものですから、 やさしくご教授いただければ幸いです。 よろしくお願いいたします。

  • データ変換に伴なうエクセルの操作について

    他のソフトからCSV形式でエクスポートしたデータをエクセルでテキストファイルウィザードからカンマ区切りで開いた場合、一部のセルの中に余白が入ってしまいます。この余白を纏めて外したいのですが、その方法を教えてください。 例 no   名前          生年月日   1  山田 花子         1830/02/25   2  山田 太郎         1850/03/01  この時名前の後ろに空白が8文字分程入ってしまいます。 説明が下手ですみません、宜しくお願いします。

  • エクセル VBA

    いつもお世話になっております。 同じような質問で申し訳ありません。 前回の配列のことの続きなのですが、 ひとつのセルに A,B,C,D,E,F,G,H と配列があったとします。 そこから、たとえば、前半と後半の2分割とか、 別に、 前2つ、つまりAとBと 残り6つ CからHまでとか 分けて取り出す方法はあるのでしょうか。 これもレセ電の一環です。 すいません。お手数ですが教えていただけると助かります。 よろしくお願いいたします。