• 締切済み

エクセルやアクセスでこういった操作を実現できますか?

はじめまして。業務で使うためにエクセルやアクセスで以下の操作を 実現できればと考えているのですが出来るでしょうか? -------------------------------------------------------- 質問1)例えばエクセルやアクセスで商品名を選んで     単価を表示することは出来ると思いますが、     ドラックアンドドロップでセルの中にその商品を     選んで入れることは出来るでしょうか?     (選択肢がすごく多く、IDでの入力や商品名を      リストから選ぶと時間がかかるため、タブを使って      商品をグループ分けをして選びたいため) 質問2)上記が出来ない場合、商品の名前を打つたびにリスト表示     が出来るようにできますか?     (例えば”あ”と入力すると頭文字が”あ”のものがリスト      表示され、次の”い”を入力すると頭文字2文字の”あい”      が絞り込まれて表示されるようにです) -------------------------------------------------------------- 以上、わかりにくい質問かもしれませんが、よろしくお願いいたします

みんなの回答

noname#22222
noname#22222
回答No.4

s_husky です。 先のは、時間がなかったので Access.adp で自作している関数を示したものです。イベントで用います。 エクセルは、一度も操作したことがありませんので判りません。 が、私ならば、多分、 Private Sub Worksheet_Change(ByVal Target As Range) End Sub で、当該リストを検索・表示することになると思います。 ※絞込み検索といっても、実現の仕方は実に多様です。 ※データベースから検索する、データシートを用意する、データメニューの入力規則を利用するetc. ※また、システムの構築作法も様々です。 ※データ管理はAccess、作表はExcel と割り切るか否かで大きく違ってきます。 ※また、あらゆるケースを想定した関数パッケージを用意するHusky流も是であり非です。 ※一つの関数の不具合は、全システムをストップさせます。 ※一番良いのは、自らのスタイルを確立されることです。 ご奮闘を祈っています。

noname#22222
noname#22222
回答No.3

