忙しい現代人の腰&肩のお悩み対策!

2年目の若手プログラマです
2年目にもなってこんなこともできないのかと
毎日のように怒られています


VB2005+SQLServer2005で開発を行っています。
期間を3つ入力してデータを抽出する
プログラムを作っているのですが
期間重複チェックがわかりません


期間(1)~期間(3)まであります(抽出条件)
1,2,3各期間重複する場合は再入力させるとしか
仕様書に書かれておらず
プログラミングできず困っています。

期間(1)
txtStartDate1.text
txtEndDate1.text

期間(2)
txtStartDate2.text
txtEndDate2.text

期間(3)
txtStartDate3.text
txtEndDate3.text

このQ&Aに関連する最新のQ&A

A 回答 (6件)

そうそう、老婆心ついでに。



あなたが転職を考えなければならない理由は、もうひとつあります。
会社の方から、あなたを雇うのをやめる可能性がある、ということです。

○業務内容の多くは対外的に秘密です。
 あなたがここで質問すること自体が、秘密の漏洩にあたるかもしれません
それとも、上司等にここで質問しても問題無いことを確認していますか?

○頼まれて作っているのなら、頼んだ人がいるはずです。
 関係者が見れば、これが自分に関係するものだと気付くでしょう。
 こんなことをネットで質問するようなプログラマのいる業者に、信頼して仕事をまかせられるでしょうか?
怒って、契約破棄や損害賠償請求してきてもおかしくないです。


このように、会社に損害を与えるようなことを、あなたはやってしまいました。
うまくすれば、厳重注意の上で始末書提出、で済むかもしれませんが、最悪は、懲戒免職の上に損害賠償ということもあります。
    • good
    • 1

>やはりアルゴリズムが思い浮かばないのでコードでのご回答お願いできませんでしょうか。


>2年目としてはスキルなさすぎですよね

「自分でじっくり考える」というステップを飛ばしていた結果、
アルゴリズムの引き出しがほとんど空っぽのままです。
アルゴリズムを考える力もついていません。
そのため、自分の仕事にも、自分にも自信が持てません。

>いつかプログラミングができるようになると思い

今の姿勢・やり方のままで、いつかプログラミングができるようになると思いますか?
少々突き放した言い方ですが、今のやり方を変える気がないのであれば、転職を考えることをおすすめします。


まず、紙とペンを出して「自分で図を描いて」ください。
・期間1=2/10~2/20 期間2=2/15~2/25とした図……(1)
・期間1=2/10~2/20 期間2=2/23~2/28とした図……(2)
(具体的な数字を使うとイメージしやすくなります)

次に、(1)と(2)の「図を見ながらじっくり考えて」ください。
・なぜ(1)は「重複あり」と判断できるのか。
・(1)で、期間2のスタートをいつにずらせば「重複なし」になるのか。
・なぜ(2)は「重複なし」と判断できるのか。
・(2)で、期間2のスタートをいつにずらせば「重複あり」になるのか。
・「重複あり」と「重複なし」の境目は?

するべき処理を「視覚的にイメージできる」ようになれば一歩前進です。
全くイメージができないままここでコードの話をしてもほとんど意味がありません。

自分でじっくり考えて納得したアルゴリズムは、
あなたにとって、今後ずっと使える引き出しの一つになります。
引き出しが増えれば増えるほど、プログラマーとしての自信も出てくるでしょう。
    • good
    • 0

職業としてやっていく気なら時間が無くったって怒られたって自分で考えなきゃだめだよ。


まずは先輩に聞こうよ。
こんなところで回答待ってる時間あったら手と頭を動かすこと。
このままじゃやっていけないよ?

難しく考えずに各項目に入力されていたらそれぞれ1つずつチェックしていけば?
そこで重複してたらエラーなわけだし。
期間1と期間2をチェック
期間1と期間3をチェック
期間2と期間3をチェック

http://blog.yaju.jp/200812/article_13.html

これみて作っているものに組み込んで。
エラー処理なんかの仕様はわからんから。

