ExcelVBA セルの文字の取得

このQ&Aのポイント
  • Excel2010 VBAについてご教授願います。あるセルに特定のフォーマットで記述された文字列があります。その文字列から特定の部分を取得する方法について教えてください。
  • 特定のフォーマットで記述された文字列があるセルにあります。その文字列から特定の部分を抽出するVBAコードの作成方法について教えてください。
  • あるセルに特定のフォーマットで記述された文字列があります。その文字列から指定した部分を取得するExcel VBAの方法を教えてください。
回答を見る
  • ベストアンサー

ExcelVBA セルの文字の取得

Excel2010 VBAについてご教授願います。 あるセルに以下の様な内容が有ったとします。 (数字の部分は変動しますが、数字5桁+「-」+数字3桁+「-」数字3桁の  フォーマットとします。  改行も変動します。) セルの内容 12345-678-001 あああ。(改行) 12345-678-002 いいいいい12345-678-003ううう。(改行) 23456-789-010 えええ。23456-789-011 おおおおおおお(改行) 34567-890-123 かか 上記から以下の様なレイアウトで文字を取得したいと思います。 Split関数等を使用すればできるのかな、とも思いますが、 どの様に作成したらよろしいのか分かりません。 次のデータの ニューメリック5桁 - ニューメリック3桁 - ニューメリック3桁のレイアウトが 発生した時点でニューメリックのデータから前の文字までを取得するという 方法が取れればよろしいでしょうけれども、これが出来ないという事であれば 判定する方法とすれば、数字部分を変数等で与える事になろうかと思いますが、 この数字部分も変動します。 12345-678-001 あああ。 12345-678-002 いいいいい 12345-678-003ううう。 23456-789-010 えええ。 23456-789-011 おおおおおおお 34567-890-123 かか

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

  • ベストアンサー
回答No.1

こんにちは。 'あるセルに以下の様な内容''セルの内容''(改行)' という説明からして、 「ひとつのセルに セル内改行を含む文字列 がある」 という理解でいます。 求める結果の方には'(改行)'と書かれていないことから、 切り分けた文字列それぞれを複数のセル(セル範囲)に出力する、 もしくは、単に配列変数に格納できればいい、という理解でいます。 内容的には、  セルの文字列を  vbLf(セル内改行と同値)を区切り文字として、  Split()関数で配列変数に格納し、   各要素に対し、   一旦、InStr()関数で"-"の桁位置を取得して、   5桁手前以降の文字列をLike演算子で評価し、   "#####-###-###*"で始まる文字列であれば、   先頭の数字の前にvbLfを挿入し、  処理後の配列変数をvbLfで連結した文字列を  再度vbLfでSplit()関数に掛け、  求める配列を作り出します。 方法は他にもありますし、条件によっては簡略化出来そうな部分も多いですが、 比較的解り易い内容にはなっているかと。 Sub Re8909609a() Dim sBuf, arr Dim sTmp As String Dim i As Long Dim nPos As Long   sBuf = Cells(1, 1)   arr = Split(sBuf, vbLf)   For i = 0 To UBound(arr)     nPos = 1     sTmp = arr(i)     Do       nPos = InStr(nPos + 6, sTmp, "-")       If nPos Then         If Mid(sTmp, nPos - 5) Like "#####-###-###*" Then           arr(i) = Left$(sTmp, nPos - 6) & vbLf & Mid(sTmp, nPos - 5)         End If       End If     Loop While nPos   Next i   sBuf = Join(arr, vbLf)   arr = Split(sBuf, vbLf)   For i = 0 To UBound(arr)     Cells(i + 1, 2) = Trim$(arr(i))   Next i End Sub

mcs-tani
質問者

お礼

ご教授、誠にありがとうございます。 本当に感謝!感謝です!(嬉し涙) 完璧です。

