• ベストアンサー

エクセルVBAで数式を入力したいのですが、

文字列(数値が他の文字と混在して入力されている)のセル内容に空白を見つけて、空白の前の文字(データによって1~4桁、実際は数字)を表示したいので、下記のようにしました。 結果、『SEARCH(" "』の空白を指定する『"』でエラーになってしまいます。 このエラーを回避する方法を教えて下さい。 Range("J12").FormulaR1C1 = "=mid(r[8]c[-5],SEARCH(" ",r[8]c[-5],6)-5),4)" セルデータの例   1: 52 ABCD EFGH(AAA)   6: 823 JYUGF JKLM (B) 『:』までには半角空白が2個、次に半角数字が1桁、 次に半角空白があり、次の半角空白までに数字1桁から4桁があります。この数字を取り出したいのです。 宜しくお願いします。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

["]を設定する際は [""]で表記します。 Range("J12").FormulaR1C1 = "=mid(r[8]c[-5],SEARCH("" "",r[8]c[-5],6)-5),4)"

banzaiA
質問者

お礼

"" ""なのですか? 分かりました、ありがとうございます

その他の回答 (2)

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

●他人のことをとやかく言うのも出すぎかも知れないし、それなりの理由があり意識的に使っておられるのかもしれないし、質問の回答と違うことなのですが、、R1C1形式の使用をやめるのはどうですか。 エクセルの過去4年のVBAの質問から推測しても、ほとんどA1形式を使用してるようです。 またCells(i,j)方式は便利です・ ●またVBAでなら、 (1)セルに関数式を設定するFormulaを使わず (2)ワークシート関数のSEARCH・Findを使わないで、 (3)Instrを使い、含まれてなければエラーにならず、値が0になるので判別できます。 ●本質問では、数字がどうか調べの開始桁は固定しているようなので、その数字がある可能性のある桁から、4桁(または半角空白まで)、1桁ずつIsNumericかどうかをIfで聞くとかにする方法もあります。関数に頼らないVBらしい方法です。

banzaiA
質問者

お礼

はい、平常はR1C1形式は使用していないのですが、いろいろと試行錯誤でここのルーチンだけR1C1を使用してみようかなと思ったのですが、A1形式でも考えます。 instrを使うことも考えてみます。ただ必ず半角の空白がいくつか、それに半角の数字が羅列されているその中からある部分の数字が欲しかったので、安直に流れたのかもしれません。 IsNumericの方法もあるのですね!これから考えて見ます。 ありがとうございます

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 数式だったら、一般、Office で、VBAとは違うと思いますが、式を作って、記録マクロで、再度、Enter をすれば、取れると思います。 R1C1側は、コメントアウトしています。 VBAとしては、ちょっと可読性が落ちますね。 Sub testSample1() Range("J12").FormulaLocal = "=MID(E20,FIND("":"",E20)+2,FIND(""^"",SUBSTITUTE(E20,"" "",""^"",4))-FIND("":"",E20)-2)" 'Range("J12").FormulaR1C1 = "=MID(R[8]C[-5],FIND("":"",R[8]C[-5])+2,FIND(""^"",SUBSTITUTE(R[8]C[-5],"" "",""^"",4))-FIND("":"",R[8]C[-5])-2)" End Sub しかし、VBAだったら、そのまま、VBAのコードで出力するか、以下のようなユーザー定義関数でよいと思います。 Function GetNumber(ByVal s As String) As Variant Dim i As Integer Dim buf As String For i = 1 To Len(s)  If IsNumeric(Mid(s, i, 1)) Then   buf = Trim$(Mid(s, i + 2))   buf = Mid$(buf, 1, InStr(buf, " "))   Exit For  End If Next i  GetNumber = Trim$(buf) End Function

banzaiA
質問者

お礼

なるほど ユーザー関数を使うのですね。 ありがとうございます