ここまで情報があってもソースくれっていうなら仕事考え直したほうがいいよ。
(あと極端にお礼率少ないし、無償で全部作ってくれっていうのもねぇ)
今から自分で考えることを捨ててしまうとだめプログラマーになっちゃう。
がんばって
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
貴方がおしゃっる通り私はプログラマには向いていないと
思っています。全然アルゴリズムがわかりませんし
皆さんの回答説明を読んでも理解がなかなかできません
(日本語での説明)
読解力ないし論理的思考力ないし記憶力ないし
体力ないし心の病気持ってるしで毎日仕事がつらいです。
いつかプログラミングができるようになると思い
先輩のいやみにも耐えていますが・・・
毎日つらいです。家で寝てたいと思います。(約8年引きこもり経験)

ちょっと愚痴を言ってしまいました。
申し訳ありません。
やはりアルゴリズムが思い浮かばないのでコードでのご回答
お願いできませんでしょうか。お忙しい中申し訳ありません。
2年目としてはスキルなさすぎですよね

お礼日時:2013/02/13 11:10

その解説、書き方がちょっとまぎらわしいです。


> 日付の開始日 ≦ (1)~(4)の終了日 AND 日付の終了日 ≧ (1)~(4)の開始日

「日付」と(1)との重複→ 日付の開始日 ≦ (1)の終了日 AND 日付の終了日 ≧ (1)の開始日
「日付」と(2)との重複→ 日付の開始日 ≦ (2)の終了日 AND 日付の終了日 ≧ (2)の開始日
...
の意味です。


「重複しない」の方が
・「日付」と(1)のように 日付の開始日 > もう一方の終了日
・「日付」と(2)のように 日付の終了日 < もう一方の開始日
のどちらか(Or)、と、条件がわかりやすいかもしれません。
この条件を否定すれば、丁度、上記の「重複する」条件になります。

> 期間3つのチェックをするということで全然アルゴリズムが浮かんできません

期間(1)、(2)、(3)で重複がない ⇔ 期間(1)と(2)で重複が無い かつ 期間(2)と(3)で重複が無い かつ 期間(3)と(1)で重複が無い

期間(1)、(2)、(3)で重複がある ⇔ 期間(1)と(2)が重複している または 期間(2)と(3)が重複している または 期間(3)と(1)が重複している

ですよね?この程度で「アルゴリズム」とはとても呼べません。



老婆心ながら。
今回のことは、「算数」の領域だと思います。
これができないようなら、プログラマには向いていない、と言わざるを得ません。
転職するか、算数からやりなおすことをお勧めします。


> コードでのご回答をお願いできませんでしょうか。

これは、あなたの代りに仕事をしろ、ってことですよね?
適正な報酬が貰えるならやりますけど
    • good
    • 0
この回答へのお礼

お忙しい中何度もご回答いただきありがとうございます。
私はプログラマ向いていません自分でもわかっています。
けど、生活のために生きていくためにこの職業にしがみついています。
読解力がないせいで貴方の貴重なご回答が理解できません。
アルゴリズムが浮かんできません。
お忙しい中本当に申し訳ありませんが
コードでのご回答お願いできませんでしょうか
仕事つらいです。

お礼日時:2013/02/13 11:14

紙(Excelでも良いけど)にガントチャートを作成してみて、


じっくり眺めてみるとヒントが出てくるかも。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
インターネットで以下のような資料も見たのですが
図にしたものをコードにするのがよくわからないため投稿
させていただきました。

エイチテーテーピー://woodbook.kir.jp/program/date.html

お忙しい中申し訳ありませんが
コードでのご回答お願いできませんでしょうか

お礼日時:2013/02/13 10:04

わからないのはどこなのでしょうか?



開始日Aから終了日Aの期間

開始日Bから終了日Bの期間
が重なっているかどうか、プログラムではなく、紙と鉛筆で調べるときはどうしてます?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
今回のプログラムは期間1つのチェックもわからないのに
期間3つのチェックをするということで全然アルゴリズム
が浮かんできません
お忙しい中申し訳ありませんが
コードでのご回答をお願いできませんでしょうか。

お礼日時:2013/02/13 10:08

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Qエクセルでの期間の重複について

方法が全く思いつかないので、お手数ですが、ご回答おねがいします!
 下のようなリストがあります。

  A  B     C      D
1 井上 主任 2000/6/26 2003/3/20
2 井上 課長 2002/3/20  2003/3/20

 この表で、井上さんが主任をしていた期間と、
 課長をしていた期間がかぶっています(兼任の為)
 しかし、兼任を考慮しないでカウントしてしまうと 職務期間の合計があわなくなります。
 役職上、課長の期間を優先して日数のカウントをし たいんですが・・・
 当方、恥ずかしながらマクロは使えません。
 関数等、VBAを避けてなんとか出来ないかと考えていますが、
 手動でチェックするにもせめて重複している項目が目でみてわかるようにならないかと質問させて頂きました。
 是非、よろしくお願いします! 