関連するQ&A

  • EXCELVBA 文字の判別

    excelVBAで困っていることがあります。 あるセルに入っているデータの先頭の文字より半角数字5桁の数字を取得する処理を作っています。 先頭5文字をmid関数で取得すれば、簡単だと思っていたのですが、 データを見てみたところ、以下のようなデータがあることがわかりました。 (例)20-500(半角-),20―500(ダッシュ),20500(全角) 20 500(半角スペース),20 500(全角スペース),205(桁落ち),2050あ(全角文字付き) 5桁の数字が取得できると思われる箇所は 半角5桁で取得しなければいけません。 また、正しいデータは半角数字5桁だよ、 ということをユーザに知らせるため、半角数字5桁のデータ以外は それぞれ半角-は赤、ダッシュは青等セルの色を変更する必要があって困っています。 ご教授ください。よろしくお願いいたします。

  • excelvba セルの中のデータの取得

    Excel2010 VBAについて教えてください。 1つのセルに入っている複数文字列から、ある特定の文字からある特定の文字までの 間の文字を取得したいのですが? 例えば、A1セルに次の様な文字列が入っていたとして、例えば 「始まり」の次の文字から「終わり」の前の文字までを取得します。 (「始まり」及び「終わり」の文字のアドレスは、どこに発生するかは不明です) 取得したい文字は、 12345678、56789 56789-784545、FDSDSD です。 「A1」セルの内容は以下の通り。 あああああああ 始まり 12345678、56789 56789-784545、FDSDSD 終わり いいいいいいいい よろしくお願いいたします。 

  • excelvba 文字列の変更

    Excel2010 VBAについて、ご教授をお願い致します。 1つのセルに入力されている文字列の変更について以下の様に変更したいのですが、簡単にできる方法はございますか? (色々と試しましたが、うまくいきません。)    既内容                → 変更後内容  ・「、」(読点)+改行(読点は半角を含む) → 読点だけにする(改行を削除)  ・「。」(句点)+改行(句点は半角を含む) → 句点だけにする(改行を削除)  ・「,」 (半角のカンマ)+改行    → 半角のカンマだけにする(改行を削除)  ・「.」 (半角のピリオド)+改行   → 半角のピリオドだけにする(改行を削除)  ・改行(のみ)           → 読点(、)にする。 以下にサンプルを記述します。 ☆元データ あああ、(改行) おおお(改行) いいい。(改行) ううう,(改行) えええ.(改行) ☆求める結果の内容(「おおお」の次の文字「、」は改行を置換え) あああ、おおお、いいい。ううう,えええ. よろしくお願いいたします。

  • エクセル:セル内の文字列の最後の「,]を消したい。

    エクセル:セル内の文字列の最後の「,]を消したい。 以下のように、数字(1桁または2桁)がカンマでわかれたデータがあります。 この文字列の中で、一番最後の「,」だけ消したいのですが、 何か良い方法はないでしょうか。 1,1,1,1, ⇒最後のカンマを消したい 1,2,3,4  ⇒カンマがないのでそのままでOK 1,1,2,3,4  1,2,3,   1,11,12,

  • Excel セル内の文字だけを取り出すには

    Excelの1つのセルに 01234 ABCDEFG のように、「数字5つ(固定)+半角スペース+(任意の数の)文字」 が入力されています。数値は必ず5桁と決まっていますが、 文字列の数はさまざまです。 関数で文字の部分だけ、別のセルに取り出したいのですが、 どの関数を使うとできますか?教えて下さい。 よろしくお願いします。

  • シェルの文字列取得について

    シェル(Bash)の文字列取得についてご教授ください。 文字列:  test(12345) 上記の文字列から"12345"(括弧内の数値部分)を取り出し、変数へ格納する場合、どのように行えばよいのでしょうか? ちなみに1桁だったり2けただったりと数値の桁は変動します。 よろしくお願いします。

  • セルに入力されている数字列を 一文字ずつセルにふりわけたい

    たびたびよろしくお願いします。 ひとつのセルに6~7桁の数字が入力されてます。 (数字と数字の間にはスペースはありません) A 7桁の場合はこの数字を一文字ずつ  別のセルひとつひとつに  振り分けたいのですが 可能でしょうか? 例 「9654321」→   「9」「6」「5」「4」「3」「2」「1」 B 6桁の場合は頭にゼロを入力して   同様に別のセルひとつひとつに   振り分けたいのですが 可能でしょうか? 例 「654321」→   「0」「6」「5」「4」「3」「2」「1」  

  • セルの文字数を合わせること出来ますか?

    違うソフトにエクセルのデータを移すためにセルの文字数を合わせないといけないのです。 例えば、全角で15文字半角で30文字になるようにしなければいけないので8桁の数字コードを打ったあと22回スペースを入れてます。とても効率悪く困ってるのですが何かいい方法はありますか?勝手にスペースが入るようにならないでしょうか??よろしくお願いします m(_._)m

  • 【エクセル】 複数情報をふくむセルを内容で区切る

    こんにちは。 セルA1に ABC Bar 2013-01-19 00:33:17 47777 New World 1154789650 セルA2に Cafe du rock 2013-03-10 00:30:30 65897 New Era City 6500321540 という情報があったとして、 -で結ばれた日付のみをセルB1, B2に抽出することは可能ですか。 ↑ 上記の質問を投稿させていただき、おかげさまで回答を得られました。 しかし、欲をいえば、内容ごとに区切れたら最高なのです。こんな機能ってあるのでしょうか。 区切りたい内容は以下の通りです。 セルB1に 一番左の英字(ABC Bar) セルC1に 日付(2013-01-19) セルD1に 時間(00:33:17) セルE1に 5桁の数字(47777) セルF1に 右から二番目の英字(New World) セルG1に 一番右の10桁の数字(1154789650) 行によってはそれぞれの情報の間に1スペースだったり、2スペースだったり… また、英字の部分は文字数がまちまちです。 せめて、右から2番目の英字だけでも抽出できたらと思います。 ちなみにエクセル初心者でマクロなどよく分からないので、 できるだけシンプルな方法をご教示ください。 どうぞよろしくお願いいたします。

  • エクセル セル内の一定文字の置換

    以下のように、一つのセルに、数字がカンマで区切られて入力されているデータが数万件あります。 A列1行目 「10, 20, 30, 40, 50, 80, 110, 120, 130」 A列2行目 「10, 20, 40, 80, 110, 130」 A列3行目 「50, 100, 110, 120, 130」 ●それぞれ、2桁の数字を、始めに「0」をつけて、3桁にしたいです。 ●セルは全て文字列設定になっています。 ●「10」を検索し、「010」に置換えようとしたら、「110」も検索対象になってしまい、「1010」になってしまいました。 ★完成させたい答え 1行目 「010, 020, 030, 040, 050, 080, 110, 120, 130」 2行目 「010, 020, 040, 080, 110, 130」 3行目 「050, 100, 110, 120, 130」 関数などで短時間で出来る方法を教えて下さい。よろしくお願いします。

専門家に質問してみよう