画面に配置されたラジオボタンにおいて
マウス以外からの操作を無効にしたいと考えています。
(タブでの移動を不可としたい。)

そこで、ラジオボタン部分にtabindex=-1を付加しましたが、
うまくいきません。
(順番は変更できるようですが。)
最終的にtabでのフォーカスがあたってしまいます。

これは、もうjavascriptで強制的に制御するしかないのでしょうか?

A 回答 (5件)

ごめんなさい。

ていせいします。
whileを、うしろにつけかえたじょ。
tabindexではなく、classに'pass'をつけると、のーどをたどって
つぎにいどうするじょ。ばぶぅ。

   if (9 == keycode) {
    do {
     if ('INPUT' == element.nodeName && ! ('' + element.className).match(myReg)) {
      element.focus();
      return;
     }
    } while (element = getNextNode(element))
   }

この回答への補足

なるほど、class名を付加して、focus判定を実施すればよいということでしょうか?
これなら、設定の調節によってうまくいきそうですね。

試してみます。

補足日時:2009/05/13 14:34
    • good
    • 0
この回答へのお礼

試してみた結果。
考えていた通りに動作しました!

これを参考にすれば、問題なくできそうです。
しかも、後からのメンテナンスも簡単になりそうです。

どうもありがとうございました。

お礼日時:2009/05/13 14:52

もう~わがままだなぁ~ばぶっ!


つまらないものだけど、こんなのはどうだかなぁ~?ばぶぅ。
<form>
 <p>
  <input type="text">
  <input type="text" class="pass">
  <input type="text" class="pass">
  <input type="text">
 </p>
</form>
<script type="text/javascript">

//@cc_on
document./*@if(@_jscript)attachEvent('on'+ @else@*/addEventListener(/*@end@*/
 'keyup', (function (getNextNode) {

  var myReg = /\bpass\b/;

  return function(evt) {

   var element = evt./*@if(@_jscript) srcElement @else@*/ target /*@end@*/;
   var keycode = evt.keyCode;
   
   if (9 == keycode) {
    while (element = getNextNode(element)) {
     if ('INPUT' == element.nodeName && ! ('' + element.className).match(myReg)) {
      element.focus();
      return;
     }
    }
   }
  };
 })(
  function (node) {
   var n;
   if (n = node.firstChild) return n;
   do if (n = node.nextSibling) return n; while (node = node.parentNode);
   return null;
  }
 ), false
);

</script>
    • good
    • 0

<form>


 <p>
  <input type="text" tabindex="1">
  <input type="text" tabindex="99" >
  <input type="text" tabindex="98" onBlur="this.form.elements[0].focus()">
 </p>
</form>
きょうせいてきに、てまえでせんとうに(てきとうなとこに)とばすとか

この回答への補足

他に、方法がなければjavascriptで強制的な制御を加える予定です。
ただ、細かい設定が必要な場合もあるので極力避けたいのです。

補足日時:2009/05/13 11:51
    • good
    • 0

そもそもユーザーのアクセシビリティを落とす処理なので


やるべきではないと思います。

この回答への補足

個人的にもそう思っているのですが・・・。
それが、ユーザの希望なので・・・。

補足日時:2009/05/13 11:40
    • good
    • 0

http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401 …

HTML4なら、りようできるはんいは0から32767までだじょ!
ieだけとくべつに、していできるだけだじょ!

よみだしせんようにしておいて、ぽちっとくりっくしたときだけ
あつかえるようにするとか・・・ではどうかな? ばぶぅ~。

この回答への補足

機能はIE限定なので、-1の指定に問題は特にありません。

readonly も試しましたが、ラジオボタンには効果がないようです。

補足日時:2009/05/13 11:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qexcel関数でindexとmatchについてですが、各々何を求める関

excel関数でindexとmatchについてですが、各々何を求める関数でどのように組合せて使うのか分かりません。具体的に教えていただけると助かるのですが、よろしくお願いします。

Aベストアンサー

 回答番号:ANo.3の続きです。 MATCH関数は、

MATCH(検査値,検査範囲,照合の型)

という形式で使われ、照合の型で指定した条件に従って検査範囲に指定したセル範囲を検索し、検査値と一致したデータが存在するセルの位置を表す数値を求める関数です。
 照合の型は、検査値の検索の仕方を数字で指定するもので、
照合の型に0を指定すると、検査値に完全に一致するデータのみが、検索の対象になります。
 この場合、検査範囲のデータが順序良く並んでいる必要はありません。

 例えば、
A1セルに「8」
A2セルに「7」
A3セルに「6」
A4セルに「5」
A5セルに「9」
A6セルに「10」
A7セルに「15」

