• ベストアンサー

VBAでSQLのテーブル実名と別名を同じセルに出力

AKARI0418の回答

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.3

Sub SplitSQL() '今回はセレクト文のみで考えます。 '複合条件の場合で()付きのものは対象にしません。( A OR B ) AND Cのような条件 Dim strSQL As String Dim strWork As String Dim field() As String Dim alias() As String Dim tables() As String Dim work() As String Dim i As Integer 'strSQL = "SELECT A.TABLEA AliasA, B.TABLEB AliasB, C AS AliasC FROM TABLEA,TABLEB WHERE AliasA = AliasB" 'strSQL = "SELECT A.TABLEA AliasA, B.TABLEB AliasB, C FROM TABLEA,TABLEB WHERE AliasA = AliasB" '大文字小文字の区別をしないで1文字目から文字が含まれるかをチェック If InStr(1, strSQL, "SELECT", vbTextCompare) = 0 Or InStr(1, strSQL, "FROM", vbTextCompare) = 0 Then Exit Sub End If 'FROMの前まで取り出す strWork = Left(strSQL, InStr(1, strSQL, "FROM", vbTextCompare) - 1) 'SELECT文を取り除く strWork = Right(strWork, Len(strWork) - (InStr(1, strSQL, "SELECT", vbTextCompare) + Len("select") - 1)) 'カンマ区切りでfieldに格納する field = Split(strWork, ",") 'これでfieldの中には別名の配列が完成 '以下はおまけ ReDim tables(UBound(field)) ReDim alias(UBound(field)) For i = 0 To UBound(field) field(i) = Trim(field(i)) '別名とテーブル名の対応する配列を作る work = Split(field(i), " ") 'A.TABLEA AliasA またはC AS AliasCなので、1配列目にテーブル名、配列の末尾に別名が来る。 tables(i) = work(0) '別名が存在する場合は格納、存在しない場合はvbnullstring If UBound(work) <> 0 Then alias(i) = work(UBound(work)) End If Next i For i = 0 To UBound(tables) MsgBox ("テーブル名=" & tables(i) & "別名=" & alias(i)) Next i End Sub こんなイメージでしょうか? がんばってくださいね。

volving
質問者

お礼

ありがとうございます! AKARI0418さんのを基に完成形を組んでいきたいと思います。 大変勉強になりました!

