2009/12/23 (水) 10:18
ここでは、キーワード一覧として作ったリスト(ご飯、昼、猫)からデータベース(アンケート情報)に文字を含んでいるか検索する複数条件の一致件数をチェックする方法について説明します。
今回は、さらに検索キーワードに部分一致になるよう工夫しています。
画像:文章は例です。

その他の使用例としては、
製品名リストから、アンケート情報にその文字を含んでいるかチェックするときなどに便利です。
■使用関数
DCOUNTAを使う
関数=DCOUNTA(①、②、③)
①タイトル名も含む表やデータベース
②データベースのどれか一つのタイトル名
③検索条件を作った表
実行する手順
- データベースを用意する。(これはアンケート情報などの検索対象です)
- キーワード一覧を用意する。(これは製品名などの検索ワードです)
- 完全一致検索ではなく、そのワードを含んでいるかチェックするためワイルドカード(*)をつける。(*を付けることによってキーワードの前後に文字が含まれても含まれていなくても一致となります。)
「 =”*”&D2&”*” 」ここではこのような関数でつなげています。
“ … 文字として認識さえるため囲う(例:”りんご”)
& … セルや文字を連結させる(例:”リンゴ”&”とまと” は リンゴとまと)

- 今作ったキーワード一覧にタイトルを付ける。これはデータベースの検索したい列のタイトル名と一致させないと実行してくれません。
- 検索対象の横のセルに
- =DCOUNTA($A$1:$A$2,$A$1,E1:E5)
- と入力する。
かっこ内は(検索対象の表、検索対象のタイトル名、キーワード一覧の表)となっています。
あとは一番したの行まで引き延ばすのですが、
カウント数字は、数字がおかしなことになっています。
そこで、$(ドルマーク)を使ってデータを下までオートフィルで入力する前に
固定したいセルをきめます。
オートフィルする時のセルの固定方法
(A1のセルを例に説明します。)
A1 固定なし
$A$1 行と列固定
$A1 列固定
A$1 行固定
セルの固定はひとつづつ説明すると説明が長くなってしまうので、ここでは飛ばします。しかし、オートフィルを便利するために必要な作業ですので、
試行錯誤しながら固定する部分を決めてみてください。
ここからさらに複雑になりますが、あと少しです。
このセルを固定しても数字が徐々に増加しています。
一致しない行にも数字が振られています。
そのため、次にする手順は
- 検索している行の上のすべてのセルの合計を引きます。
つまり、一番上のセルから検索している一つ上のセルまでの合計を引きます。
これによって数が一致数が1か0になり完了です。
画像:DCOUNTA内の関数(最初の行)

画像:DCOUNT内の関数(最終行)