という具合にデータが入力されている場合、セルに次の様に入力しますと、

=MATCH(5,A3:A6,0)

5の値はA3から数えて2つ目のA5セルに存在しますから、そのセルには

2

と表示されます。

 照合の型に1を指定するか、若しくは照合の型を省略して、

MATCH(検査値,検査範囲)

という形式で入力しますと、検査値以下の最大の値になるデータが、検索の対象になります。
 この際、検査範囲のデータは、昇順で並んでいる必要があります。
 昇順とは、
数値の場合は下へ行くほど大きな値になっている事で、
アルファベットの場合は上からABC順に、
かな文字の場合は、あいうえお順に並んでいる事を言います。
 先程の例で、セルに次の様に入力しますと、

=MATCH(12,A4:A7)

12という値はA4~A7の範囲には存在しませんから、12以下の最大の数である10が存在するA6セルは、A4から数えて3つ目にありますから、その数式を入力したセルには

3

と表示されます。

 又、セルに次の様に入力しますと、

=MATCH(5,A2:A7)

A2とA3の間は昇順で並んでいないため、正しい値を表示する事は出来ません。

 照合の型に-1を指定すると、検査値以上の最小の値になるデータが、検索の対象になります。
 この際、検査範囲のデータは、降順で並んでいる必要があります。
 降順とは、
数値の場合は下へ行くほど小さな値になっている事で、
アルファベットの場合は上からZYX順に、
かな文字の場合は、んをわろれ順に並んでいる事を言います。
 先程の例で、セルに次の様に入力しますと、

=MATCH(5.3,A1:A4,-1)

5.3という値はA1~A4の範囲には存在しませんから、5.3以上の最小の数である6が存在するA3セルは、A1から数えて3つ目にありますから、その数式を入力したセルには

3

と表示されます。

 又、セルに次の様に入力しますと、

=MATCH(6.3,A1:A5,-1)

A4とA5の間は降順で並んでいないため、正しい値を表示する事は出来ません。


 詳しくは、

メニューの[ヘルプ]
  ↓
[Microsoft Excelヘルプ]

の順番でクリックすると現れる、Officeアシスタントが、
「何について調べますか?」
と尋ねて来ますから、
ふきだしの中に知りたい関数の名前である

INDEX

或いは

MATCH

と入力してから、ふきだしの中の[検索]ボタンをクリックしてみて下さい。
 すると、ふきだしの中に幾つかの選択肢が現れますから、入力した関数名と同じものを選んでクリックして下さい。
 すると、「Microsoft Excelのヘルプ」ウィンドウが開いて説明が表示されます。

 回答番号:ANo.3の続きです。 MATCH関数は、

MATCH(検査値,検査範囲,照合の型)

という形式で使われ、照合の型で指定した条件に従って検査範囲に指定したセル範囲を検索し、検査値と一致したデータが存在するセルの位置を表す数値を求める関数です。
 照合の型は、検査値の検索の仕方を数字で指定するもので、
照合の型に0を指定すると、検査値に完全に一致するデータのみが、検索の対象になります。
 この場合、検査範囲のデータが順序良く並んでいる必要はありません。

 例えば、
A1セルに「8...続きを読む

Qラジオボタンの入力制御について(表示した時のみ制御を行う)

yesの場合はid=ABを表示し、noの場合はid=ABを非表示にする制御を行っています。
両方yesの場合は表示。両方noの場合は非表示。
片方がnullの場合は、yesで表示しnoで非表示としています。
ここまでの動作は、問題ないのですが
id=ABを表示した場合、hoge3が入力必須となり
id=ABを表示しない場合、hoge3は入力必須ではないように制御を行いたいと思っています。


他書き込みを参考にしたのと、自身で書いたものが混じって非常に汚くなっていますが
ご教授願えませんでしょうか。

<script type="text/JavaScript">
<!--
function test1(){
if(document.getElementById("id01").checked) {
document.getElementById('AB').style.display = "";
}else if(document.getElementById("id02").checked) {
document.getElementById('AB').style.display = "";
for(i = 0; i <= 1; i ++){
document.form1.hoge3[i].checked = false;
}
}else{
document.getElementById('AB').style.display = "none";
for(i = 0; i <= 1; i ++){
document.form1.hoge3[i].checked = false;
}
}
}

//以下はhttp://oshiete1.goo.ne.jp/qa2119460.htmlを参考にしました
function test2(f){
for (var i=0;i<f.length;i++){
if(f[i].type=="radio" && f[i].name=="hoge3" && f[i].checked==true) return true;
}
alert("AかBを選んでください");
return false;
}

//-->
</script>

<form name="form1" onload="test1()"onsubmit="return test2(this)">

