外出自粛中でも楽しく過ごす!QAまとめ>>

SqlDataSource と関連付けた ドロップダウンリストが
2つあります。
1つは年度の選択を行い、もう1つは選択した年度に
該当する月を、表示・選択させます。

月を選択するドロップダウンリストにおいて、Form起動
時の初期表示の値として、SqlDataSource 内の最大値を
表示させたいのです。

<例:2008/12/25 現在 の場合>

●2007年度を指定した場合
・2008/3 が最終月のため、「03」をセット。
・SqlDataSource内には、2007/4 ~ 2008/3
までのデータが必ず存在する。

●2008年度を指定した場合
・2008/12 が最終月のため、「12」をセット。
・但し、2008/12 のデータが無い場合が想定される
ため、SqlDataSource内の最大値を特定しセットし
たい。

上記の例は、あまり良い例ではないと思いますが、やり
たいことは、SqlDataSourceで取得した値の中から、最大
値を特定し初期値として表示することです。

どなたかご存じないですか?

ASP2.0 言語:VB

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

A 回答 (2件)

ドロップダウンリストのDataSourceIdをSqlDataSourceにすると、SQL文の取得値が直接バインドされてしまいますので、普通にいったんDataTableで取得し、必要な形式(この場合はGeneric.Dictionaryがいいと思います)のコレクションを生成して、これをバインドしたほうがいいと思うのですが。


どうしてもデータソースコントロールを使いたいのであれば、カスタムメソッドで取得できるObjectDataSourceを使うべきかと。
    • good
    • 0

DropDownList2のDataSourceで4,5,6,7,8,9,10,11,12,1,2,3 などバインドしているならば


DropDopDownList2のDataBoundイベントで
if DropDownList2.SelecttedIndex = -1 then
  DropDownList2.SelecttedIndex = DropDownList2.Items.Count - 1
end if
といった具合で可能なのでは ・・・
    • good
    • 0
この回答へのお礼

「DataBoundイベント」と 「Items.Count」か・・・
手探りで何も情報が無かったので困ってました。
ヒントになりそうです。頑張ってみます。
ありがとうございました。

お礼日時:2008/12/27 18:27

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

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

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

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

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

QVBAで入力規則の設定

いつもお世話になっております。
VBAを勉強して3ヶ月程度の初心者です。

VBAでの入力規則の設定について質問させていただきます。

A1セルに入力規則の設定を行い、0~10までの数値を選択できるようにしたいと考えています。

