• 締切済み

文字列を取り出す

A列に[ No.××× ] あああああ・・・と入力されています。 毎回入力される行数が違います(100~300行) B列にNo.×××という文字列だけ取り出すために下記の関数が入っているのですが A列に入力のあった分だけをマクロで処理できませんか。 =LEFT(RIGHT(A2,LEN(A2)-FIND("[ No",A2,1)),8) 現在は300行目までこの関数が入った状態で、エクセルが重い気がします。

みんなの回答

  • snc35744
  • ベストアンサー率20% (8/39)
回答No.1

Sub ZZZ() Dim L As Long '開始行 L = 1 'A列が空白でない間、繰り返す Do While Cells(L, 1) <> "" '”[”と”]”の間の文字列をB列に書き込む Cells(L, 2) = Mid(Cells(L, 1), _ InStr(1, Cells(L, 1), "[", vbTextCompare) + 1, _ InStr(InStr(1, Cells(L, 1), "[", vbTextCompare), Cells(L, 1), "]", vbTextCompare) - 2) L = L + 1 Loop End Sub

luv-snow
質問者

お礼

出来ました!ありがとうございました

関連するQ&A

  • エクセルの文字列・数値【長文です】

    昨日、LEFT関数の使い方を教えていただきましたが、これですとLEFT関数を用いたところが【文字列】として認識されました。【数値】として認識させる方法を教えてください。 初心者で申し訳ございません。 昨日の質問・いただいた回答は以下の通りでした。 ≪質問≫ [123456/あいうえお/abc][234567/かきくけこ/efg]のようなデータがいくつかあって(例えばA列に)、B列に[123456][234567]、C列に[あいうえお][かきくけこ]、D列に[abc][efg]と表記できるような【関数】を教えてください。 ≪いただいた回答≫ A1にデータがあったとして。 B列 =LEFT(A1,SEARCH("/",A1,1)-1) C列 =LEFT(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),SEARCH("/",RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),1)-1) D列 =RIGHT(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),LEN(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)))-SEARCH("/",RIGHT(A1,LEN(A1)-SEARCH("/",A1,1))))

  • エクセルで文字列を抽出する関数

    エクセルでデータ処理をしています。 例えばA列に Iwate kenichi Akita hachiro gata (1992) Yamagata shi,1905 というデータがあり、同じ関数を使ってそれぞれB列に Iwate kenichi Akita hachiro gata Yamagata shi と抽出したいので、 =IF(FIND("(",A1),LEFT(A1,FIND("(",A1)-1),IF(FIND(",",A1),LEFT(A1,FIND(",",A1)-1),A1))という式を作ってみましたが、うまく処理できません。 どのような式を作れば上手くいきますか?マクロは使えませんので、関数でお願い致します。

  • 前後の入替(区切りが2回出現する場合)

    B4セル下記のようなファイル名だとして  01 - Home Wide - Number.mp3 それをD4に   01 - Number - Home Wide.mp3 のように前から2番めの「 - 」の前後で前後を入れ替えた形に整形したいのですが 「 - 」が2回出現するので上手く処理できないでいます。 どのような関数になりますか ? 1回なら、 C4:=Left(B4,Len(B4)-4) D4: =RIGHT(C4,LEN(C4)-FIND("-",C4))&" - "&LEFT(A1,FIND(" - ",A1)-1)&".mp3" で処理できますが、 2回出現する場合の考え方が分かりません。 --------------------------- できれば、VBAでのコードも教えてもらえれば  余分な列(C列)を作らなくて良いので嬉しいです。

  • エクセル文字列抽出関数についての補足説明のお願い

    エクセルの使用歴は長いのですが、簡単な関数以外使ったことがない初心者です。 文字列の中から、英字と数字を抜き出す関数を検索し、たどり着きました。 やりたいことは解決したのですが、入力した式の意味がわかりません。 以下の式で、関数の書式や目的は調べることが出来ますが、なぜそう言う処理を行うと、 英字と数字に分離できるかを初心者にわかりやすく教えて下さい。 宜しくお願い致します。 -------------------------------- A1に「aaaa1111」があるとき B1に  =LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"))-1) C1に  =MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),LEN(A1)) で「aaaa」と「1111」が分離できます 以上

  • 分割マクロ

    よろしくお願いします。写真のように、一つの文字列に空白スペースが何ヵ所かあり、それを3分割に分けたいのですが、M列からO列が欲しい結果なのです。しかし、5行目のようにスペースがないものは、N列にしたいのです‼find関数Len関数left.right関数を駆使して、やっても良いのでしょうが、5行目、6行目のようにスペースが、たくさんあるものは、時間がかかりそうです。結局のところ、最初と最後の文字列にを抜き出し、残りは、N列にしたいのです。なにか、良いマクロ教えて下さい。よろしくお願いします。尚、スペースは全角スペースです。

  • Left関数とRight関数を合わせたような

    こんにちは いつもお世話になっています。 A列に文字列があります。 文字の長さは不定ですが、左から3文字、右から4文字は共通して不要なので削除したいです。right,leftの両関数を合わせたような関数を教えてください。 二列で分けて処理するのではなく一回の関数で処理希望です。 =LEFT(A2,LEN(A2)-4)&RIGHT(A2,LEN(A2)-3) こんなので失敗しています。 よろしくお願いします エクセル2007

  • 文字列末尾についている数字を削除する2

    先ほど締め切ったのですが、 大変申し訳ありません、再質問をさせてください。 (初質問の上に不手際続きで本当に申し訳ありません) 前回質問 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2333617 カタカナ濁音がある場合に、 =LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890))-1) を使うとうまくいかず、 =IF(AND(RIGHT(A1,3)>="100",RIGHT(A1,2)<="999"),LEFT(A1,LEN(A1)-3),IF(AND(RIGHT(A1,2)>="10",RIGHT(A1,2)<="99"),LEFT(A1,LEN(A1)-2),IF(AND(RIGHT(A1,1)>="0",RIGHT(A1,1)<="9"),LEFT(A1,LEN(A1)-1),A1))) でなんとかうまくいったものの、 内容が汎用的ではなく、もう一案いただきたく =JIS(LEFT(ASC(A1),FIND({1,2,3,4,5,6,7,8,9,0},ASC(A1)&"1234567890")-1)) をテストデータでやったところうまくいったので 締め切らせていただいたのですが、 本ちゃんデータで走らせて見たところ、 コードの最左数値が1以外のものではうまくいきませんでした。 つまり カブ1   カブ カブ10  カブ カブ100 カブ カブ2   カブ2 カブ20  カブ20 カブ200 カブ200 もう少しお知恵をいただけるとうれしいです。 ずうずうしくて大変申し訳ありません

  • Excelの文字列関数について

    Excelの文字列関数について こんにちは。Excel2007を使用しています。 先日、こちらで質問させていただいた【QNo.5785641】の続きになるのですが・・・ セルの中にある特定の文字が含まれている場合は、ある文字の後ろの数値を抽出したいという質問で、 例えば、セルA1に『AA-11 $100.00』、A2に『BB $ 95.00』と入力されている場合、『AAという文字が含まれている場合はB1に$マークの後ろの数値を抽出、BBという文字が含まれている場合はC1に$マークの後ろの数値を抽出する』というものを関数を使用して作りたいというものに対し、 =IF(COUNTIF(A1,"*AA*")=1,RIGHT(A1,LEN(A1)-FIND("$",A1)),"") =IF(COUNTIF(A1,"*BB*")=1,RIGHT(A1,LEN(A1)-FIND("$",A1)),"") という回答をいただきましたが、さらに追加で質問です。 例えば、セルA1に『AA-11 $100.00 aabbcc』、A2に『BB $ 95.00 abc』というように、抽出したい数値の後ろにも文字が入力されている場合はどのようにしたらよいのでしょうか? 宜しくお願いします。

  • エクセルリンク元文字列

    エクセルのA列にURLリンクが貼られている文字列が3000行ほどあります。そのURL(例:http://www.***.**.cc/など)の文字列をB列に入力したいのですが、リンクゲット関数か何かあるのでしょうか?またはマクロ(VBA?)とかで処理する方法はあるのでしょうか。 よろしくお願いします。

  • ExcelVBAで文字列の制御をしたいのですが

    セルに5文字の数字を文字列として取り込む入力規制をしているのですが、現段階では小数点を入力してもチェックにはじかれません。 小数点その他記号等チェックではじきたいので以下のようなマクロを組みました。 Dim A As String  ’値の取得用の変数 Dim i As Integer 'ループカウンタ For i = i To 5 '左からi個の数値を取り出す A = Left(target.Text, i) '取り出した数の右側の文字を検索(小数点があるとすればこの位置) If Len(A) = 2 Then A = Right(A, i) End If If Len(A) = 3 Then A = Right(A, i) End If If Len(A) = 4 Then A = Right(A, i) End If If Len(A) = 5 Then A = Right(A, i) End If '取り出した文字が数値以外ならメッセージを表示 If IsNumeric(A) = False Then Call MsgBox("数値以外が入力されています", vbExclamation) Next これでも何とか希望通りの動きはしたのですが、あまりスマートなプログラムに思えません。 不勉強で申し訳ありませんが、関数で○文字目、ひと文字だけを検索できるもはないのでしょうか? そうすればスマートにいきそうなのですが... このプログラムをもっとスマートな形にできる方法をご存知の方がいらっしゃれば、ご教授お願いします。