<br>
<input type="radio" name="hoge1" value="1" id="id01" onClick="test1();">yes<br>
<input type="radio" name="hoge1" value="0" onClick="test1();">no<br>
<br>
<input type="radio" name="hoge2" value="1" id="id02" onClick="test1();">yes<br>
<input type="radio" name="hoge2" value="0" onClick="test1();">no<br>
<br>
<p id="AB" style="display:none;">
<input type="radio" name="hoge3" value="1">Aへ進む<br>
<input type="radio" name="hoge3" value="2">Bへ進む<br>
</p>
<br>
<input type="submit" value="次へ">
</form>

yesの場合はid=ABを表示し、noの場合はid=ABを非表示にする制御を行っています。
両方yesの場合は表示。両方noの場合は非表示。
片方がnullの場合は、yesで表示しnoで非表示としています。
ここまでの動作は、問題ないのですが
id=ABを表示した場合、hoge3が入力必須となり
id=ABを表示しない場合、hoge3は入力必須ではないように制御を行いたいと思っています。


他書き込みを参考にしたのと、自身で書いたものが混じって非常に汚くなっていますが
ご教授願えませんでしょうか。

<script type="text...続きを読む

Aベストアンサー

test2の最初に ABが表示されているかどうかのチェックを入れればよいのでは?

if (document.getElementById('AB').style.display) {
  return true;  // 'none'の場合(=非表示)
} else {
  現在のコード   // ''の場合(=表示)現在のコードを実行
}

(↑全角空白でスペースをとっています。ご注意)

QExcelでIndexとMatch関数が使いこなせない

すみません、カテゴリを間違えてまして、再度投稿いたします。

有給管理表をExcelで作成しています。
シート1に社員のデータ表を入力してあり、
シート2には有給が発生する社員へ有給の残日数や
付与日に関するお知らせの案内状をB5サイズで作っています。

シート1のデータを拾って、シート2の案内状へ反映させる際、
付与日や残日数などはVlookupで参照できるのですが、
社員番号は退職した社員がいるため番号が飛んでいて
うまくできません。
IndexやMatch関数を使えばなんとかなりそうだと思い
やってみましたが、VALUE!が表示されてしまいます。
どなたかうまくいく関数を教えて頂けますでしょうか?

シート1のデータ例
 A列   B列   C列   D列    E列
社員番号  氏名  入社日  付与日   付与日数
100001   くま  2007/4/1  2007/10/1  10
100003   たぬき 2007/5/1  2007/11/1  10
100005   うさぎ 2007/5/10 2007/5/10  10 
100010   きつね 2007/6/1  2007/12/1  10

シート2(例)ページ1
   B列   C列
B1 社員番号  100001←ここに式を入れたい
B2 社員氏名  くま  さん(vlookupでC1を拾ってくる)
B4 あなたの有給付与日は  2007/10/1 です。付与日数は 10 日です・・・・・・。

シート2 ページ2
B30 社員番号  100003 (←ページ1の次の該当者を拾いたい)
B31 社員氏名  たぬき  さん
B33 あなたの有給付与日は 2007/11/1 です。 付与日数は 10 日です・・・・・・。

このような感じです。社員番号が飛んでいても下の行を拾っていくような関数はありますでしょうか?(Index、Match関数以外でも結構です)

すみません、カテゴリを間違えてまして、再度投稿いたします。

有給管理表をExcelで作成しています。
シート1に社員のデータ表を入力してあり、
シート2には有給が発生する社員へ有給の残日数や
付与日に関するお知らせの案内状をB5サイズで作っています。

シート1のデータを拾って、シート2の案内状へ反映させる際、
付与日や残日数などはVlookupで参照できるのですが、
社員番号は退職した社員がいるため番号が飛んでいて
うまくできません。
IndexやMatch関数を使えばなんとかなりそうだと...続きを読む

Aベストアンサー

一例です。社員番号が数値で昇順ならSMALL関数で小さいほうから順に抽出可能
シート2ページ1
C1=SMALL(シート1!A1:A100,1)
C2=VLOOKUP(C1,シート1!$A$1:$E$100,2,FALSE)
C3="あなたの給与日は"&TEXT(VLOOKUP(C1,シート1!$A$1:$E$100,4,FALSE),"yyyy/m/d")&"です。付与日数は"&(VLOOKUP(C1,シート1!$A$1:$E$100,5,FALSE),"0日")&"です。"

シート2ページ2
C30=SMALL(シート1!A1:A100,2)
C31=VLOOKUP(C30,シート1!$A$1:$E$100,2,FALSE)
C32="あなたの給与日は"&TEXT(VLOOKUP(C30,シート1!$A$1:$E$100,4,FALSE),"yyyy/m/d")&"です。付与日数は"&(VLOOKUP(C30,シート1!$A$1:$E$100,5,FALSE),"0日")&"です。"

