VBAについて教えてください。AccessVBAからEXCELにファイルを出力したいです。TABLE1のIDフィールドにIDとして連番が01,02,03...と入力されています。出力フィールドにはデータは何も入っていません。


Excel出力時、A列にID(連番)、B列に「北海道、東北、関東、関西、四国、九州」とプルダウンで選択できるようにしたいです。つまり、B列はテーブルからデータは持ってこずに、Excelの入力規則→リスト→リストに上記のデータを入力した形で出力したいです。
A列が10行出力したら、B列も同じように10行出力します。11行目はプルダウンが表示されないようにしたいです。

rangeオブジェクトや.Add TYPE:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= xlBetween, Formula1:=あたりを使えばいいとは思うのですが、うまくいきません。VBAでどのように書いたら、上記の事が実現可能になるでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2009/10/26 16:54:59
  • 終了:2009/11/02 16:55:03

回答(1件)

id:HALSPECIAL No.1

HALSPECIAL回答回数407ベストアンサー獲得回数862009/10/26 17:49:00

ポイント60pt

こんな感じでいいでしょうか?

Option Explicit

Public Sub 実行()
    Const xlValidateList As Integer = 3
    Const xlValidAlertStop As Integer = 1
    Const xlBetween As Integer = 1
    Dim xl
    'エクセルオブジェクトを作成します
    Set xl = CreateObject("Excel.Application")
    'エクセル画面を表示します
    xl.Visible = True
    '新しいワークブックを開きます
    xl.Workbooks.Add
    xl.ActiveSheet.Range("A1").Select
    
    
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset
    Dim SQL As String
    
    '接続
    Set CN = CurrentProject.Connection
    
    'レコードセットを取得
    Set RS = New ADODB.Recordset
    SQL = "SELECT * FROM TABLE1 ORDER BY ID"
    RS.Open SQL, CN, adOpenKeyset, adLockOptimistic
    
    '確認
    Do Until RS.EOF
        xl.ActiveCell.Value = RS!ID
        With xl.ActiveCell.Offset(0, 1).Validation
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="北海道,東北,関東,関西,四国,九州"
        End With
        xl.ActiveCell.Offset(1, 0).Activate
        RS.MoveNext
    Loop
    
    '終了
    RS.Close:  Set RS = Nothing
    CN.Close:  Set CN = Nothing


    'エクセルオブジェクトの破棄
    Set xl = Nothing

End Sub


コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません