質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

3回答

3203閲覧

VBAコレクションの中身それぞれに接頭辞(prefix)を付けたい

chanrina0920

総合スコア18

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2017/10/12 05:45

###前提・実現したいこと
コレクションに入っている文字列に対してそれぞれ同じ接頭辞をつけた新しいコレクションを2つ作成したいです。

<イメージ>
コレクションの中身
顧客ID、顧客番号、パスワード...

Aコレクションの中身
A.顧客ID、A.顧客番号、A.パスワード

Bコレクションの中身
B.顧客ID、B.顧客番号、B.パスワード

###該当のソースコード

SQLを作成するのに現在はcolumnNamesコレクションに文字列が入っています。

VBA Option Explicit ' 定数宣言 Const テーブル一覧シート名 As String = "テーブル一覧" Const カラム一覧シート名 As String = "カラム一覧" Const テーブル一覧シート_テーブル列 As Long = 2 Const カラム一覧シート_テーブル列 As Long = 2 Const カラム一覧シート_カラム列 As Long = 6 Const IS_HEADER As Boolean = True ' IS_HEADERは、各シートの1行目がヘッダ情報である場合(=SQL文の生成が不要な場合)に True ' SQL文を生成 Public Sub CreateSql() ' 変数宣言 Dim tableSheet As Worksheet Dim columnSheet As Worksheet Dim rng As Range Dim r As Long Dim r2 As Long Dim tableName As String Dim columnNames As Collection Dim columnName As Variant Dim sql As String ' テーブル一覧シート と カラム一覧シートを取得 With ThisWorkbook Set tableSheet = .Worksheets(テーブル一覧シート名) Set columnSheet = .Worksheets(カラム一覧シート名) End With ' 全テーブル走査 Set rng = tableSheet.Columns(テーブル一覧シート_テーブル列) For r = IIf(IS_HEADER, 3, 1) To rng.Cells(rng.Cells.Count).End(xlUp).Row ' テーブル名取得 tableName = tableSheet.Cells(r, テーブル一覧シート_テーブル列).Text ' 全カラム取得 Set rng = columnSheet.Columns(カラム一覧シート_テーブル列) Set columnNames = New Collection For r2 = IIf(IS_HEADER, 3, 1) To rng.Cells(rng.Cells.Count).End(xlUp).Row If columnSheet.Cells(r2, カラム一覧シート_テーブル列).Text = tableName Then columnNames.Add columnSheet.Cells(r2, カラム一覧シート_カラム列).Text End If Next 'コレクションに入っているカラム名の前にA.とB.をそれぞれ追加(select対象部分の作成) ' SQL文生成 sql = "" sql = "SELECT" For Each columnName In columnNames sql = sql & IIf(sql = "SELECT", " ", ",") & CStr(columnName) Next sql = sql & " FROM " & tableName & ";" '文字列連結してsql作成 ' 結果出力 Debug.Print sql Next End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

単純にループで回すしかないような気がします。

VBA

1Dim columnNames As Collection 2Dim columnNamesA As Collection 3Dim columnNamesB As Collection 4Dim columnName As Variant 5 6Set columnNames = New Collection 7Set columnNamesA = New Collection 8Set columnNamesB = New Collection 9 10~省略~ 11 12' A.のコレクションを作成 13For Each columnName In columnNames 14 columnNamesA.Add "A." & columnName 15Next 16' B.のコレクションを作成 17For Each columnName In columnNames 18 columnNamesB.Add "B." & columnName 19Next

もっともただ単にSQL文に付加したいだけであるなら、コレクションに付加せずともSQL文生成の箇所に付加すれば良いような気がしますが。

VBA

1' SQL文生成 2sql = "" 3sql = "SELECT" 4For Each columnName In columnNames 5 sql = sql & IIf(sql = "SELECT", " ", ",") & "A." & CStr(columnName) 6Next 7sql = sql & " FROM " & tableName & ";" '文字列連結してsql作成

投稿2017/10/12 07:24

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chanrina0920

2017/10/12 08:46

ありがとうございます!ループでなくとも簡単にできるのですね。助かりました。
guest

0

SQLの作成処理を簡潔にできると思いますので参考まで。
※前提:columnNamesを Scripting.Dictionary型 に変更

VBA

1'後で[A.]等の処理の為に最初のカンマを付加 2SQL = "SELECT" & " ," & Join(columnNames.Keys, ",") & " FROM " & tableName & ";" 3sqlA = Replace(SQL, ",", ",A.") 4sqlB = Replace(SQL, ",", ",B.") 5sqlA = Replace(sqlA, ",", "", Count:=1) ’最初のカンマが不要なので除去 6sqlB = Replace(sqlB, ",", "", Count:=1)

もしくは

VBA

1Cols = "," & Join(columnNames.Keys, ",") 2ColA = Replace(Replace(Cols, ",", ",A."), ",", "", Count:=1) 3ColB = Replace(Replace(Cols, ",", ",B."), ",", "", Count:=1) 4SQL = "SELECT" & " " & ColA & "," & ColB & " FROM " & tableName & ";"

投稿2017/10/13 05:27

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

#回答ではありません。

やろうとされていることが、エクセルでデータベースにアクセスする為のEUCのようなものであれば、
BIツールなどがありますけど。

excelに近いところであれば、Microsoft Power BIなどがあります。

投稿2017/10/12 08:50

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問