※SMALL関数の最後の引数を数式で求める場合は
1=>1、30=>2、59=>3でいいのなら
CEILING(ROW,29)/29
で可能

一例です。社員番号が数値で昇順ならSMALL関数で小さいほうから順に抽出可能
シート2ページ1
C1=SMALL(シート1!A1:A100,1)
C2=VLOOKUP(C1,シート1!$A$1:$E$100,2,FALSE)
C3="あなたの給与日は"&TEXT(VLOOKUP(C1,シート1!$A$1:$E$100,4,FALSE),"yyyy/m/d")&"です。付与日数は"&(VLOOKUP(C1,シート1!$A$1:$E$100,5,FALSE),"0日")&"です。"

シート2ページ2
C30=SMALL(シート1!A1:A100,2)
C31=VLOOKUP(C30,シート1!$A$1:$E$100,2,FALSE)
C32="あなたの給与日は"&TEXT(VLOOKUP(C30,シート1!$A$1:$...続きを読む

Qチェックされたラジオボタンにフォーカスを移動したい

<LABEL><INPUT type="radio" id="a" value="0" checked>すべて</LABEL><BR>
<LABEL><INPUT type="radio" id="a" value="1">一部</LABEL><BR>
<LABEL><INPUT type="radio" id="a" value="2">なし</LABEL><BR>

<LABEL><INPUT type="radio" id="b" value="0" checked>すべて</LABEL><BR>
<LABEL><INPUT type="radio" id="b" value="1">一部</LABEL><BR>
<LABEL><INPUT type="radio" id="b" value="2">なし</LABEL><BR>

<LABEL><INPUT type="radio" id="c" value="0" checked>すべて</LABEL><BR>
<LABEL><INPUT type="radio" id="c" value="1">一部</LABEL><BR>
<LABEL><INPUT type="radio" id="c" value="2">なし</LABEL><BR>
・・・
のようにラジオボタンがグループ別に並んでいる場合に
Enterキーを押したときにフォーカスが次のラジオボタングループの
チェックが入ったラジオボタンにフォーカスを移動したいのですが、
何かいい方法はないでしょうか?

<LABEL><INPUT type="radio" id="a" value="0" checked>すべて</LABEL><BR>
<LABEL><INPUT type="radio" id="a" value="1">一部</LABEL><BR>
<LABEL><INPUT type="radio" id="a" value="2">なし</LABEL><BR>

<LABEL><INPUT type="radio" id="b" value="0" checked>すべて</LABEL><BR>
<LABEL><INPUT type="radio" id="b" value="1">一部</LABEL><BR>
<LABEL><INPUT type="radio" id="b" value="2">なし</LABEL><BR>

<LABEL><INPUT type="radio" id="c" value="0" checked>すべて</LABEL><BR>
<LABEL><I...続きを読む

Aベストアンサー

pentaro_2000さんの質問を見て、初めて知りましたけど、HTMLの機能では、ENTERキーを押下されても、フォーカスが次の場所へ移動することは無いんですね

少し調べて見ましたが、HTMLだけではENTERキーによるフォーカス移動は出来ないみたいなので、JavaScriptにてラジオボタンのみフォーカスの移動が出来るモジュールを組んで見ました。
一つの例として、以下のソースを書いておきますが、「良いソースコード」とは、決して言えません。
サッと作った物なので、IEのみの対応となっています^^;

説明:
focusChange関数の引数で、現在フォーカスを保持しているオブジェクトを渡し、関数内処理で、そのオブジェクト以降に存在するオブジェクトの中でチェックが付いているオブジェクトを検索し、そのオブジェクトにフォーカスが移る作りになっています。

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
// 注) IEのみ対応
// 指定したオブジェクトのIDを取得する
function getElementID( obj ) {
var k;
for( k = 0; k < document.all.length; k++ ) {
// オブジェクト比較し、検索を掛ける
if( document.all(k) == obj ) return k;
}
return -1;
}
function focusChange( obj ) {
var id;
var k;
// keyCode:13=ENTERキー押下時
if( event.keyCode == 13 ) {
id = getElementID(obj);
for( k = id + 1; k < document.all.length; k++ ) {
// ID番目以降でチェックが付いているオブジェクトを検索
if( document.all(k).checked ) {
document.all(k).focus();
break;
}
}
}
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<LABEL FOR="a"><INPUT type="radio" id="a" name="a" value="0" onKeyPress="focusChange(this);" checked>すべて</LABEL><BR>
<LABEL FOR="b"><INPUT type="radio" id="b" name="a" value="1" onKeyPress="focusChange(this);">一部</LABEL><BR>
<LABEL FOR="c"><INPUT type="radio" id="c" name="a" value="2" onKeyPress="focusChange(this);">なし</LABEL><BR>

<LABEL FOR="d"><INPUT type="radio" id="d" name="b" value="0" onKeyPress="focusChange(this);" checked>すべて</LABEL><BR>
<LABEL FOR="e"><INPUT type="radio" id="e" name="b" value="1" onKeyPress="focusChange(this);">一部</LABEL><BR>
<LABEL FOR="f"><INPUT type="radio" id="f" name="b" value="2" onKeyPress="focusChange(this);">なし</LABEL><BR>
</BODY>
</HTML>

pentaro_2000さんの質問を見て、初めて知りましたけど、HTMLの機能では、ENTERキーを押下されても、フォーカスが次の場所へ移動することは無いんですね

少し調べて見ましたが、HTMLだけではENTERキーによるフォーカス移動は出来ないみたいなので、JavaScriptにてラジオボタンのみフォーカスの移動が出来るモジュールを組んで見ました。
一つの例として、以下のソースを書いておきますが、「良いソースコード」とは、決して言えません。
サッと作った物なので、IEのみの対応となっています^^;

説明:
f...続きを読む

Q【Excel】 INDEX ,MATCH でいいのか。該当が複数ある場合

項目の検索で行き詰まっています。

A1 から A30 に名前
B1 から B30 に得点
が入力されています。
B31 に最高点を表示するのは、MAX 関数でできました。

B32 にその最高点をとった人物が誰かを表示するのに
=INDEX($A$1:$A$30,MATCH($B$31,$B$1:$B$30),1)
と入力したら、
該当者が1人しかいない時は問題ないのですが、複数いる場合でも1人しか表示されません。
該当が複数ある場合の出し方は他に方法があるのでしょうか?

どなたか力を貸してください。
よろしくお願いします。

Aベストアンサー

誰が最高点なのか確かめるだけであれば、
#1さんのご提案されたオートフィルタが恐らく最短ですね。

ただ、ご質問の例をみますと、
やはり特定のセルに値を返す必要があるのではないかとも思われます。
その場合、#2さんがご提案されたように作業列を使って引くのが順当な手順かと思います。

さて。
たまたまつい先日似た質問にお答えしたので、
正直あまりお奨めはしないのですが、「一発関数回答」を。

B32セル:
 =IF(ROW()-ROW(B$31)>COUNTIF($B$1:$B$30,B$31),"",INDEX($A$1:$A$30,MATCH(LARGE(($B$1:$B$30=B$31)/ROW($B$1:$B$30),ROW()-ROW(B$31)),1/ROW($B$1:$B$30),0)))

を配列数式として入力し下方に十分な数だけフィル。(Excel2003で動作確認済)
※通常の数式は、数式を入力した後Enterキーで確定しますが、
 これは配列数式なので、CtrlとShiftを押しながらEnterで確定してください。

数式中に、B$31,$A$1:$A$30,$B$1:$B$30の3種類の参照が複数回登場しますが、
いずれも質問文の数式と同様のニュアンスで考えていただいて結構です。
位置が変わる場合はそれぞれ置き換えてください。
(ただし、最高点のセルの直下に、縦に並べて名前を表示することを想定しています)

数式の意味内容については、やや手前味噌の感もありますが、
先日した回答のURLを挙げておきますのでご参考ください。
http://oshiete1.goo.ne.jp/qa3328660.html
(このケースでは行列(縦横)が逆になっています)

誰が最高点なのか確かめるだけであれば、
#1さんのご提案されたオートフィルタが恐らく最短ですね。

ただ、ご質問の例をみますと、
やはり特定のセルに値を返す必要があるのではないかとも思われます。
その場合、#2さんがご提案されたように作業列を使って引くのが順当な手順かと思います。

さて。
たまたまつい先日似た質問にお答えしたので、
正直あまりお奨めはしないのですが、「一発関数回答」を。

B32セル:
 =IF(ROW()-ROW(B$31)>COUNTIF($B$1:$B$30,B$31),"",INDEX($A$1:$A$30,MATCH(LA...続きを読む

Qラジオボタンを選択すると、他のラジオボタンの動きを制御したい

radio1~radio3のいずれか「はい」を選択すると、
その他が強制的に「いいえ」に切り替わるスクリプトはどのように作成すればよろしいでしょうか?

<INPUT TYPE=radio NAME="radio1" VALUE="1">はい
<INPUT TYPE=radio NAME="radio1" VALUE="2">いいえ

<INPUT TYPE=radio NAME="radio2" VALUE="1">はい
<INPUT TYPE=radio NAME="radio2" VALUE="2">いいえ

<INPUT TYPE=radio NAME="radio3" VALUE="1">はい
<INPUT TYPE=radio NAME="radio3" VALUE="2">いいえ

Aベストアンサー

寝ぼけてた。
<form>
<p>
<input type="radio" name="radio1" value="1" class="gp0">はい
<input type="radio" name="radio1" value="2" class="gp0" checked>いいえ
</p>
<p>
<input type="radio" name="radio2" value="1" class="gp0">はい
<input type="radio" name="radio2" value="2" class="gp0" checked>いいえ
</p>
<p>
<input type="radio" name="radio3" value="1" class="gp0">はい
<input type="radio" name="radio3" value="2" class="gp0" checked>いいえ
</p>
</form>


<script type="text/javascript">
//@cc_on
var grp = 'gp0';
var reg = new RegExp('\\b' + grp + '\\b');
var elms = document.getElementsByTagName('input');
var o, objs = [], cnt = 0;
while (o = elms[cnt++]) if (o.className && o.className.match(reg)) objs.push(o);

document./*@if(1)attachEvent('on'+ @else@*/addEventListener(/*@end@*/'click',
function (evt) {
var c = 0;
var e = evt./*@if (1) srcElement @else@*/ target /*@end@*/;

if (!(e.tagName == 'INPUT' && e.type == 'radio')) return;
if (!(e.className && e.className.match(reg))) return;

if (e.value == '1') {
while (o = objs[c++]) o.checked = o.value == '2';
e.checked = true;
}
}
, false);

</script>
でどうでしょう?

寝ぼけてた。
<form>
<p>
<input type="radio" name="radio1" value="1" class="gp0">はい
<input type="radio" name="radio1" value="2" class="gp0" checked>いいえ
</p>
<p>
<input type="radio" name="radio2" value="1" class="gp0">はい
<input type="radio" name="radio2" value="2" class="gp0" checked>いいえ
</p>
<p>
<input type="radio" name="radio3" value="1" class="gp0">はい
<input type="radio" name="radio3" value="2" class="gp0" checked>いいえ
</p>
</form>


<script...続きを読む

QExcel: VLOOKUP, INDEX & MATCH 関連

別シートから締切日をC列にLARGE関数で並べました。ただ、何の締切日かもB列に表示させたいです。締切日をキーにして拾ってくると、同じ締切日の箇所全てに同じ項目が並んでしまいます。解決策お願い致します。

A2=1, C2=LARGE('[ABC.xls]ABC'!$T$6:$T87,$A2)=2006/6/31
A3=2, C3=LARGE('[ABC.xls]ABC'!$T$6:$T87,$A3)=2006/6/30
A4=3, C4=LARGE('[ABC.xls]ABC'!$T$6:$T87,$A4)=2006/6/30
A5=4, C5=LARGE('[ABC.xls]ABC'!$T$6:$T87,$A5)=2006/6/30
A6=5, C6=LARGE('[ABC.xls]ABC'!$T$6:$T87,$A6)=2006/6/29

失敗例
B2=INDEX('[ABC.xls]ABC'!E6:E87,MATCH(C2,'[ABC.xls]ABC'!T6:T87,FALSE))

Aベストアンサー

RANK関数を使用して、別シートに入力したリストに順番をつけて、その順番でソートすれば期待するものは得られませんか

別シート
A1 締めきりの内容
B1 締め切り日
C1 =RANK(B2,B:B,1)

C列で昇順にソート(並べ替え)して、もう一方のシートには

(a2の内容) = 別シート!A1 (b2の内容) = 別シート!B1

(a3の内容) = 別シート!A2 (b3の内容) = 別シート!B2

毎回ソートが面倒ならソートの所だけマクロ化しても良いと思います

Qラジオボタン選択で「複数ラジオボタン」をアクティブにするには?

■下記サンプルソースのラジオボタンの「はい」を選択すると複数のラジオボタンがアクティブになるJavaScriptがわからず困っております。教えて頂けないでしょうか。
(ページ開いた際は「いいえ checked」で複数ラジオボタンはグレーで選択無効)

用途はアンケートフォームです。

可能であればシンプルなソースで「最新のWinIE、MacSafari」に対応していると非常に助かります。先輩方よろしくお願いします。


<form name="form2" method="post" action="">
<table>
<tr>
<td>■「はい」を選択すると、ラジオボタン(カテゴリー1~4)がアクティブになる。
</td>
</tr>
<tr>
<td>
<input name="radiobutton" type="radio" value="radiobutton">はい
<input name="radiobutton" type="radio" value="radiobutton" checked>いいえ
</td>
</tr>
<tr>
<td>
<input name="radiobutton" type="radio" value="radiobutton">カテゴリー1
<input name="radiobutton" type="radio" value="radiobutton">カテゴリー2
<input name="radiobutton" type="radio" value="radiobutton">カテゴリー3
<input name="radiobutton" type="radio" value="radiobutton">カテゴリー4
</td>
</tr>
</table>
</form>

■下記サンプルソースのラジオボタンの「はい」を選択すると複数のラジオボタンがアクティブになるJavaScriptがわからず困っております。教えて頂けないでしょうか。
(ページ開いた際は「いいえ checked」で複数ラジオボタンはグレーで選択無効)

用途はアンケートフォームです。

可能であればシンプルなソースで「最新のWinIE、MacSafari」に対応していると非常に助かります。先輩方よろしくお願いします。


<form name="form2" method="post" action="">
<table>
<tr>
<td>■「はい」を選択すると...続きを読む

Aベストアンサー

カテゴリーが違うのに同じ名前を使うと使い勝手が悪いです
#1さんのようにわけてかくといいですね。
こんな感じで、オブジェクトを引数で渡すと比較的
ローレベルのjavascriptで動作します。

<script language="javascript">
function changeRadio(num1,num2){
var f=num1.form
for(var i=0;i<f.length;i++){
if (f.elements[i].name==num2) f.elements[i].disabled=((num1.value=="yes")?false:true)
}
}
</script>
<form name="form2" method="post" action="">
<table>
<tr>
<td>■「はい」を選択すると、ラジオボタン(カテゴリー1~4)がアクティブになる。
</td>
</tr>
<tr>
<td>
<input name="radioSelect" type="radio" value="yes" onclick="changeRadio(this,'radiocategory')">はい
<input name="radioSelect" type="radio" value="no" checked onclick="changeRadio(this,'radiocategory')">いいえ
</td>
</tr>
<tr>
<td>
<input name="radiocategory" type="radio" value="category1" disabled>カテゴリー1
<input name="radiocategory" type="radio" value="category2" disabled>カテゴリー2
<input name="radiocategory" type="radio" value="category3" disabled>カテゴリー3
<input name="radiocategory" type="radio" value="category4" disabled>カテゴリー4
</td>
</tr>
</table>
</form>

カテゴリーが違うのに同じ名前を使うと使い勝手が悪いです
#1さんのようにわけてかくといいですね。
こんな感じで、オブジェクトを引数で渡すと比較的
ローレベルのjavascriptで動作します。

<script language="javascript">
function changeRadio(num1,num2){
var f=num1.form
for(var i=0;i<f.length;i++){
if (f.elements[i].name==num2) f.elements[i].disabled=((num1.value=="yes")?false:true)
}
}
</script>
<form name="form2" method="post" action="">
<table>
<tr>
<td>■「はい」...続きを読む

QExcelセルにVBAでINDEX関数を入力

ExcelでINDEX関数とMATCH関数で"B11:E13"セルに以下の数式データがあります。

数式は
"B11"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0)))


"B12"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0)))