あくまでも素人のやり方です... <1のやり方> ・タイマーで監視します。 ・選択されたら、マウスの下に影を表示します。 ・影をマウス座標に連動して動かします。 ・マウスがオフになったら、その座標に位置するコントロールを改定するルーチンへ。 ・確定したコントロールに値を代入し影を消します。 プロは、もっと、スマートなやり方をすると思います。 <2のやり方> ・Chengeイベントで 次のような DBSelect関数を利用して値リストを更新します。 ' ------------------------------------------------------------------------------------------------------- ' DBSelect(列リスト, '      表名, '      グループ指定文, '      条件文, '      並び替え文, '      isOneSentence, ---- 列データをセミコロン(;)で連結して1文にするか否か? '      isConvert) -------- 列データを表示形式に変換してから配列に代入するか否か? ' ------------------------------------------------------------------------------------------------------- Public Function DBSelect(ByVal strFields As String, _              ByVal strTable As String, _              Optional strGroupBy As String, _              Optional strWhere As String, _              Optional strOrderBy As String, _              Optional isOneSentence As Boolean = False, _              Optional isConvert As Boolean = False) As Variant On Error GoTo Err_DBSelect   Dim I      As Integer   Dim J      As Integer   Dim R      As Integer  ' データを代入する配列 DataValue(,) のインデックスを決める行カウンター   Dim C      As Integer  ' データを代入する配列 DataValue(,) のインデックスを決める列カウンター   Dim M      As Integer  ' データを代入する配列 DataValue(,) の一つ目の添字の最大値=行総数 - 1   Dim N      As Integer  ' データを代入する配列 DataValue(,) の二つ目の添字の最大値=列総数 - 1   Dim strQuerySQL As String   Dim rst     As ADODB.Recordset   Dim fld     As ADODB.Field   Dim strList   As String   ' 全てのデータをセミコロン(;)で区切った1行の文字列を格納する変数      Set rst = New ADODB.Recordset      strQuerySQL = "SELECT " & strFields & " FROM " & strTable   If Len(strGroupBy) > 0 Then     strQuerySQL = strQuerySQL & " GROUP BY " & strGroupBy   End If   If Len(strWhere) > 0 Then     strQuerySQL = strQuerySQL & " WHERE " & strWhere   End If   If Len(strOrderBy) > 0 Then     strQuerySQL = strQuerySQL & " ORDER BY " & strOrderBy   End If   ' =================   ' Begin With: rst   ' -----------------   With rst      .Open strQuerySQL, _         CurrentProject.Connection, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then       ' --------------       ' 配列を再宣言       ' --------------       M = .RecordCount - 1       N = .Fields.Count - 1       If M > 99 Then         MsgBox "読込む行総数を100行に下方修正しました。(DBSelect)", vbInformation, " お知らせ"         M = 99       End If       ReDim DataValues(M, N)       ' ------------------------------------       ' 列情報を For-Next で配列に代入する       ' ------------------------------------       .MoveFirst       For R = 0 To M         C = -1         For Each fld In .Fields           ' =================           ' Begin With: fld           ' -----------------           With fld             C = C + 1             If Not isConvert Then               DataValues(R, C) = Nz(.Value, "")             Else               ' --------------------------               ' 列データを表示形式に変換               ' -------------------------               Select Case .Type                 Case adBoolean         ' ブール型                   DataValues(R, C) = IIf(.Value = -1, "Yes", "No")                 Case adChar, adVarChar     ' 文字列型                   DataValues(R, C) = Nz(.Value, "")                 Case adDBDate, adDBTimeStamp  ' 日付型(yyyymmdd)、日付/時刻型(yyyymmddhhmmss + 1/10億)                   DataValues(R, C) = .Value                 Case adSmallInt, adInteger   ' 整数                   DataValues(R, C) = FormatNumber(.Value, 0)                 Case adSingle, adDouble     ' 浮動小数点型                   DataValues(R, C) = FormatNumber(.Value, 2)                 Case adCurrency         ' 通貨型                   DataValues(R, C) = FormatCurrency(.Value, 2)                 Case Else                   DataValues(R, C) = .Value               End Select             End If           End With           ' ---------------           ' End With: fld           ' ===============         Next fld         .MoveNext       Next R      Else       ReDim DataValues(0, 0)       DataValues(0, 0) = ""       strList = ""      End If   End With   ' ---------------   ' End With: rst   ' ===============   If isOneSentence Then     ' -------------------------------     ' セミコロン(;)で連結して1文に     ' -------------------------------     For I = 0 To M       For J = 0 To N         strList = strList & DataValues(I, J) & ";"       Next J     Next I   End If Exit_DBSelect: On Error Resume Next   rst.Close   Set rst = Nothing   DBSelect = IIf(isOneSentence, strList, DataValues())   Exit Function Err_DBSelect:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSelect End Function

yuichi-s
質問者

お礼

回答ありがとうございます 私自身、素人で詳しくないんですが、 ご回答いただいたものはVBAだと思っていますが、 このVBAをイベントとしてブックに反映させるということでしょうか? それともセルに指定するのでしょうか?

noname#22222
noname#22222
回答No.2

私が、素人ですので、ちょうど良いかと思って答えます。 1、私には、無理です。 ・模擬的に絵を飛ばすことはできます。 ・が、絵がツツーゥと移動する前にコピーは終わります。 ・そういう訳で、クリックアンドクリックでコピーするように仕組むと思います。 2、可能です。 ・だが、件数次第と思います。 ・検索・表示時間を短縮するために最大表示件数を決めるでしょう。 ・あ->で20件を表示。[一部]or[全部]を明示。 ・あい->で再び表示。[一部]or[全部]を更新。 ・あいう->で、更に絞りこむ。[一部]or[全部]を更新。

yuichi-s
質問者

お礼

回答ありがとうございます 2については具体的にはどうやればよいのでしょうか?

  • akio_myau
  • ベストアンサー率34% (515/1480)
回答No.1

ExcelでもAccessでもどちらでも可能です。 例えばExcelではデータメニューの入力規則を使い 設定タブの入力値の種類をリストを選ぶことで 同じシート内の範囲や、直接表示させる値を入れることで可能になります。

yuichi-s
質問者

補足

回答ありがとうございます 入力規則を使う方法は私にも出来るのですが それですと検索対象が多くなるとリストが長くなるので 余計に入力しにくくなってしまいました そこでタブで検索対象を分け、一つのセルに入力する時 複数のタブからの一つのタブを選び、それからリスト入力が 出来ないかと思ったものですから・・・

関連するQ&A