- 締切済み
Eecel でのデータ操作方法 (たぶん簡単のはず!) 教えてください。
心理学実験のデータをSPSSにかけるための、数値の下処理をEecelでやっていますが、 以下の3点、ご存知でしたら教えていただけませんか。 1.データを絶対値に変換して、そのデータの列を合計する方法 (どこのセルに数式(書式?)を入力するのかも含めて。) 2.データの数字を(ルールにしたがって)別の数字に変える方法 例えば、 ・ -2~2 までのデータを 1~5 に割り当てる とか、 ・ 5→1、 4→2、 (3→3のまま)、 2→4、 1→5 (大小の方向を入れ替える) ということです。 再割り当て、というメニューがあるようですが、どう設定していいのかわからないのです。入力方法を具体的に教えてください。 3.(これはSPSSの質問になりますが) クロス集計表で出した度数を、変数として自動的に元データのセルに返す方法 ご回答いただけるととても助かります。 どうぞよろしくお願いいたしますm(_ _)m
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- backs
- ベストアンサー率50% (410/818)
(1)についてですが,要するにA1:A10といった範囲に入力されているデータをすべて絶対値で表したいのですよね。だったら, Sub zetai() Dim a As Range For Each a In Range("A1:A10") a = Abs(a) Next a End Sub というコードを書いて実行すればできると思いますが,これではダメなんでしょうか。。。 For Each a In Range("A1:A10")の部分の"A1:A10"という部分を任意の範囲に変更するだけです。ただし,原データが入力されているワークシートではなく,原データをコピーしたワークシートで実行しないと後戻りができませんからね(当たり前ですが)。
- backs
- ベストアンサー率50% (410/818)
http://homepage2.nifty.com/nandemoarchive/sas_r_excel/excel_vba_prog.htmにあるワークシートをダウンロードして使えば(2)は簡単にできると思います。
- nobu555
- ベストアンサー率45% (158/345)
#1です。 >例えば =ABS(A1:C8) こういう使い方は出来ません。 >出力したいセルの1つ1つに計算式を入れなければならない、ということでしょうか? これも同じです。 この場合(データの行列)、D列から右側が空いているとすると セルD1に下記を入力して =ABS(A1) D1からF8にコピーすれば、 絶対値に変換されたデータの行列が出来ます。 >5→1、4→2、(3→3のまま)、2→4、1→5(大小の方向を入れ替える) >データは行列(かなり大きいもの)で やはり7つじゃ足りないみたいですね。 #1でも紹介したほかに方法は、いろいろあります。 INDEX、VLOOKUP、CHOOSE関数等。 (使い方は、ヘルプで確認してください) 目的や用途が明確になれば、 もっと的確なアドバイスが出来ると思うのですが。
補足
ご回答ありがとうございます。 > =ABS(A1) > D1からF8にコピーすれば、 > 絶対値に変換されたデータの行列が出来ます そうですよね! ちょっと考えたらわかりました。いま、やってみたらできました(^^) > やはり7つじゃ足りないみたいですね。 7つでは足りませんが、せいぜい15個ぐらいなので、 教えていただいたIF関数式を2本立てればいいのだな、と思って、やってみました。 うまくいきました!やりたいことができました(^^) ほんとにありがとうございました。とても助かりました。
- y_akkie
- ベストアンサー率31% (53/169)
殆どNo1さんがご説明されていますが、以下の部分だけ少し簡単な計算法をご提案させていただきます。 >・ 5→1、 4→2、 (3→3のまま)、 2→4、 1→5 (大>小の方向を入れ替える) A1、A2、…A10にそれぞれのデータが入っている場合、 B1、B2 ..B10に対して、6-A1、6-A2、....、6-A10を入力すれば 良いと思います。 また、1→n、2→n-1、.......、n→1の場合には、 B1、B2、B3、...にはそれぞれ、(-1)*(A1-n)+1、(-1)*(A2-n)+1、 (-1)*(A3-n)+1.....を入力していけばよいはずです。
補足
ご回答ありがとうございます。 >・ 5→1、 4→2、 (3→3のまま)、 2→4、 1→5 (大>小の方向を入れ替える) こういうことは、難しい関数式でなくても、 足し算、引き算、掛け算の組み合わせで表現できる、という点がとても参考になりました。 しかしこれは、出力したいセルの1つ1つに計算式を入れなければならない、ということでしょうか? No.1さんへの補足でも書きましたように、データは行列(かなり大きいもの)で、変換したい元の数値は規則的にはまったく入っておりません。つまり、 A1→4、A2→1、A3→3、A4→5 … というふうにランダムにずらっと入っていますので、 式を一本立てて、そのルールで一度にぱっと変換する、という方法をできればとりたいのです。 No.1さんが、IF関数は7つまで、とおっしゃっていましたが、 7つ以上の場合は1本の数式表現での変換はできないのでしょうか?
- nobu555
- ベストアンサー率45% (158/345)
>1.データを絶対値に変換して、そのデータの列を合計する方法 =ABS(A1) 入力セルは、任意です。 (隣接したセルに入力するのが、普通で見た目上判り易いです) >2.データの数字を(ルールにしたがって)別の数字に変える方法 対応リストを作成して、LOOKUP関数で変換する。 掲載の例え位なら、以下の数式でも出来ます。 >-2~2 までのデータを 1~5 に割り当てる =A1+3 >5→1、4→2、(3→3のまま)、2→4、1→5 >(大小の方向を入れ替える) =IF(A1=5,1,IF(A1=4,2,IF(A1=3,3,IF(A1=2,4,IF(A1=1,5,"ルール外"))))) IF関数は、最大7つまでしかネストできません。 おそらく、入れ替える数字の種類はもっと多いと思うので この方法は不向きかも? >再割り当て たぶん、”置換”のことだと思いますが、 Office系ソフトで、”置換”で検索してみてください、 いろいろHITした中に、操作方法が出ています。 >3.クロス集計表で出した度数を、変数として自動的に元データのセルに返す方法 Office系ソフトで、”クロス集計”で検索してみてください。 Excelの質問でしたら、基本的に コンピューター [家庭向け] > ソフトウェア > Office系ソフト でされたほうが、回答がつきやすいです。
補足
ご回答ありがとうございます。 絶対値への変換は > =ABS(A1) やってみましたら、たしかにこれでできますね。 ただ、データの行列なので、範囲を指定していっぺんにやりたいのです。そのやり方は、例えば =ABS(A1:C8) という入力でいいのかと思ったのですが、VALUE! となってしまって、うまくいきません。 どうしたらよいのでしょう? >-2~2 までのデータを 1~5 に割り当てる =A1+3 なるほど!これは簡単でいい方法ですね!やってみます。 >(大小の方向を入れ替える) =IF(A1=5,1,IF(A1=4,2,IF(A1=3,3,IF(A1=2,4,IF(A1=1,5,"ルール外"))))) これも、数値が7つ以内なら、とてもよさそうですね!やってみます。 7つ以上の場合はどうするか… No.2さんのご回答も参考にして、ちょっと検討してみます。 > Excelの質問でしたら、基本的に > コンピューター [家庭向け] > ソフトウェア > Office系ソフト > でされたほうが、回答がつきやすいです。 了解しました(^^)今度からそうしますね。 ありがとうございました。
補足
backsさん、ご回答ありがとうございます。 No.4で教えていただいたURL、見ました。 ! こんなのがあったんですね!今後、必要に応じて使います。 それから絶対値変換の件、 1つのセルに設定してそれを横に伸ばす、という方法でできましたが、 もっともっとデータの行列が大きくなったときには、それもやや面倒ですので、 教えていただいたコードを書いて実行してみようと思います。 > 原データをコピーしたワークシートで実行しないと後戻りができませんからね(当たり前ですが)。 はい、了解です(^^) 重ねて、ありがとうございます!