あとは、1と付いた行だけ抽出するなり、コピーするなりして活用してください。
今回はエクセル中級(?)が作成したので、
誤字脱字、手順違い等あると思います。
また、これよりもっといい方法がありましたら、ご連絡ください。
更新日:2009/12/23(天皇誕生日の朝より)
(実行環境,excel2007,Vista)
コメント(0)続きを読む
2009/11/14 (土) 13:37
コメント(0)続きを読む
2009/11/11 (水) 5:27
ボールの衝突判定複数版
もっと硬いボールをイメージして作ったのですが、ボールがやわらくめりこんでしまいます。
//定数は最初にまとめて定義
var numBalls:int = 20;
var bounce:Number = -0.01;
var spring:Number = 0.6;
var gravity:Number = 0.9;
//配列で個別にボールの初期位置を定義
var balls:Array = new Array();
for (var i:int = 0; i<numBalls; i++) {
var ball:Ball = new Ball(Math.random()*40+25, Math.random() * 0x000000);
ball.x = Math.random() * stage.stageWidth;
ball.y = Math.random() * stage.stageHeight;
ball.vx = Math.random() * 6-3;
ball.vy = Math.random() * 6-3;
addChild(ball);
balls.push(ball);
}
addEventListener(Event.ENTER_FRAME, onEnterFrame);
function onEnterFrame(e:Event):void {
//配列で個別に計算
for(var i:int = 0; i< numBalls - 1; i++){
var ball0:Ball = balls[i];
for(var j:int = i + 1; j< numBalls; j++){
var ball1:Ball = balls[j];
var dx:Number = ball1.x - ball0.x;
var dy:Number = ball1.y - ball0.y;
var dist:Number = Math.sqrt(dy*dy + dx*dx);
var minDist:Number = ball0.radius + ball1.radius;
//真中のボールと衝突したときの跳ね返り
if (dist<minDist) {
var angle:Number = Math.atan2(dy, dx);
var tx:Number = ball0.x + Math.cos(angle) * minDist;
var ty:Number = ball0.y + Math.sin(angle) * minDist;
var ax:Number = (tx - ball1.x) * spring;
var ay:Number = (ty - ball1.y) * spring;
ball0.vx -= ax;
ball0.vy -= ay;
ball1.vx += ax;
ball1.vy += ay;
}
}
}
for(i = 0; i<numBalls; i++){
var ball:Ball = balls[i];
move(ball);
}
}
//ボールの運動は切り離して計算
function move(ball:Ball):void {
ball.vy += gravity;
ball.x += ball.vx;
ball.y += ball.vy;
//ステージ端の跳ね返り
if (ball.x < ball.radius) {
ball.x = ball.radius;
ball.vx *= bounce;
} else if (ball.x > stage.stageWidth - ball.radius) {
ball.x = stage.stageWidth - ball.radius;
ball.vx *= bounce;
}
if (ball.y < ball.radius) {
ball.y = ball.radius;
ball.vy *= bounce;
} else if (ball.y > stage.stageHeight - ball.radius) {
ball.y = stage.stageHeight - ball.radius;
ball.vy *= bounce;
}
}
コメント(0)続きを読む
2009/11/10 (火) 20:50
複数目標のバネの運動です。周りの青いボールに真中の緑のボールがゴムで固定されているように見えます。周りの青いボールだけマウスでドラック&ドロップで動かすことができます。
色々実験してみてわかった結果
摩擦係数に関してfriction
- 1に近い値(0.9だと)ツルツルな動き
- 0に近い値(0.1だと)べったりとして動き
- 1を超えるとバネで振れながら大きくなる
- マイナスになると膨張
スプリングに関してspring
- 1に近い値(0.9だと)高速に振れるブルブル
- 0に近い値(0.1だと)のっそりと収束
- 1を超えるとガチガチ1.6以上は膨張
- マイナスになると膨張
//ハンドル付きボールのハネ運動スクリプト
var spring:Number = 0.1;
var friction:Number = 0.8;
var numHandles:Number = 3;
//センターボールの作成
var ball:Ball = new Ball(40, 0x006600);
addChild(ball);
//ハンドルの配列制御
var handles = new Array();
for(var i:int=0; i<numHandles; i++){
var handle:Ball = new Ball(10, 0x0000ff);
handle.x = Math.random() * stage.stageWidth;
handle.y = Math.random() * stage.stageHeight;
addChild(handle);
handle.addEventListener(MouseEvent.MOUSE_DOWN, onPress);
handles.push(handle);
}
addEventListener(Event.ENTER_FRAME, onEnterFrame);
addEventListener(MouseEvent.MOUSE_UP, onRelease);
//フレーム毎の処理
function onEnterFrame(e:Event):void {
//ボールの生成部分
for(var i:int = 0; i<numHandles; i++){
var handle:Ball = handles[i] as Ball;
//ボールの動き
ball.vx += (handle.x - ball.x) * spring;
ball.vy += (handle.y - ball.y) * spring;
}
ball.vx *= friction;
ball.vy *= friction;
ball.x += ball.vx;
ball.y += ball.vy;
//線の生成
graphics.clear();
graphics.lineStyle(1);
for(i = 0; i<numHandles; i++){
graphics.moveTo(ball.x, ball.y);
graphics.lineTo(handles[i].x, handles[i].y);
}
}
//マウスを押したとき
function onPress(e:MouseEvent):void {
e.target.startDrag();
}
//マウスを離したとき
function onRelease(e:MouseEvent):void {
stopDrag();
}
コメント(0)続きを読む
2009/11/09 (月) 23:00
ばねチェーン複数版FLASH
まずは、ボールが5個のとき、バネを調節した動き
続いて、ボールが20個のとき、スプリング係数と摩擦係数を調節
ボール100個のとき、スプリング係数と摩擦係数を調節。
ボール5個のときのスクリプト
//変数定義
var targetX:Number = stage.stageWidth/2;
var targetY:Number = stage.stageHeight/2;
var spring:Number = 0.2;
var friction:Number = 0.6;
var gravity:Number = 1;
var balls:Array = new Array();
var numBalls:int = 5;
//ボールの数だけ作成して、表示。配列にプッシュする。
for (var i:int = 0; i<numBalls; i++){
var ball:Ball = new Ball(20, 0x0000ff*i/numBalls);
addChild(ball);
balls.push(ball);
}
addEventListener(Event.ENTER_FRAME, onEnterFrame);
//フレーム毎のイベント
function onEnterFrame(e:Event):void {
graphics.clear();
graphics.lineStyle(1,0xaaaaaa);
graphics.moveTo(mouseX, mouseY);
moveBall(balls[0], mouseX, mouseY);
graphics.lineTo,(balls[0].x, balls[0].y);
//ボール数を指定した分だけ繰り返す
for(var i:int = 1; i<numBalls; i++){
var ballA:Ball = balls[i-1];
var ballB:Ball = balls[i];
moveBall(ballB,ballA.x, ballA.y);
graphics.lineTo(ballB.x, ballB.y);
}
}
//複数のボールを別々に計算するための配列
function moveBall(ball:Ball, targetX:Number, targetY:Number):void {
var dx:Number = targetX - ball.x;
var dy:Number = targetY - ball.y;
//バネ運動は加速の値に掛けます。
var ax:Number = dx * spring;
var ay:Number = dy * spring;
ball.vx += ax;
ball.vy += ay;
ball.vx *= friction;
ball.vy *= friction;
//ball.vy += gravity;
ball.x += ball.vx;
ball.y += ball.vy;
}
ねむすぎて、意識がもうろうとしてる中で作成しました。
コメント(0)続きを読む
関連する記事