Aベストアンサー

お疲れ様です。
くわしく説明しようとして、遅くなってすいません。
あてはまらなかったらすまないのですが、前提条件として、
降格人事がないことと(課長と主任の)兼任終了日が同一であることを前提に不完全ながら考えてみました。

|A |B |C |D | E |F |G |H |I
1|氏名|役職|就任日 |最終日 |序 |勤続|役職に |兼任|役職
列 |日数|兼任して|前の|在任
|いた日数|日数|日数
―――――――――――――――――――――――――――――
2|井上|課長|2002/3/20|2003/3/20| 3 |1004| 365| ▼|365
3|井上|主任|2000/6/26|2003/3/20| 2 | ▼| 0| 639|997
4| □ |  | | | | ▼| 0| ▼|▼
5|井上|担当|2000/6/19|2002/6/25| 1 | ▼| 0| ▼|▼
6|佐藤|部長|2003/3/19|2003/3/20| 3 |1083| 1| ▼| 1
7|佐藤|課長|2000/6/26|2003/3/20| 2 | ▼| 0|1082|997
8| □ |  | | |  | ▼| 0| ▼|▼
9|佐藤|担当|2000/ 4/1|2000/6/25| 1 | ▼| 0| 0|▼

不完全ながら面倒ですいませんが、
a.まず勤続日数ほか数式をコピーするために、空白セル(□の記号が挿入した空白セルです)を必要なだけ挿入して、
 個人の行数を同一にします(例では4行ですが、揃えるためには何行でも空白セルを挿入して下さい)
b.その時の注意として、課長と主任を兼任していた行の間(例では3・4行目7・8行目)に空白セルは入れないで下さい
(これが兼任していた日数を算出する数式に必須なので)。
c.例のE列の序列欄は空白列でかまわないので挿入しておいて下さい。
 本来は必要ありませんが、主任より課長の役職が高い(優先したい)ということをはっきりさせることが必要な場合や、
 並べ替えで必要な時には作成して下さい。
 B列をコピーして貼り付け(挿入)して、置換して数字に置き換えて下さい。
ここから関数を説明します。
d.例のF列の勤続日数は、例ではF3に=D2-C5と入力してコピーして下さい
(表の▼のセルは計算結果を表示させなくていいセルですなのですが、数式が思いつかず変な値が出てしまいますので、
 まぎらわしいので消したほうがいいでしょう)。
 要は、左下が入社日、右上が計算上の最終日で、このセルの位置関係を統一しないと、トータルの日数の計算式がコピーできないので、
 空白行を挿入して、個人別に行数を同じにする必要があるのです。
e.G列の役職に兼任していた日数は、F2に=IF(D2=D3,D2-C2,0)を入力してコピーして下さい。
 兼任終了後も同じ役職でいた(仮に課長)とすれば、課長の行を2行にして、兼任最終日までのデータと、
 それ以降のデータを上の行に挿入して下さい。
(そうした時も、a.で説明した、個人の行数が同一になることに気をつけて下さい)
 それでもあてはまらない場合は、数式のD2=D3をC列に数式を変えるなど、工夫していただければ幸いです
f.兼任前の日数は、H3に=F2-G2と入力して下さい(上の行を参照しているので、H2に入力するとエラー値が出ます)。
g.役職在任日数は、I2に=D2-C2と入力
月の定義があいまいなので、日数/30などで概算を出していただければと思います。
参考になれば幸いです。

お疲れ様です。
くわしく説明しようとして、遅くなってすいません。
あてはまらなかったらすまないのですが、前提条件として、
降格人事がないことと(課長と主任の)兼任終了日が同一であることを前提に不完全ながら考えてみました。

|A |B |C |D | E |F |G |H |I
1|氏名|役職|就任日 |最終日 |序 |勤続|役職に |兼任|役職
列 |日数|兼任して|前の|在任
|いた日数|日数|日数
――――――――――――...続きを読む

Q2つの期間の重複する日数(月数)を計算するには?

2つの期間の重複する日数(月数)を計算するには?