Sub Test()
Range("A1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation _
, Formula1:="0,1,2,3,4,5,6,7,8,9,10"
End Sub

とコードを記述すれば、確かに望みの仕様は満たされるのですが、複数のセルに入力規則を設定する場合、
また、リストの数が増えた場合を考えて、"1,2,3,4,5,6,7,8,9,10"を変数に出来ない?と考えて・・・
Sub Test2()
Dim kazu(10) As Long
kazu(0) = 0
kazu(1) = 1
kazu(2) = 2
kazu(3) = 3
kazu(4) = 4
kazu(5) = 5
kazu(6) = 6
kazu(7) = 7
kazu(8) = 8
kazu(9) = 9
kazu(10) = 10

Range("A2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation _
, Formula1:=kazu
End Sub
なんて事もやってみましたが・・・駄目でした。

もう一点、初期値に0を表示したい場合は、入力規則コードの後に、

 Range("A1").Value=0
と表示すればよいのでしゅか?

ご指導をよろしくお願いいた

いつもお世話になっております。
VBAを勉強して3ヶ月程度の初心者です。

VBAでの入力規則の設定について質問させていただきます。

A1セルに入力規則の設定を行い、0~10までの数値を選択できるようにしたいと考えています。

Sub Test()
Range("A1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation _
, Formula1:="0,1,2,3,4,5,6,7,8,9,10"
End Sub

とコードを記述すれば、確かに望みの仕様は満たされるのですが、複数のセルに入力規則を設定する場合、
また、リスト...続きを読む

Aベストアンサー

入力規則のリストネタを、カンマ区切りの文字列で作成するだけです。

シンプルに:
sub macro1()
 dim i as integer
 dim buf as string

 for i = 0 to 10
  buf = buf & "," & i
 next i
 buf = mid(buf,2)

 range("A1").validation.delete
 range("A1").validation.add type:=xlvalidatelist, formula1:=buf
 range("A1") = 0
end sub




#参考
>初期値に0を表示したい場合は、入力規則コードの後に、

入力規則コードの「前」に初期値を記入することで、入力規則で「許可していない値を初期値として」セットする事もできます。

QExcel VBA コンボボックスの初期値の設定について

いつもお世話になっています。
Excel VBA コンボボックスの初期値の設定について教えてください。
ユーザーフォームを表示させた時、そこにあるコンボボックスには何も表示されていません。
コンボボックスのボタンを押すとちゃんと
「アジア」「ヨーロッパ」「アメリカ」等の語群が表示されます。

ユーザーフォームを表示させた時点でコンボボックスに「アジア」を表示させるにはどうすればいいか教えてください。
よろしくお願いします。

Aベストアンサー

UserForm Initialize
ComboBox1.Text = ComboBox1.List(0)

Qプルダウンで選択すると隣のセルに自動で入力される方法

プルダウンで選択すると隣のセルに自動で入力される方法
エクセル2003でシート1に「会社名」と「住所」を一覧を作成。シート2でプルダウンで「会社名」を選択すると隣のセルに自動で「住所」が出るようにしたいのですが、何か良い方法(関数)はありますか。教えてください。宜しくお願いいたします。

Aベストアンサー

プルダウンで確定した値を使ってVLOOKUPで検索したら。

例えば、Sheet1のA1~B10に会社名と住所の一覧があって、
Sheet2のA1でプルダウンで会社名を選択した場合、
B2を
=VLOOKUP(A1,Sheet1!A1:B10,2,FALSE)
とすれば、会社名に対応した住所が表示されます。

Qエクセルの入力規則リストで1行目に空白を設定したい

エクセル2000です。
入力規則でリストからの入力をさせる場合、リストの最初の一行目に空白を設定したいのです。
もちろんシートにそのようなリストを作ってリストをセル範囲で指定すればそうなるのですが、セル範囲指定でなく、「元の値」に直接入力でリストを指定する場合、カンマ区切りの先頭に何も入れず、
,選択肢1,選択肢2,選択肢3
とすると、最初のカンマの前は反映せず3択のリストになってしまいます。最初のカンマの前を全角スペースとすればできるのですが全角スペースは空白ではありません。
これはどうしようもないのでしょうか?

Aベストアンサー

> 1.何も選択しない段階では空白
> 2.リストからA、B、Cのどれかを選択。
> 3.やはり選択止めたという場合に空白を再度選べる

どうやら、質問者様がやりたいことそのものは、できそうにないみたいですね。

私がやるとすれば、

1.何も選択しない段階では[未選択]と表示。
2.リストから[未選択]、A、B、Cのどれかを選択。
3.やはり選択止めたという場合に[未選択]を再度選べる

ですかねぇ。

初期状態はどうしても空白にしたい、だけど名前を定義して参照することもしたくない、というのであれば、

1.何も選択しない段階では空白。
2.リストからA、B、C、[キャンセル]のどれかを選択。
3.やはり選択止めたという場合に[キャンセル]を再度選べる

という入力規則にしておき、シートモジュールのWorksheet_Changeイベントで、Targetが[キャンセル]だったらTargetをクリアするようにします。

QExcelの入力規則で2列表示したい

入力規則を使って、社員コードを入力する際に
10001 山田太郎
10002 鈴木花子
10003 佐藤大介
のように、ドロップダウンリストに「社員コード」「社員名」と2列表示させたいのです。
そして、例えば山田太郎を選択すると、セルには「10001」だけが入力されるようにしたいのですが・・・
(Accessのルックアップフィールドみたいな感じ)

[入力規則]-[リスト]で、社員コード表を選択しても、単一の列または行でなければいけませんとエラーが出ます。
かといって[入力規則]-[リスト]で範囲指定をカンマ区切りで
10001 山田太郎,10002 鈴木花子,・・・と入力しても、エラーは出ませんがドロップダウンリストから選択したときに社員コード表と社員名が一緒にセルに入力されてしまいます。

なにか良い方法はありませんでしょうか?
よろしくお願いいたします。

Aベストアンサー

番号と社員名の間にスペースが入っているなら
メニューバーから「データ」→「区切り位置」で
1「カンマやタブなど---」にチェックを入れて「次へ」
2「区切り文字」で「スペース」にチェックを入れて「次へ」
3「完了」
で番号と社員名が違う列へ分けることが出来ます。
番号のデータがA2からA4、社員名がB2からB4にあるとし
C1にリストを設定して番号を入れ、D1に社員名が反映するようにするときにはD1に
=INDEX(A2:A4,MATCH(C1,B2:B4))
と入れてやるとうまくいくと思います。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qエクセル、ドロップダウンリストで空白セルを非表示

エクセル2013です。

Sheet1にドロップダウンリストを作成し、Sheet2のC列を参照したいです。
Sheet2のC列は日々入力され行数が増えていくのでリストの範囲を多めにしたいです。

入力規則
リスト-元の値
=Sheet2!$C$3:$C$20000

にしましたが
Sheet2のC列はまだ1,000行くらいしか入力されていない為
ドロップダウンリストでリストを表示すると
リスト内にて空白の部分の方が多く、検索が大変です。

NETで調べて

入力規則
リスト-元の値
=OFFSET(Sheet2!$C$3,0,0,SUMPRODUCT((Sheet2!$C$3:$C$20000<>"")*1))

としたのですが
ドロップダウンリストには
Sheet2のC列のセルC863までしか表示がされません。
Sheet2のC列はC1003まで値が有ります。

この関数のどこがわるいのでしょうか?
よろしくお願いします。

Aベストアンサー

参考までに

データのある最終行を検索する数式で設定したいなら、以下のような名前定義を使用します。
(元データがA1セル以下にある場合)

=$A$1:INDEX($A$1:$A$20000,MAX(($A$1:$A$20000<>"")*ROW($A$1:$A$20000)))

Qエクセルでドロップダウンリストを複数連動させ、1つ目を変えた時2つ目以降をリセットさせたい

エクセルのドロップダウンリストを使い始めて判らない事があったので教えてください。
ドロップダウンリストを複数連動させた時、1つ目を変えても2つ目以降に選んだものはそのままになってしまいます。
例として適当に作ったものですいませんが、画像左上は1つ目のリストでデザートを選択、2つ目でアイスを、3つ目でバニラを選んだ状態です。
2つ目は1つ目に、3つ目は2つ目にINDIRECTを使い連動させています。
1つ目のリストを飲み物に変えても2つ目と3つ目はそのままです。

1つ目を変えたら2つ目と3つ目を自動的に空白、リスト一番上の「‐」、未入力等の文字を表示、といった状態にする方法はないでしょうか?

Aベストアンサー

こんばんは!

VBAになりますが、一例です。
A~C列にリスト設定してあるという前提です。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)
連動しているリスト候補を表示(消去)してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から//
Dim c As Range
If Intersect(Target, Range("A:B")) Is Nothing Or Target.Count > 100 Then Exit Sub
For Each c In Target
If Target.Column = 1 Then
c.Offset(, 1).Resize(, 2).ClearContents
Else
c.Offset(, 1).ClearContents
End If
Next c
End Sub 'この行まで//

※ A・B列データ消去でその右セルを消去するようにしていますが、
極端に広い範囲を指定した場合は何も変化しません。
(100セルまでは動くはずです)m(_ _)m

こんばんは!

VBAになりますが、一例です。
A~C列にリスト設定してあるという前提です。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)
連動しているリスト候補を表示(消去)してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から//
Dim c As Range
If Intersect(Target, Range("A:B")) Is Nothing Or Target.Count > 100 Then...続きを読む

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

QExcel 入力規則のリストのカーソル位置

 セルに入力規則でリストを設定すると、セルが空白のときにリストを開くと 必ず最下行にカーソルがあります。
リストが長いときは、上に持っていくのに手間が掛かります。
このカーソルの表示する位置を変更することはできるのでしょうか?
VBAを使ってできるのなら、その方法を知りたいです。

 ご教授を、よろしくお願いいたします。

Aベストアンサー

リストの先頭を空白にしておけば、常にカーソル位置は先頭になりますが如何でしょうか。


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

人気Q&Aランキング