• 締切済み

SQLの DELETE文を関数で実現するアイデア?

 当方、エクセルは一度も操作したことがありません。それなのに 1、クロス集計クエリーをエクセルで実現する。 2、ユニオンクエリ―をエクセルで実現する。 3、SQL言語で全ての操作を実現する。  以上をVBAコードやマクロを使わないで式(関数)一発で可能とするに挑戦中。 1、クエリーの結果をシートに表示する。 2、Delete文の実行を可能にする。 【質問】SQLの DELETE文を関数で実現するアイデアとは? 今、私が、考えているアイデアは、 Step1:削除対象の先頭列に"#delete"を書き込むUpdate文を実行する。 Step2:先頭列に"#delete"のある行を、エクセルの.Delete で削除する。 Step2の対案: 先頭列に"#delete"のある行を不要行と見做して必要行を繰り上げて詰める。  エクセルユーザーが、《テーブルシート》《データ入力シート》《レポートシート》という考えでシート設計していれば、現行の有力候補でOKだと思います。が、「あくまでもテーブルの行だけを削除しなきゃーダメ1」と言われれば、対案を考えざるを得ません。  で、皆さん、グッドアイデアはありませんか?

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

#1の補足について。 補足コメントのCopyfromdatasetについて この場合の「Copy」は、フィールドの「値」(=VALUE)をコピーするだけです。 もともと、Accessなどのデータベース(mdb)は、データの「値」だけ持っているのでは。 それに対し、エクセルのVBAのCopyは、セルの情報の「値」+書式+その他までも、移そうと、コピーします。セルから見ると、重畳的・マルチレイヤー的なデータが、保持されている仕組みになっている。これはむしろ、コンピュターの機能やソフトが進歩した形で、昔の考えのから発する(1970年代?)、SQLなども、書式などは、別途付加された機能であるため、SQL文の扱いには、現状は、その手のもの(書式設定)を含めていない。別途に捉えている。VIEWの面では加えているものはあるかもしれないが、付加機能である。GUIの機能として、だから処理系(SQLの)で分かれているもの。 == >日付が数字になってしまう これもエクセルでは、日付は日付シリアル値という数字(順・序数)で処理している。 あるいはAccessの日付型のデータでもそうかもしれない。 エクセルを始めた人は、そんなことは知る由もなく、よくピント外れの質問をしているな場合がある。他のソフト利用から、コンピュター利用経験に入ると、わからないわけ。 Accessの日付型のデータも、エクセルと同じシリアル値を使っているかどうかは、関心はあるが、小生は開発者レベルでは全くなく、浅学で、十分確信はない。 興味があれば、Googleで「アクセス 日付型データ シリアル値か」で照会して読んでみるとか。https://accessvba.blog.so-net.ne.jp/2011-05-09など読んでも歯切れが悪い。DateSerialに変換するアクセスVBA関数はあります。 == 日付/時刻型データの格納 >https://support.microsoft.com/ja-jp/help/210276/how-to-store-calculate-and-compare-date-time-data-in-microsoft-access Microsoft Access (以下 Access) は、日付/時刻型データを倍精度浮動小数点数 (小数点以下 15 位まで) として格納します。倍精度浮動小数点数の整数部分は日付を表します。小数点部分は時刻を表します。 この部分を見るとエクセルと考え方は同じか?扱う日付範囲は違うが。 ーー コンピュターからみのことを勉強するのは、趣味でやるのは、非常に制約が大きいと思う。時間がかかる。独善になりやすい。資料が少ない。市販本の解説書に載っている範囲にしておくことを勧める。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

多分変な方向に学習が向かってますよ。 >エクセルは一度も操作したことがありません >VBAコードやマクロを使わないでー>エクセルVBAでしょうが こういう状態で、質問のような(エクセル操作では簡単な)ことを、目指しても、趣味や自己満足を満たす以外に、意味はありません。 古式水泳で、足を縛って泳ぐ訓練があるそうですが、それをいつも連想します。 なお私は高齢者です。 == エクセルの関数について。 このOKWAVEの質問者は、エクセル関数病患者と思う人が目につく。 でも、多分SQLやプログラムの世界を知らない人だと思って、やむを得ないかな、と思って見ていますが。 質問者はそうではないタイプです。 エクセルの関数は、集合関数(SUM、SIUMIF)の類を使うのは簡単で、非常に便利ですが、少しそれらを離れたタイプだと、ひらめきが必要で、クイズや、幾何の補助線をどう引くかといったものと類似した困難と、それであるがゆえに、魅力があるのでしょう。時間は短期的に無駄にします。 OKWAVEの回答にも、たまに複雑な式で回答が出ます。何かWEBなどに専門コーナーや書籍(あまり見たことないが)を見て、仕入れたものだと思いますので独自考案ではないと推察してます。 SQL文でも普通のSELECT周辺以外の問題は、非常にひらめきが必要なように思います。 Accessをやっているなら、CopyFromDataSetという、エクセルと簡単に行き来できるコードがありますので使って、エクセルをやってみてください。 ORACLEでもhttps://products.sint.co.jp/siob/blog/five-ways-output-table-data なお、エクセルは「操作の学」だとおおいます。VBAのものでもなく、関数のものでもないと個人的に思います。ただ「関数の学」ではないと、言いかねるぐらい、地位は占めていると思うようになっていますが。 Excel関数は、レコード(行や列)を動かしたり、削除したり、追加したりのことは、一発でやるのは苦手です(式が複雑になります)。もともとエクセル関数はこういうタイプのことは避けています。だから例えば削除は、次行以下をずらして持ってくるくるデータを作るしかない。エクセルは式をセルに入れると元データは消える、という仕組みです。 またそのために、実現するセルを、現状のセル範囲以外の空きセルを使わないといけないかもしれない。  以上参考になれば。

f_a_007
質問者

お礼

CopyFromDataSet  フムフム。もしかしたら、もう一つの質問はこれで解決するかもですが、いま探しているのは、レコードセットの型に基づいてエクセルのセルが格納する型を指示する方法です。  で、DELETEの件ですが、これは単に、「ふーん、出来ないんだ!」で終わりたくないだけ。それだけですよ。23年のブランクのある一老人の単なる遊びです。

f_a_007
質問者

補足

CopyFromDataSetについて:  これは、単に代入するだけでした。レコードセットの型(Type)もなんもかんも無視。日付も数字になっちゃいました。

関連するQ&A

専門家に質問してみよう