• ベストアンサー

エクセル(2000)のセルから指定桁数を抽出(VBAor関数)

すみません!先程質問を入れたものですが、 少し変更が・・・(ちょっとあせってます・・・) セルにあるデータの文字列を後ろから数えて、スペースが見つかったら、その桁数以降のデータのみを別のセルに書きだしたいのですが、 例えば・・・ A1に「あいうえおかきくけこ_______12345」 を B2に「12345」 を書き出したい。 条件として・・・ データのあるセルの行数は、1000~2000行 Win2000、Office2000 よろしくお願いします。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんにちは。 問題のセルを全て選択してから実行します。 必ずテスト環境で試して下さい。 A1~A1000を選択するとB1~B1000に書き出します。 Sub Test() Dim r As Range, buf As Integer, i As Integer For Each r In Selection  buf = Len(r.Text)  If (r.Text Like "* *") Or (r.Text Like "* *") Then   For i = buf To 1 Step -1    If (Mid(r.Text, i, 1) = " ") Or _      (Mid(r.Text, i, 1) = " ") Then     r.Offset(0, 1) = Right(r.Text, Len(r.Text) - i)     Exit For    End If   Next i  End If Next r End Sub

rurucom
質問者

お礼

papayukaさん!いつも、ありがとうございます。 おかげさまで、今日のうちに帰れそうです。本当に助かりました。 ありがとうございました。

その他の回答 (3)

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

皆さんのご回答は長いので、短いやつを考えました。 (仮定)A1に全角で、スペースを中に含む文字列を    入力する。半角文字の時は同じで良いと思う。    両方混じる時は「FINDB」「MIDB」など    で対処可能と思う(未テスト)。 (1)B1に「=FIND(””、A1)」をいれる。    ” ”の中は全角スペースにする。    全体が半角の時は半角スペースとする。 (2)C1に「=TRIM(MID(A1,B1,LEN(A1)-B1+1))」を   入れる。 (3)中間のB1をなくすには   「=TRIM(MID(A1,FIND(" ",A1),LEN(A1)-FIND (" ",A1)+1))」をB1に入れれば良い。

rurucom
質問者

お礼

imogasiさん!ありがとうございます。 #2にて処理してしまいました。imogasiさんの回答が簡単そうですね!明日にでも試してみます。 ありがとうございました。

  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.3

スペースが1ヶ所に複数個あるのか、複数の位置に複数個あるのか、どちらかわからない(質問の例にある"あいうえおかきくけこ"の部分にもスペースが入っているとFIND関数ではスペースの位置が特定できない)ので、RIGHTS("文字列")というユーザー定義関数にしてみました。 セルB1に =RIGHTS(A1) です。 Function RIGHTS(str As String) As String Dim retstr As String Dim count As Long count = Len(str) Do While 0 <= count If Mid(str, count, 1) = " " Or Mid(str, count, 1) = " " Then retstr = Right(str, Len(str) - count) count = 0 End If count = count - 1 Loop RIGHTS = retstr End Function (このサイトの解答欄はインデントが使えないので、少々見難いですが)

rurucom
質問者

お礼

deadline!ありがとうございました。 すみません!#2にて処理してしまいした。 でも、本当にありがとうございました。明日にでもこの構文も試して見ます。

  • t_amano
  • ベストアンサー率42% (16/38)
回答No.1

質問のようにA1に文字列があるとすると B1の内容は=MID(TRIM(A1),FIND(" ",TRIM(A1),1)+1,20) となります。最後の20は抜き取りたい大き目の文字数を入れてください。内容としてはスペースを1つにしてそのスペースの位置を検索、そのスペースの右から文字を抜き取ります。文字数をカウントしてright(,)なら20は考えなくてもいいけどかえって関数が長くなるのでやめました。 参考にしてください。

rurucom
質問者

補足

早速の回答ありがとうございます。 しかしながら、実は「あいうえお_かきく」のように前のほうに別のスペースがある場合があります。 右から数えて最初のスペースを検索して、その結果から右側を取り出したいです。 すみません!説明が足らなくて・・・よろしくお願いします。