タイトルのとおりなのですが、
下記のようなテーブルがあります。

 品名    開始      終了
きゃべつ  2010/4/1    2010/6/1
レタス   2010/3/10    2010/3/15
すいか   2010/4/12    2010/10/1
トマト   2010/3/10    2010/4/10

下記のように、これとは別にフォームで任意の期間を指定すると重複した期間が出るようなクエリを作りたいのですが、どのようにすれば良いでしょうか?

フォーム 調査期間 2010/4/10~2010/4/15

 品名  重複期間  
きゃべつ  6   
レタス   0    
すいか   4    
トマト   1

良い方法をご存じの方がいらっしゃいましたら是非ともご教示下さいませ。

Aベストアンサー

終了期間の小さな方-開始期間の大きな方 が、負の値になったら重複無し
0以上の場合は+1した値が重複日数

Qエクセルで重複を除いた日付のカウント(条件付き)

過去の記録にもなく、困っています。

エクセルで(A列の)日付をカウントしたいのですが、重複して困っています。

「C1」に任意の日付(○月○日)を入れると、「D1」に○月○日以下の日付がカウントされるようにしたいのです。

     A     B    C     D
1  4月5日        
2  4月6日
3  4月6日
4  4月6日
5  4月7日
6  4月7日
7  4月8日


D1に
=COUNTIF(A:A,"<="&C1)
といれてみると、重複してカウントされてしまうのですが、重複を除いてカウントがしたいのです。

ちなみに(C1)に「4月7日」を入れると、(D1)に「3」になるようにしたいのに、重複して「6」となってしまいます。


おいそがしいと思いますが、どうかご教授をお願いいたします。

Aベストアンサー

日付データがA1セルから入力されているなら以下の式でC1セル以下の日付の数が求められます。

=COUNT(INDEX(1/(MATCH(A1:A10,A1:A10,0)=ROW(A1:A10)*(A1:A10<=C1)),))

A2セルからのデータの場合は、ROW(A1:A10)の部分を以下のように変更します

=COUNT(INDEX(1/(MATCH(A2:A10,A2:A10,0)=(ROW(A2:A10)-1)*(A2:A10<=C1)),))

Q時間の重複チェック

下記の様なテーブルがあり、複数の時間(事象に対して同じ日付の時間15分以内のもの)の重複をチェックを行いたい場合どのような関数になるのでしょうか?

日付 時刻  事象名
2/1 12:00 A
2/1 12:01 A
2/1 12:02 A
2/2 01:12 B
2/2 01:18 B

Aベストアンサー

日付:A列 時刻:B列 事象名:C列 重複数表示:D列 とします。
重複チェックをどう表示したいのか分からないので、重複する数をそのまま表示します。
単独のものは1と表示され、複数ある場合は2以上となります。
重複の判断は「日付と事象が同じで、時刻がその行のものの15分前~15分後のもの」の数を数えています。

D2に次の式を入れて必要な行数コピーしてください(1行目がタイトルでチェック開始が2行目という想定です)
=COUNTIFS(A:A,A2,C:C,C2,B:B,">="&B2-1/24/60*15,B:B,"<="&B2+1/24/60*15)
意味としては、以下の全ての条件に該当するものの数を数える
A列のデータがA2に一致し、C列のデータがC2に一致し、B列のデータがB2の15分前以降で、B列のデータがB2の15分前以前であるもの。
となっています。
1/24/60*15というのは、1日を24時間で割って60分で割って15分をかけています。1/96としても問題ないですが、意味が分かるように式で残しています。

Q期間の重複を調べるSQL文について・・・

EVENT
--+------------+------------+
id | start_date | end_date
--+------------+------------+
0 | 2007-06-01 | 2007-06-03 |
--+------------+------------+
1 | 2007-06-04 | 2007-04-06 |
--+------------+------------+
2 | 2007-06-02 | 2007-06-05 |

↑こんな感じでイベントを管理するテーブルがあります。
イベントの開催期間の重複を出力するSQL文を書きたいのですが、
何かいい案はありませんでしょうか???

結果的には重複し合っているレコードのidを出力させたいです。
よろしくお願いします。

Aベストアンサー

#3で提示したような結果でいいなら、下記SQLで実現できると思います。

select x.id,y.id as 重複id
from t1 as x,t1 as y
where
(x.sdate between y.sdate and y.edate
or x.edate between y.sdate and y.edate)
and x.id<>y.id
order by x.id,y.id;

