• ベストアンサー

value.replaceがうまく動作しません

教えてください。 次のように、Aの値が"アルコール"になるように replaceしようとしているのですが、"アルコールアレルギー" が値として入ってしまいます。 何かまちがっているのでしょうか? A.value=""; B.value="アルコールアレルギー"; C.value="アレルギー"; A.value=B.value.replace(C.value,'');

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

var で宣言せずに A.value = "" などの操作を行った場合 A has no properties file:///C:/Documents%20and%20Settings/sample.html Line 13 というエラーが発生するのを Firefox のエラーコンソールで確認しました。 varで宣言していればもちろんこのエラーは発生しません。 A(またはBやC)というオブジェクトを生成せずに、いきなり A.value のようなオブジェクトのスロットに対する操作はできないのではないですか? > B.value=アレルギー; > C.balue=""; > のときは、A.valueは > アレルギーとなりました。 Cがきちんとしたオブジェクトとして認められていない状態なので 空文字列を空文字列で置き換える結果になっていて、そのために B.valueの"アレルギー"という内容がそのままになっているだけでは ないでしょうか?

HAWAI777
質問者

お礼

var C = ""; と宣言しているので、C.valueというのがうまくいかない理由でした。 Cでreplaceするとうまくいきました。 お騒がせいたしました。 ありがとうございました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

inputのvalueを編集しようとしているのですか? 当初の質問から予測もつかないんですが・・・ <input type="text" id="A" value=""> <input type="text" id="B" value=""> <input type="text" id="C" value=""> <script> var A=document.getElementById("A"); var B=document.getElementById("B"); var C=document.getElementById("C"); B.value="アルコールアレルギー"; C.value="アレルギー"; A.value=B.value.replace(C.value,''); </script> 普通に動きますね・・・ もともとどういうソースを書いていたのでしょうか?

HAWAI777
質問者

お礼

var C = ""; と宣言しているので、C.valueというのがうまくいかない理由でした。 Cでreplaceするとうまくいきました。 お騒がせいたしました。 ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

A,B,Cはきちんと事前に宣言されていますか? <script> A=new Object(); B=new Object(); C=new Object(); A.value=""; B.value="アルコールアレルギー"; C.value="アレルギー"; A.value=B.value.replace(C.value,''); document.write(A.value); </script>

HAWAI777
質問者

お礼

var C = ""; と宣言しているので、C.valueというのがうまくいかない理由でした。 Cでreplaceするとうまくいきました。 お騒がせいたしました。 ありがとうございました。

HAWAI777
質問者

補足

varで宣言しているのと、 formの中にhiddenとして存在しているので new Objectとして宣言していません。 B.value=アレルギー; C.balue=""; のときは、A.valueは アレルギーとなりました。