関連するQ&A

  • エクセル(2000)のセルから指定桁数を抽出(VBAor関数)

    エクセルのセルにある文字列から、半角単位で後ろから数えた桁数(スペースを含む10桁)だけをとりだして、別のセルに移したいのですが、 例えば、 セルA1に「あいうえおかきくけこ__123456」を B1に「こ__123456」としたい。 条件として *セルの後ろから数えた10桁 *スペースも含む *データのはいているセルは、1000行から2000行ぐらい よろしくお願い致します。 Win2000、Office2000

  • EXCEL 関数 条件に当てはまる行数を求める

    1行の中の、複数の列の値に条件をつけ、それに当てはまる行数を関数で求めたいのですが、どうやれば良いのでしょうか? 行数を求めるのはおそらくROWS?だと思うんですが、その行の中の複数の列の条件をどのように指定すれば良いのか分からずに困っております。 (例) 列Cに文字列"青"、列Fに数値"5"が両方満たす行がいくつあるかを、どこかのセルに関数で求める。 よろしくおねがいいたします。

  • 【EXCEL】関数を用いての抽出

    A列からF列までの各列に数値が入っていて(以下ID) 関数を用いてG列に全列(A~F)に含まれているIDだけを抜き出したい場合 どのような式になるのでしょうか? 条件としては各列の行数はバラバラ(A列は500行、E列は30行のような)で IDの桁数は上限なしです。

  • EXCEL セル内の特定の数値のみを抽出したい (関数だけで)

    セル内に数値・文字列を両方含む列があります。 数値(1) 文字列(1) 数値(2) 文字列(2) 【例】 11213234 AIUEO 21213 ABC 42321243 KAKIKUKEKO 32480 CBAAA 59343124 SA 85727 BBAC 数値(1)の桁数は同一 文字列(1)の文字数は変動 数値(2)の桁数は同一(だが、文字列(1)が変動のため、スタート位置はことなってくる) 文字列(2)の文字数も変動 ここから「数値(2)のみ」を関数で抽出したいのですが、どのようにすればよいのでしょうか? ご教授よろしくお願いいたします!!

  • 特定の桁数を抽出

    教えてください。 エクセルのVBAで、 特定の桁数を抽出するにはどうすれば、よいでしょうか。 イメージは、添付ファイルのC列のようなVBAを作りたい、 と考えています。 条件としては、 (1)先頭~10桁までを抽出 (2)それ以降は削除 (3)文字列にする、 です。 使用ソフトは、EXCEL2010です。 よろしくお願いします。

  • エクセル 行数指定し一つのセルに改行込で入れる

    日本語が下手でもうしわけないです。 エクセルのマクロにて、行数指定指定したセルを別セルに 改行を含めて入れたいのです。 具体的なやりたいこととしては、 A列に不定期間隔で不定形の文字列が入力されていて、(間は空白) その文字列から文字列の行数を読み、 B列の同じ行数分のセルをひとまとまりとし、 別シートのA1に改行込みで入れる。 次のまとまりはA2に次はA3に… といった動作をさせたいです。 例. 1.A1,A6,A9に文字列があるとする。間は空白 文字列間の行数を読む (1)A1-A5 (2)A6-A8 (3)A9-最終行 2.A列で取得した行数と同じ行数をB列で指定 (1)B1-B5 (2)B6-B8 (3)B9-最終行 3.B列で指定したセルをひとまとまりとして 別シートのA1から順に改行込みで入れる (1)シート2のA1 B1(改行) B2(改行) B3(改行) B4(改行) B5(改行) (2)シート2のA2 B6(改行) B7(改行) B8(改行) (3)シート2のA3 B9(改行) ・ ・ 最終行 ####### マクロでの実現を考えているのですが、 マクロ初心者でさっぱりわかりません。 どなたか、マクロでの記述例を教えて頂けないでしょうか。 また、関数で実現できるのであれば、そちらも教えて頂きたいです。 宜しくお願いします。

  • 関数で抽出したセルの一部の文字を変更したい

    DGET関数を使って、別シートよりデータをひっぱってくるように設定しています。 元の値はセルに入っている文字の一部のみ文字の色を変更、太字、下線をひくようにしていますが、 関数ではその文字の条件まで抽出する方法が見当たりません。 DGET関数によって抽出したデータにおいて、「あいうえおかきくけこ」のうち「あ」だけ文字色を赤色、太字、下線をひくようにしたいです どなたか詳しい方やり方を教えてください。 宜しくお願いします。

  • エクセルの関数(抽出)について

      1  2   3   4  5 A   あ   ko   ▲ ■  B   か   sa C   もへ  we D   あ   ty E   てろ   lii F   ぎ   loer G   か   ttg H   あ   rer 上のような表があったときに、A4のセル(▲)に「あ」と入れると、 A5のセル(■)に『rer』と入るような関数(又はそれに代わる方法)を ご教示ください。 やりたいこと: 2列目の中に、▲と完全一致する値(又は文字列。以下同じ。)が存在するとき、 同じ列の3列目の値を返したい。 ただし、2列目には完全一致する値が何度も登場する可能性があり、 2列目に▲と完全一致する値が複数存在する場合は、その内一番下の行 のものを選び、同じ行の3列目の値を■に返したい。 条件: ・可能であれば、2列目をキーにした並び替えなどは行いたくない。 ・現状のデータは、3000行程度のデータ量であるが、今後じょじょに増えていく。 以上です。 説明が明瞭でなく、イメージがお伝えできていないかも知れませんが、 どうかご教示頂きたく、なにとぞよろしくお願い致します。

  • エクセル 数値だけ抽出するには?

    エクセルで、文字列+スペース+数字と入力されているセルから数値だけ取り出す方法を教えていただけますか? 文字列とスペースの字数は一定で、数値の桁数は6-8桁と変動します。 A列からb列のように変換したいのです。 A列          B列 PMID:_12345678    12345678 PMID:_123456     123456 宜しくお願いいたします。

  • エクセル セルの複数削除がしたい。

    使用しているオフィスは、WORD2003になります。 例えばセルの 1行目のB列~G列まで 2行目のB列~G列まで のそれぞれのセルに文字が入っているとします。 1行目の文字を一括で消したい場合、 1行目のB列~G列までのセルをマウスで選択して、 バックスペースやデリートキー(以下:削除キー)を押せば、 通常一行目のB列~G列に入っている文字は、通常全て削除されると思います。 所が、設定を変更した覚えはないのですが、 セルをB列~G列まで選択して削除キーを押した時、 選択されている状態のまま、文字は削除されず、B列のみが直接入力?する形になってしまいます。 多分、オプション設定等で調整する事が出来るものだと思っているのですが、それらしき項目がなくて解らない状態です。 ※行ごと削除したり他にもやり方はあると思いますが、セルを複数選択して、その選択したセルに入力してある文字を、削除したいのです。 上手く伝わっているでしょうか・・・ ご存じの方がいれば教えて頂けないでしょうか。 よろしくお願いします。

専門家に質問してみよう