"B13"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0)))

"C11"==IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0))),"",INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0)))



"B15~B23"に数値1~3を入力した場合イニシャルA~I が入力される式ですが、列を連続で入力できるような処理をVBAのWorksheetFunctionで行うにはどのようにコードを記述すればよいのでしょうか。
ご回答のほどよろしくお願いします。

ExcelでINDEX関数とMATCH関数で"B11:E13"セルに以下の数式データがあります。

数式は
"B11"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0)))


"B12"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0)))

"B13"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0)))

"C11"==IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0))),"",INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0)))...続きを読む

Aベストアンサー

続けてお邪魔します。

エラー処理について・・・

安直な方法ですが
↓のコードにしてみてください。

Sub Sample2()
Dim i As Long, j As Long
On Error Resume Next '←おまじないでこの行を追加
For j = 2 To 5
For i = 1 To 3
Cells(i + 10, j) = WorksheetFunction.Index(Range("A1:A9"), WorksheetFunction.Match _
(i, Range(Cells(15, j), Cells(23, j)), False))
Next i
Next j
End Sub

これで1~3のデータがない場合でも何とか対処できると思います。m(_ _)m

Qjavascriptでラジオボタンのが変更できない

javascriptを勉強中なのですが
練習で下記のような麻雀の計算をしてくれるサイトを作ってみましたがうまく反応しません。