関連するQ&A

  • VBAで文字列を各セルに出力

    はじめまして。 業務でVBAを使うことになり、勉強中なのですが、 動的な文字列をスペースごとに区切り、各セルに出力する方法がわかりません。 どなたかご教授ください。 str = "EMPNO = 1111 AND DEPTNO = 4444" という文字列を 演算子 フィールド 条件 比較値 ------------------     EMPNO  | = | 1111 AND | DEPTNO  | = | 4444 となるようにしたいのです。

  • 結合されたセルの一覧出力 VBA

    お世話になります。 結合されたファイルの一覧を出力したいと思っています。 (できれば、変数に出力したいです) 表があり、ばらばらな範囲で結合されています。 結合した部分には、日付が入っています。 日付が入っている列は、B列とH列で、 その中で「AA」「BB」と入力されている結合セル以外の 結合セル範囲?行?を取得したいと思っております。 B列とH列の結合セル行が同じではありません。 B列は、B5:B13、B18:B25、B30:37 (それ以外のセルは結合してあっても、「AA,BB]と書いてある H列は、H6:H13,H18:H25、H30::H35,H36:H40(上と同じ) ということになっております。 できれば、 1.セル結合範囲を検索(行数取得?) 2.セルの内容が日付かどうか確認 3.日付なら、セル行数を取得 ということがしたいです。 日付の形式は、3/1などのように入っています。 このフォームが結構変わるため、 結合しているセルの中身が日付かどうかを確認し、 日付なら行数取得→色んなプログラムでその行数を使用 したいと思っています。 分かりにくい部分が多いかと思いますが、 回答お願い致します。

  • テーブル内のセル間にスペースを空けたい

    tableタグとtr、tdを使って2行2列の表を作っています。 (1)それぞれのセルとセルの間にスペースを空けたいです。 (2)セルの中の文字の開始位置を1文字分程空けたいです。 CSSでの指定でも構いません。 tdやpにmarginを指定したり、cellpadingなど色々試しましたがうまく行きません。 どうかご教授をお願いします。

    • ベストアンサー
    • HTML
  • VBAで複数列セルに入力されている文字を一行に

    こんにちは。VBAにて下記イメージの複数列セルに入力されている文字を一行に変換しメモに出力すると同時に出力された一行の文字列をコピーした状態にしたいです。セルに記載された文字は「,」カンマで区切った状態で範囲はA3セルからA50位となります。また、セルが結合されていたり空白が存在したり様々です。大変申し訳御座いませんがご教授宜しくお願いします。 あああ → あああ,いいい,ううう,えええ,おおお・・・ いいい ううう  えええ おおお ・ ・ ・

  • 表の結合に関する質問

    EMP表 EMPNO ENAME JOBNO SAL DEPTNO ----- ------ ------ ----- ------ 1000 ADAMS 100 1000 10 1010 MILLER 200 1200 10 1020 SCOTT 100 800 30 DEPT表 DEPTNO DNAME EMPNO ----- ------ ------ 10 PERSONNEL 1000 20 ACCOUNT 30 DESIGN 上記表に対して、 [SQLコマンド] select e.empno , e.ename , dname , m.ename from emp e join dept d using(deptno) left outer join emp m on d.empno = m.empno; のSQL文を打つと、 EMPNO ENAME DNAME ENAME ----- ------ ------ ----- 1000 ADAMS PERSONNEL ADAMS 1010 MILLER PERSONNEL ADAMS 1020 SCOTT DESIGN と表示されますが、これが表示される過程がわからないです。 emp表とdep表をdeptno列で結合 from emp e join dept d using(deptno) この結合により EMPNO ENAME DNAME ・・・・・・ ----- ------ ------ ----- 1000 ADAMS PERSONNEL ・・・・・・ 1010 MILLER PERSONNEL ・・・・・・ 1020 SCOTT DESIGN ・・・・・・ となります。この部分は分かりますが、 次の、この表とemp表をempnoで結合 left outer join emp m on d.empno = m.empno; した際に、 EMPNO ENAME DNAME ENAME ----- ------ ------ ----- 1000 ADAMS PERSONNEL ADAMS 1010 MILLER PERSONNEL ADAMS 1020 SCOTT DESIGN となりますが、ENAME(4番目の列)で ADAMSと表示される過程が見えてきません。 この部分の過程について、ご教授の程お願い致します。

  • (MS-Excel)複数の条件にマッチする複数のセルを配列?で出力させ

    (MS-Excel)複数の条件にマッチする複数のセルを配列?で出力させたい。 たとえば、条件1=A列で値が数値であるセルと、条件2=条件1でマッチしたセルと同じ行でC列で値が「その他」という文字列であるセルを検索させます。 そして、A列でマッチしたセルの値をE列に出力させて、C列でマッチしたセルの値をF列に出力させたい、というような感じです。 VLOOKUP関数などで、{配列}を使うなどすれば可能だと思って試行錯誤したけどダメでした。 なお、データベース関数のように条件セルなど作業セルが必要な方法は使いたくないです。 よろしく、お願いします。

  • Excel VBAでセルの整列

    Excel VBAでセルの整列 現在、VBAを勉強中の者です。 最近、勉強を始めたばかりですが、この前何とかVBAを用いてセルの塗り潰しが出来る様になりました。 そこで、今度は色が塗り潰されたセルを添付した画像のように整列したいと考えていますが、どんな風にすれば良いのか見当がつきません。 誰か、教えてください。 やりたい事は、A列に結合されているセルがいくつか存在していて、B列を挟んでC列にA列に関連する文字が入力されています。 そして、C列には予めセルが塗り潰されている箇所がありますが、今回、C列において塗り潰されているセルのみを、結合されているセルの最終行に移動させたいのです。

  • エクセル セルの空白削除

    エクセルをしようしていて、添付ファイルのように ディレクトリ名とファイル名を結合したものを別セルに出力したのですが、 その際に結合したセルの文字列の後ろにスペースが入るのですが、 削除する方法はないでしょうか? SUBSTITUTE関数を使用してみたのですが、表示はできるのですが テキストで見てみると、空白が入った状態になっていて うまいこと削除できません。 他にスペースを削除する方法があれば教えて頂きたいです。 よろしくお願いします。

  • エクセル2003 VBAで セル内を 一発呼び出し

    エクセル2003 オートフィルタではなく VBAで セル内を 一発呼び出ししたいので。  よろしく お願いします。 表 列A~E(結合2行) :商品名と内容   列H~K(結合2行) 住所氏名電話番号を記載してます。 1年分を オートフィルターで  氏名 や 商品名で 探すのは 結構 時間がかかります。 同じものが ほぼ少ないため。。。 そこで  たまに 同じ氏名  同じような 品を 検索する セルを 2個ほど作って  そこへ セル1へ 商品名を入力すると  該当する 行のみ 表示される。 セル2に 名前をを入力すると  該当する 行のみ 表示される。 また、セルを赤色に塗った部分の結合行(2~3行)を 赤色に塗りつぶした行のみ 表示も できれば うれしいです。 コマンドボタン等を使ってもいいので お願いします。 そんな VBAを 作っていただけませんでしょうか^^; お手数おかけしますが どなたか よろしく お願いします。 

  • エクセルVBAでセル結合

    いつもお世話になっています。 エクセル2003でVBAを使って下記をしたいのでその、VBA構文を教えて下さい。 特定の列のあるセルに文字が入っています。 (文字が入っている列は固定ですが、行番号はデータによって変わります。例えば、Aデータの場合は「J30」、Bデータの場合は、「J55」だったりします。) この文字が入っているセルをVBAで検索し、検索したセルを右隣のセルと結合します。(先ほどのAデータの場合、J30:Z30に結合します。) 更に、文字が入っているセルが2以上の複数の場合があります。(先ほどのAデータの場合、「J30」と「J40」と「J45」という感じです。文字が入っているセルの数はデータにより異なります。) 結合が終わり、このシートのデータがあるところだけに罫線を引きます。(このシートのデータというのは、前述の文字とそれ以外は、「数字」と「・」です。 ややこしいですが、よろしくお願いします。