関連するQ&A

  • 入力用のセルと管理用のセルを分けるには??

     A1・C2・D4に入力すると、E列・F列・G列に上から順に表示させるみたいな ことは可能ですか? 1回目  ABCD      EFGH 15          567 2   6 3 4   7 2回目  ABCD      EFGH 13          567 2           3 5 3 4   5 みたいな感じで空白は空白で表示したいのですが、可能でしょうか?? 分かりにくくスミマセン・・・・。分かる方よろしくお願いします!! エクセル2003です。

  • EXCEL VBAの書き方

    EXCEL VBAの初心者です。 EXCEL2003を使っています。 数式の中のパラメータの書き方が分からず困っています。 具体的には、単純な計算をR1C1形式の数式を使い、FOR文でループを回そうとしました。 この際、例えば以下のようなVBAを、試行錯誤の結果やっと動くようにはなりましたが、とくに「"」(ダブルクォーテーション)の使い方が理解できていません。 NGだった理由、OKとなった理由を、すみませんがお分かりの方教えていただけないでしょうか。 (ヘルプを読んでも残念ながら理解できる程のレベルを持っていません。) やりたいこと:例えば単純な引き算を複数のセルに、ループをまわして設定したい。 --------------- Sub 質問() Dim i As Integer ' "A1"との差を求めるVBA→ "B2"から"E2"に数式入力 For i = 2 To 5 Cells(2, i).Select ' (1)問題の行→これはOKの例 ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c[" & 1 - i & "]" Next i End Sub --------------- ' (2)問題の行→実行時エラー'1004' ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c[1 - i]" --------------- ' (3)問題の行→コンパイルエラー(構文エラー) ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c["1 - i"]" --------------- ' (4)問題の行→コンパイルエラー(構文エラー) ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c["&1 - i&"]" ---------------

  • エクセルVBAが書ける方へ

    お世話になります。 下記VBAはB19からB28までのデータをA11:12の横列に貼り付けさせる内容です。 Sub 特価() ' ' 特価 Macro ' ' Range("A11:A12").Select ActiveCell.FormulaR1C1 = "=R[8]C[1]" Range("B11:B12").Select ActiveCell.FormulaR1C1 = "=R[9]C" Range("C11:C12").Select ActiveCell.FormulaR1C1 = "=R[10]C[-1]" Range("F11:F12").Select ActiveCell.FormulaR1C1 = "=R[11]C[-4]" Range("H11:I12").Select ActiveCell.FormulaR1C1 = "=R[12]C[-6]" Range("T11:U12").Select ActiveCell.FormulaR1C1 = "=R[13]C[-18]" Range("X11:Y12").Select ActiveCell.FormulaR1C1 = "=R[14]C[-22]" Range("AD11:AE12").Select ActiveCell.FormulaR1C1 = "=R[15]C[-28]" Range("AN11:AO12").Select ActiveCell.FormulaR1C1 = "=R[16]C[-38]" Range("AW11").Select ActiveCell.FormulaR1C1 = "=R[17]C[-47]" Range("B23").Select End Sub これに下記内容を追加したいのですが教えて下さい。 ・B19からB28のデータは入力後消す。 ・貼り付けたら次に入力する時は下の行(A13:14)に貼り付ける。 ・同様にデータを消してA15:16に貼り付ける。以下、下の行に貼り付けていくようにする。 ・貼り付けたらカーソルはB19を選択した状態にする。 言葉足らずでしたら補足します。 何卒宜しくお願い致します。

  • 文字の置換のソフトを探しています。

     テキストエディター上のことです。 ABCD"a-a" , EFGH="b-b",, ABCD"c-c" , EFGH="d-d",, ABCD"e-e" , EFGH="f-f ",,        ・        ・        ・ という感じで文字が並んでいるときに ABCD"a-a" , EFGH="a-a",, ABCD"c-c" , EFGH="c-c",, ABCD"e-e" , EFGH="e-e",,        ・        ・        ・  のように文字を置換したいのですが、置換する量が多いので、   自動で置換してくれるソフトはないでしょうか?   自分の勝手なイメージですが、   ABCD"から",までの文字を読み取って   EFGH="から",,までに文字を入れてくれるソフトような   ソフトがあればと思います。   もしそのようなソフトをご存知でしたら、教えてください。   よろしくお願いします。

  • エクセルVbaで最終行まで数式をループ入力

    よろしくお願いします。エクセルVba初心者です。 エクセルでの作業をvba化したいと思っています。 C列:苗字  D列:名前 E列:E2=$C2&" "&$D2 …これを最終行まで  F列:全て数字の1を自動入力 これを Function NameNumber() n = Cells(Rows.Count, "D").End(xlDown).Row Dim Name As Long For Name = 2 To n Cells(Name, "E").FormulaR1C1 "=R[0]C[-2] & R[0]C[-1]" Next Name Dim Number As Long For Number = 2 To n Cells(Number, "F").Value = 1 Next Number End Function と書いてみましたが、348エラーが出てきました。 いろいろ間違っているのかもしれませんが、ご指南いただけますと幸いです。よろしくお願いいたします。

  • 入力規則で 英数字の2桁-4桁という制限を設けたいのですが。。。

    function btn1_onclick() { if(document.input1.Tel.value.search(/^\d{4}$/) != 0){ alert("電話番号を半角英数で入力して下さい。"); } } のようなロジックをならったのですが, 現在はsearchメソッドで半角数字の4桁という制限になっています。 (4文字以上でも以下でもだめ) 2~4文字で半角数字と制限したいのですがどうすればよいでしょうか? よろしくお願い致します。

  • Excel VBA フォームのテキストボックス入力について

    半角数字のみしか入力されないようにしたいのですがどのようにすればよろしいですか? のちのち計算に使うので、文字が入るとエラーになってしまって困っています よろしくお願いします

  • &nbspで空白を入れたいのですが、文字間隔がおかしい

    htmlで文字列を整形したいです。 12345,67890 12345<5文字空白>67890 というような感じです。 で&nbsp;というのがあるということで 12345&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;67890 としてみました。 ところが&nbspを5個いれても5文字にならないようです。 ためしに以下のようにやってみました。 123456789<br> 1&nbsp;&nbsp;456789<br> やっぱり変です。&nbspは半角の半分???なのでしょうか。 半角の空白を決めた数入れる方法を、ほかの方法でも良いので教えてください。

    • ベストアンサー
    • HTML
  • エクセル2010で数式を作りたいです

    Excel 2010を使用しております。 情報の並べ替えについて困っており、投稿させて頂きました。 どなたかお詳しい方、どうかお助けください。 セルA1に複数情報が並んでいるので、項目ごとに分けて別セルに並べ替えたいのですが、どのような式をつくったらきれいにまとめられるでしょうか。マクロとかはよく分からないので、数式で対応できたらと思います(カッコ内は例です)。 B1に店番・・・7桁もしくは9桁の数字 (121212121) C2に店名・・・スペースを含む3文字から30文字の英字 (The World Game Tournament) D1に日付・・・「2013-05-20」というフォーマットになっています E1に時間・・・「08:40:09」というフォーマットになっています F1に親番・・・3桁から5桁の数字(54321) G1に組織名・・・スペースを含む3文字から40文字の英字 (ABC the first temple) H1に機械番号・・・スペースを含まない8桁から10桁の数字(000123456) I1に機械区分・・・スペースを含まない10文字の英字(EXAMPLEARE) 上記がすべてA1にスペースをはさんで並んでいて、100ちかくあります。 自分でやってみた式では桁数が違うせいか変なところで切れてしまったり…もうどうしたらいいものか、困っております。 勉強不足で申し訳ないのですが、どうかよろしくお願いいたします。

  • エクセル VBA セル内の文字検索について

    XP microsoft visual basic 6.0 です A1からA10に書かれた文章(平仮名、カタカナ、漢字、数字、記号、含む)の中に 0から始まる半角8桁の数字があれば 取り出し B列に書き出す VBAを用いてこのようなことは可能でしょうか ※8桁の数字は文章内の何文字目にあるか決まっていない ※文章内に0から始まる8桁の数字が複数あることはない、が、0から始まり記号を含む8桁の文字列はある ご教授ください

専門家に質問してみよう