関連するQ&A

  • ComboBoxで選択した値をReplaceし、Valueとして表示したい

    お世話になります。 どなたかお知恵をお貸しください。 UserForm1に、ComboBox2~17まであり、 このComboBoxの.RowSourceは別シートのセルを参照しています。 Sub Sample() 略… enList = SH4.Cells(65536, 2).End(xlUp).Row UserForm1.Show For i = 0 To 15 With UserForm1("ComboBox" & i + 2) .RowSource = "sample!B4:B" & enList End With Next i   略… End Sub .RowSource = "sample!B4:B" & enListには、右に隣接して対になる リストが存在します。 例)B4 … ほっかいどう C4 … 北海道   B5 … おおさか C5 … 大阪 ComboBox2でリストからB4の値を選択したら、C4の値を ComboBox2のvalueとして表示させたいのですが、 種類が一致しないとか、インデックスが見つからないなど エラーが出てしまいます。 VLOOKUPも使ってみたのですが、取得できませんと出てしまいます。 VLOOKUPをあきらめ、現在下記のようなちょっと怪しい プログラムになってます… cnt = 0 ReDim enList(0) ReDim enList2(0) For i = 3 To SH4.Range("B65536").End(xlUp).Row ReDim Preserve enList(i) ReDim Preserve enList2(i) enList(cnt) = SH4.Range("B" & i).Value enList2(cnt) = SH4.Range("C" & i).Value If UserForm1("ComboBox2").Value = enList(cnt) Then UserForm1("ComboBox2").Value = enList2(cnt) End If cnt = cnt + 1 Next i どのように解決すればよろしいでしょうか…orz ご教授ください。 また、今回ComboBox2の選択内容によってComboBox2のvalueを Replaceするということを希望なのですが、こういうことは できるのでしょうか…。 コンフリクトしたりするのかなと少し思いました。

  • この式はなぜエラー #VALUE! になるのだろう?

    この式はなぜエラー #VALUE! になるのだろう?   A  B  C  D 1    92 95 96 2 3  60 67 99 4  99 13 74 5  92 58 96 6  93 59 10 7  81 51 10 8  81 95 98 9  88 45  6 範囲 A3:C9 に上図のデータがあると仮定します。そして、 1行目の各セルに次の値を返したい、というのが問題です。 B1: セル A3、A5、A7 の最大値 C1: セル B4、B6、B8 の最大値 D1: セル C5、C7、C9 の最大値 1行目の各セルに次の配列数式を入力すれば希望通りの値が得られます。 B1: {=MAX(OFFSET($A3,0,0,5,)*MOD(ROW(A1:A5),2))} C1: {=MAX(OFFSET($A3,1,1,5,)*MOD(ROW(B1:B5),2))} D1: {=MAX(OFFSET($A3,2,2,5,)*MOD(ROW(C1:C5),2))} OFFSET関数の引数 0、1、あるいは 2 のところは COLUMN関数で置き換えられるはずと考えて B1: {=MAX(OFFSET($A3,COLUMN(A1)-1,COLUMN(A1)-1,5,)*MOD(ROW(A1:A5),2))} C1: {=MAX(OFFSET($A3,COLUMN(B1)-1,COLUMN(B1)-1,5,)*MOD(ROW(B1:B5),2))} D1: {=MAX(OFFSET($A3,COLUMN(C1)-1,COLUMN(C1)-1,5,)*MOD(ROW(C1:C5),2))} としたところ、いずれもエラー #VALUE! が返ってきます。 なぜエラーになるのか理解できません。どなたか私にアドバイスをいただけませんか? 参考までに申し上げると、http://okwave.jp/qa/q5897615.html の質問の回答を考えているときに、上の問題に遭遇しました。

  • エクセルのReplaceで使える「?」(ハテナ)は

    エクセルのReplaceで使える「?」(ハテナ)は、 ワイルドカードとして藻文字列としても機能するのでしょうか? Sub Sample() Range("a1").Value = "aaa" Range("a1").Replace What:="a?a", Replacement:="aba" Range("a1").Value = "aaa" Range("a1").Replace What:="a?a", Replacement:="aba?" End Sub を実行すると 「?」は、文字1文字のワイルドカードとして機能しつつ、 最後に「?」が付く事から、文字列として?が置換されていますが この区別ってないのでしょうか?

  • ruby 毎回同じ様なreplace文を書くのイヤ

    db = SQLite3::Database.new('hoge.db') で、 db.execute('replace into table01 (a, b, c, d, e, f, g) values(?, ?, ?, ?, ?, ?, ?)',va, vb, vc, vd, ve, vf, vg); とかって書いてるのですが、 これを、 def replace(table,k,v) db.execute('replace into ' + table + '(' + k.join(',') + ') values('+ k.collect {'?'}'.join(’,’) +')' , ここどうかいたら??) end みたいな事を考えたのですが、vって配列でもらった値をばらばらにdb.executeのパラメータに渡したいのですが、 できませんでして、 replace('table',%w(a, b, c, d, e, f, g),[va, vb, vc, vd, ve, vf, vg]) みたいに使いたいです。 引数が可変のパラメータをそのまま、つぎの関数に渡すみたいな。 なんか、ラクする方法ないですか? ご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • Ruby
  • #value!を非表示にしたい

    エクセルの関数に関する質問です。 Book「A」または「A'」のセルを参照にして、いくつかの関数をBook「B」、Book「C」およびBook「D」に書き込みました。 まずは、Book「A」のセル「a」またはBook「A'」のセル「a'」のどちらか入力されている方のセルを表示させる関数をBook「B」のセル「b」に作りました。 これです。↓ =if(「a」="",(if(「a'」=""," ",「a'」),「a」) 次に、セル「b」を参照にして、 =if(「b」=""," ",「b」) という関数をBook「C」のセル「c1」に作りました。 「a」または「a'」に入力されていなければ、「c1」は空欄になるはず・・・だけど、実際には参照セルに関数が入力されているからどうかな・・・と思いましたが、これは見事に、成功しました。 これが成功したので、さらに、「c2」に、 =if(「c1」=""," ",datedif(「b」,「c1」,"Y")) を作りました。 しかし、空欄か年齢のどちらかになるはずのセルが、「#value!」がでてきてしまい、空欄が出てきません。「a」または「a'」に入力されていれば問題なく年齢を計算して返してくれるのですが、「#value!」は目障りなので、表示させたくありません。参照を「a」または「a'」までさかのぼって関数を作ればもちろん問題ないのですが、いろいろ並べ替えなどをしておりそれは最高に面倒くさいのです。参照を「b」や「c1」にするとオートフィルを使って楽にできるので、こっちの方法を採用したいと思っています。 上の関数を使った結果出てきてしまった「#value!」を解決するにはどのような方法があるのでしょうか? 長くなった上にややこしくなって申し訳ありません。ぜひともご意見よろしくお願いします。

  • 連番の関数に#VALUE!が なぜ

    いつもお世話になります WIN7 エクセル2010です。 ご指導をいただきたいのは G2 =D2&"-"&TEXT(COUNTIF($D$2:D2, D2),A2) を入れると G4~G6だけになぜか #VALUE! になります。 何故なんでしょうか。 A列 D列 G列 A 1  1-A A 2 2-A B 3 #VALUE! B 4 #VALUE! B 5 #VALUE! C 6 6-C C 7 7-C ご指導ください。

  • #VALUE!表示消えてほしい

    セル内 A1【始業時刻】 B1【就業時刻】 C1【B1-A1】 D1【C1×1000円×24】 と入力してるんですが、A1とB1に時刻が入力されてないとき #VALUE!が表示されます。 表示されないようにするにはどうしたらいいですか?

  • 大量のselect要素のvalueを短い文で取得

    select要素が100個あり、<script>側でoption要素のvalueをそれぞれ取得する場合、 下記のようにselect要素の数だけ変数で指定する方法以外に、 もっと短くしてパフォーマンスを上げる方法はありますでしょうか。 <select name="c100"> <option value="あ">あ</option> <option value="い">い</option> <option value="う">う</option> <option value="え">え</option> <option value="お">お</option> </select> </form> <input type="button" value="はい" onclick="function(this.form)" /> ~ <script> function(a){ var b1 = a.elements["c1"].options[a.elements["c1"].selectedIndex].value; var b2 = a.elements["c2"].options[a.elements["c2"].selectedIndex].value; var b3 = a.elements["c3"].options[a.elements["c3"].selectedIndex].value; var b4 = a.elements["c4"].options[a.elements["c4"].selectedIndex].value; var b5 = a.elements["c5"].options[a.elements["c5"].selectedIndex].value; var b6 = a.elements["c6"].options[a.elements["c6"].selectedIndex].value; var b7 = a.elements["c7"].options[a.elements["c7"].selectedIndex].value; var b8 = a.elements["c8"].options[a.elements["c8"].selectedIndex].value; var b9 = a.elements["c9"].options[a.elements["c9"].selectedIndex].value; var b10 = a.elements["c10"].options[a.elements["c10"].selectedIndex].value; var b11 = a.elements["c11"].options[a.elements["c11"].selectedIndex].value; var b12 = a.elements["c12"].options[a.elements["c12"].selectedIndex].value; var b13 = a.elements["c13"].options[a.elements["c13"].selectedIndex].value; var b14 = a.elements["c14"].options[a.elements["c14"].selectedIndex].value; var b15 = a.elements["c15"].options[a.elements["c15"].selectedIndex].value; var b16 = a.elements["c16"].options[a.elements["c16"].selectedIndex].value; var b17 = a.elements["c17"].options[a.elements["c17"].selectedIndex].value; var b18 = a.elements["c18"].options[a.elements["c18"].selectedIndex].value; var b19 = a.elements["c19"].options[a.elements["c19"].selectedIndex].value; var b20 = a.elements["c20"].options[a.elements["c20"].selectedIndex].value; var b20 = a.elements["c20"].options[a.elements["c20"].selectedIndex].value; var b21 = a.elements["c21"].options[a.elements["c21"].selectedIndex].value; var b22 = a.elements["c22"].options[a.elements["c22"].selectedIndex].value; var b23 = a.elements["c23"].options[a.elements["c23"].selectedIndex].value; var b24 = a.elements["c24"].options[a.elements["c24"].selectedIndex].value; var b25 = a.elements["c25"].options[a.elements["c25"].selectedIndex].value; var b26 = a.elements["c26"].options[a.elements["c26"].selectedIndex].value; var b27 = a.elements["c27"].options[a.elements["c27"].selectedIndex].value; var b28 = a.elements["c28"].options[a.elements["c28"].selectedIndex].value; var b29 = a.elements["c29"].options[a.elements["c29"].selectedIndex].value; var b30 = a.elements["c30"].options[a.elements["c30"].selectedIndex].value; ~

  • PowerShellの replace演算子で

    PowerShellの replace演算子で、キャプチャーしたものと、変数をくっ付けた時、うまく表示できません。これはどうしたらよいのでしょう。 例 21AA-N1-M01.txt 21AB-N2-M02.txt などのファイルがあるとして、先頭から2文字と1番目のハイフンの隣の文字とNの隣の数字に1を加えたものと2番目のハイフン以降をくっ付ける。 21AA-N1-M01.txt → AAN2M01.txt dir *.txt | % {$a = [regex]::Matches($_.Name,'\d+') ; $b = 1 + $a.Value[1] ; $_.Name -replace '..(..)-N(\d)-(.*)',"`$1$b`$3"} $12M01.txt となってしまいます。 "`$1 $b`$3" という風に $1 と $b の間にスペースを入れるか、何か文字を入れると正常な表示にはなりますが、間に余計なものは入れたくないです。 $1 と $b の間に何かエスケープ文字とか入れるのでしょうか?

  • Replace関数について

    Sub macro1() Dim str As String str = "abc" str = Replace(str, "c", "a") MsgBox str End Sub このマクロを実行した時に、問題なく動くのですが なぜReplaceは関数なのに、 WorksheetFunction.がいらないのでしょうか? しかも Sub macro2() Dim str As String str = "abc" str = WorksheetFunction.Replace(str, "c", "a") MsgBox str End Sub にすると、エラーになります。 macro1のReplaceは、関数ではないのでしょうか? メソッドやステートメントですか?

専門家に質問してみよう