http://tegarude.sakura.ne.jp/mafu/form.html

できない点は、例えば、ロンの項目で面前のチェックの時、ツモの項目にいいえが入りますが、
その後、ツモの項目で平和のチェックをいれようとしてもチェックが入りません。
javascriptで操作するようにしたのですがどうもうまくいきません。

単純なこと簡単なことなのかもしれませんが
どなたかご教授願えませんでしょうか?

ソースコードが長いのでjavascriptの記述のみ載せています。
サンプルのURLを参考にして下さい。

function on(){

//ロン・ツモ・待ち・雀頭の値を取得
function mjk01(m1,m2){
for (j=0; j<m1.length; j++){

if(m1[j].checked){
m2.innerHTML=m1[j].value;
}
}
}

mjk01(document.form1.radio2,document.getElementById("a00"));
mjk01(document.form1.radio3,document.getElementById("a01"));
mjk01(document.form1.radio4,document.getElementById("a02"));
mjk01(document.form1.radio5,document.getElementById("a03"));


//formプロパティの省略
formt=document.form1;

//ロン項目設定
if(formt.radio2[0].checked){
formt.radio3[3].checked=true;
formt.radio7[0].checked=true;
formt.radio9[0].checked=true;
formt.radio11[0].checked=true;
formt.radio13[0].checked=true;
}
if(formt.radio2[1].checked){
formt.radio3[3].checked=true;
formt.radio4[0].checked=true;
formt.radio5[2].checked=true;
formt.radio6[0].checked=true;
formt.radio8[0].checked=true;
formt.radio10[0].checked=true;
formt.radio12[0].checked=true;
}
if(formt.radio2[2].checked){
formt.radio3[3].checked=true;
}

//ツモ項目設定
if(formt.radio3[0].checked){
formt.radio2[3].checked=true;
formt.radio4[0].checked=true;
formt.radio5[2].checked=true;
formt.radio6[0].checked=true;
formt.radio8[0].checked=true;
formt.radio10[0].checked=true;
formt.radio12[0].checked=true;
}
if(formt.radio3[1].checked){
formt.radio2[3].checked=true;
formt.radio4[0].checked=true;
formt.radio5[2].checked=true;
}
if(formt.radio3[2].checked){
formt.radio2[3].checked=true;
}





//面子の設定

function mentsu(m1,m2,m3){

if(m1[0].checked){
m2[1].value=4;
m2[2].value=16;
m2[3].value=8;
m2[4].value=32;
}
if(m1[1].checked){
m2[1].value=2;
m2[2].value=8;
m2[3].value=4;
m2[4].value=16;
}
for(i=0; i<m2.length; i++){

if(m2[i].checked){
m3.innerHTML=m2[i].value;
}
}
}

mentsu(document.form1.radio7,document.form1.radio6,document.getElementById("a04"));
mentsu(document.form1.radio9,document.form1.radio8,document.getElementById("a05"));
mentsu(document.form1.radio11,document.form1.radio10,document.getElementById("a06"));
mentsu(document.form1.radio13,document.form1.radio12,document.getElementById("a07"));



//小計をすべて数字に変換
num0=document.getElementById("a00").innerHTML;
num1=document.getElementById("a01").innerHTML;
num2=document.getElementById("a02").innerHTML;
num3=document.getElementById("a03").innerHTML;
num4=document.getElementById("a04").innerHTML;
num5=document.getElementById("a05").innerHTML;
num6=document.getElementById("a06").innerHTML;
num7=document.getElementById("a07").innerHTML;
num0 = parseFloat(num0);
num1 = parseFloat(num1);
num2 = parseFloat(num2);
num3 = parseFloat(num3);
num4 = parseFloat(num4);
num5 = parseFloat(num5);
num6 = parseFloat(num6);
num7 = parseFloat(num7);

//総合計の算出
document.getElementById("total").innerHTML=num0+num1+num2+num3+num4+num5+num6+num7;

}

javascriptを勉強中なのですが
練習で下記のような麻雀の計算をしてくれるサイトを作ってみましたがうまく反応しません。

http://tegarude.sakura.ne.jp/mafu/form.html

できない点は、例えば、ロンの項目で面前のチェックの時、ツモの項目にいいえが入りますが、
その後、ツモの項目で平和のチェックをいれようとしてもチェックが入りません。
javascriptで操作するようにしたのですがどうもうまくいきません。

単純なこと簡単なことなのかもしれませんが
どなたかご教授願えませんでしょうか?

ソースコード...続きを読む

Aベストアンサー

onclick属性を
onclick="on()"
から
onclick="on(this)"


function on(){
......
}

function on(target){
......
}


//ロン項目設定

//ツモ項目設定
のif文を

if(???.checked)
から
if(???===target)

変えてみてください。


人気Q&Aランキング