QVB 日付範囲チェック

VBで日付の比較チェックをしたい
日付項目が2つあるとする
1年を越える日付が指定されましたらエラーを飛ばしたい
DateAdd ,diffなどを使ってやっているがうまくいきません
どうしたらいいですか?
おねがいします
2003/01~2003/12はok
2003/01~2004/01ならエラーを飛ばす
形式は"yyyy/mm"

Aベストアンサー

年月しかないデータ同士で上手くいかないのなら、仮に年月1(2003/01/01や2004/04/01)と
日を与えてみてはどうでしょう?
⇒DateDiffで月数を出してみるとか?

VBのどれの事なのかわからないので、あくまで憶測です。

Q日付の重複

期間A 2006/04/05 ~ 2006/07/31
期間B 2006/05/05 ~ 2006/08/30
AとBの期間が1日でも重複しているかどうかを調べるにはどうしたらいいでしょうか?
JavaのDateクラスのメソッドを使用する予定ですが、比較演算子(<,<=,>,>=)等の例でも構いませんので、ご教授ください。

期間A 2006/04/05 ~ 2006/07/31
期間B 2006/03/05 ~ 2006/08/30
⇒重複とみなす
期間A 2006/04/05 ~ 2006/07/31
期間B 2006/05/05 ~ 2006/06/05
⇒重複とみなす
期間A 2006/04/05 ~ 2006/07/31
期間B 2006/03/05 ~ 2006/04/05
⇒重複とみなす
期間A 2006/04/05 ~ 2006/07/31
期間B 2006/07/31 ~ 2006/08/30
⇒重複とみなす

いろいろやってみましたが、上手くいかないのです。

Aベストアンサー

比較時の条件だけということですね。
Aの開始 ≦ Bの終了 && Bの開始 ≦ Aの終了
だけで全てのパターンを検出できます。

以下のパターンが重複するものですが、全て上の条件式で検出できます。

Aの開始-----------------Aの終了
     Bの開始------------------Bの終了

     Aの開始------------------Aの終了
Bの開始-----------------Bの終了

Aの開始----------------------------Aの終了
     Bの開始-------Bの終了

     Aの開始-------Aの終了
Bの開始----------------------------Bの終了

重複しない以下のパターンでは、上の条件式は成立しません。
Aの開始-------Aの終了
                  Bの開始-------Bの終了

                  Aの開始-------Aの終了
Bの開始-------Bの終了

比較時の条件だけということですね。
Aの開始 ≦ Bの終了 && Bの開始 ≦ Aの終了
だけで全てのパターンを検出できます。

以下のパターンが重複するものですが、全て上の条件式で検出できます。

Aの開始-----------------Aの終了
     Bの開始------------------Bの終了

     Aの開始------------------Aの終了
Bの開始-----------------Bの終了

Aの開始----------------------------Aの終了
     Bの開始-------Bの終了

     Aの開始-------Aの終了
Bの開始--------------...続きを読む

Q[Access]時間帯の重複チェック

下記のようなテーブルがあって、時間帯がかぶっているレコードを
クエリで抽出したいと考えております。

≪tbl_配置一覧≫
ID  日付    勤務地  開始時間 終了時間  担当者
1  2009/9/2   東京   10:00  12:00  Aさん
2  2009/9/2   東京   13:00  14:00  Aさん
3  2009/9/2   神田   12:30  14:00  Bさん
4  2009/9/2   神田   09:00  11:00  Aさん

ID1と4のように同じ担当者が時間帯がかぶる形で勤務予定となっている場合、このレコード二つをクエリで抽出したいと考えております。

いろいろ探して下記のようなSQL文を書いてみたのですが、どうもうまくいきません。

SELECT tbl_配置一覧.ID, tbl_配置一覧.日付, tbl_配置一覧.勤務地, tbl_配置一覧.開始時間, tbl_配置一覧.終了時間, tbl_配置一覧.担当者
FROM tbl_配置一覧, tbl_配置一覧 AS tbl_配置一覧_1
WHERE (((tbl_配置一覧.ID)<>[tbl_配置一覧_1].[id]) AND ((tbl_配置一覧.日付)=[tbl_配置一覧_1].[日付]) AND ((tbl_配置一覧.勤務地)=[tbl_配置一覧_1].[勤務地]) AND ((tbl_配置一覧.開始時間)<[tbl_配置一覧_1].[終了時間]) AND ((tbl_配置一覧.終了時間)>[tbl_配置一覧_1].[開始時間]))
ORDER BY tbl_配置一覧.ID;

大変申し訳ないですが、ご教授よろしくお願いいたします。

下記のようなテーブルがあって、時間帯がかぶっているレコードを
クエリで抽出したいと考えております。

≪tbl_配置一覧≫
ID  日付    勤務地  開始時間 終了時間  担当者
1  2009/9/2   東京   10:00  12:00  Aさん
2  2009/9/2   東京   13:00  14:00  Aさん
3  2009/9/2   神田   12:30  14:00  Bさん
4  2009/9/2   神田   09:00  11:00  Aさん

ID1と4のように同じ担当者が時間帯がかぶる形で勤務予定となっている場合、この...続きを読む

Aベストアンサー

#1の方の回答にあるように、勤務地を担当者に変更することでサンプル上は動くと思います。
(以下は書き方を変更しただけなので同じものになります)

SELECT Q1.* FROM tbl_配置一覧 AS Q1, tbl_配置一覧 AS Q2
WHERE
Q1.ID <> Q2.ID
AND Q1.日付 = Q2.日付
AND Q1.担当者 = Q2.担当者
AND Q2.開始時間 < Q1.終了時間
AND Q2.終了時間 > Q1.開始時間
ORDER BY Q1.ID;


これは直積を使ったやり方です。(直積については以下参照)
http://ja.wikipedia.org/wiki/%E9%96%A2%E4%BF%82%E4%BB%A3%E6%95%B0#.E7.9B.B4.E7.A9.8D

ここでサンプルにデータ(ID=5)を1つ追加してみます。

ID  日付    勤務地  開始時間 終了時間  担当者
1  2009/9/2   東京   10:00  12:00  Aさん
2  2009/9/2   東京   13:00  14:00  Aさん
3  2009/9/2   神田   12:30  14:00  Bさん
4  2009/9/2   神田   09:00  11:00  Aさん
5  2009/9/2   秋葉原  10:30  11:30  Aさん

ここでは、1,4,5 を抽出する必要があります。
上記SQLを実行すると

ID  日付    勤務地  開始時間 終了時間  担当者
1  2009/9/2   東京   10:00  12:00  Aさん
1  2009/9/2   東京   10:00  12:00  Aさん
4  2009/9/2   神田   09:00  11:00  Aさん
4  2009/9/2   神田   09:00  11:00  Aさん
5  2009/9/2   秋葉原  10:30  11:30  Aさん
5  2009/9/2   秋葉原  10:30  11:30  Aさん

となります。
なぜかは、SELECT Q1.* FROM・・・ を SELECT * FROM・・・ に変更して他のフィールドを実際にみてください。


ここで 1,4,5 を抽出する一例は以下。

SELECT * FROM tbl_配置一覧 AS Q1
WHERE
EXISTS (
SELECT 1 FROM tbl_配置一覧 AS Q2
WHERE
Q1.ID <> Q2.ID
AND Q1.日付 = Q2.日付
AND Q1.担当者 = Q2.担当者
AND Q2.開始時間 < Q1.終了時間
AND Q2.終了時間 > Q1.開始時間
)
ORDER BY Q1.ID;

※なお、このクエリは編集できます。


※時間帯がかぶるのは、あっても2つまでであれば、そのままでもよいと思います。

参考URL:http://ja.wikipedia.org/wiki/%E9%96%A2%E4%BF%82%E4%BB%A3%E6%95%B0#.E7.9B.B4.E7.A9.8D

#1の方の回答にあるように、勤務地を担当者に変更することでサンプル上は動くと思います。
(以下は書き方を変更しただけなので同じものになります)

SELECT Q1.* FROM tbl_配置一覧 AS Q1, tbl_配置一覧 AS Q2
WHERE
Q1.ID <> Q2.ID
AND Q1.日付 = Q2.日付
AND Q1.担当者 = Q2.担当者
AND Q2.開始時間 < Q1.終了時間
AND Q2.終了時間 > Q1.開始時間
ORDER BY Q1.ID;


これは直積を使ったやり方です。(直積については以下参照)
http://ja.wikipedia.org/wiki/%E9%96%A2%E4%BF%82%E4%BB%A3%E6%...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング