085887 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

ムクぱち

ムクぱち

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

キーワードサーチ

▼キーワード検索

プロフィール

尨

お気に入りブログ

まだ登録されていません

コメント新着

 100@ Re:謹賀新年(01/01) Sub INSERTINTO句の処理(i As Integer, j…
 100@ Re:謹賀新年(01/01) Sub SELECT句の処理(i As Integer, j As …
 100@ Re:謹賀新年(01/01) Private Sub CommandButton1_Click() Dim …
 ムクムク@ Re:お元気ですか(01/13) ◆使い方 mainシートのA1セルに式を入力…
 ムクムク@ Re:謹賀新年(01/01) '引数で与えられたワークシート名と…

フリーページ

2019年01月01日
XML
カテゴリ:カテゴリ未分類
皆さまお元気ですか。
私は元気です。





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2019年01月01日 20時53分26秒
コメント(4) | コメントを書く


■コメント

お名前
タイトル
メッセージ
画像認証
別の画像を表示
上の画像で表示されている数字を入力して下さい。


利用規約に同意してコメントを
※コメントに関するよくある質問は、こちらをご確認ください。


 Re:謹賀新年(01/01)   ムクムク さん
Option Explicit
'式自体を表示するにはいろいろな方法がある。
'[Ctrl][Shift]@を同時に押下。
'キーボードによってはできない。

Sub main()
Dim レベル As Integer
Dim 枝番 As Integer
Dim ワークシート名
Dim wsheet As Worksheet
Dim i As Integer
Dim 関数があったフラグ As Boolean

'解析する式にカッコがなければ終了。
If InStr(Worksheets("main").Range("A1").Formula, "(") = 0 Then
MsgBox "関数がないので終了します。"
Exit Sub
End If

'前回処理したワークシートなど余計なものがあれば削除。
Call 不要なワークシートの削除

'レベル01という名前の新しいワークシートを作成。
Set wsheet = 新しいワークシートを作成("レベル01")

'レベル1(一番外側の関数)で解析する。結果はワークシートレベル01に展開される。
レベル = 1
Call 解析(wsheet, Worksheets("main").Range("A1").Formula, レベル)

'ワークシートレベル01のレベル2以降を順次展開する。
'解析される関数が無くなる(内側のループの中で関数があったフラグがTrueにならない)になるまで繰り返す。
'同じレベルで複数の関数がある場合があるので、出現順に枝番を振る。
Do
i = 5 '5行目から解析スタート。
関数があったフラグ = False
レベル = レベル + 1
枝番 = 0
Do Until Worksheets("レベル01").Range("A" & i).Interior.Color = vbBlue
If InStr(Worksheets("レベル01").Cells(i, レベル), "(") <> 0 Then
関数があったフラグ = True
枝番 = 枝番 + 1
ワークシート名 = "レベル" & Format(レベル, "00") & "_" & Format(枝番, "00")
Set wsheet = 新しいワークシートを作成(ワークシート名)
'関数があった行を解析する。
Call 解析(wsheet, Worksheets("レベル01").Cells(i, レベル), レベル)
'解析された行を削除
Worksheets("レベル01").Rows(i).Delete
'削除された部分に展開された行をコピー。
Call 書換(wsheet, i)
End If
i = i + 1
Loop
Loop While 関数があったフラグ

MsgBox "正常に終了しました。"

End Sub (2020年12月21日 10時28分40秒)

 Re:謹賀新年(01/01)   100 さん
Private Sub CommandButton1_Click()
Dim i As Integer
Dim j As Integer

Worksheets("Sheet2").Cells.ClearContents
i = 1
j = 1

Do Until Worksheets("Sheet1").Cells(i, 1) = ""
With Worksheets("Sheet1")
If StrConv(Left(.Cells(i, 1), 6), vbUpperCase) = "SELECT" Then
Call SELECT句の処理(i, j)
ElseIf StrConv(Left(.Cells(i, 1), 12), vbUpperCase) = "UNION SELECT" Then
Call UNIONSELECT句の処理(i, j)
ElseIf StrConv(Left(.Cells(i, 1), 8), vbUpperCase) = "GROUP BY" Then
Call GROUPBY句の処理(i, j)
ElseIf StrConv(Left(.Cells(i, 1), 11), vbUpperCase) = "INSERT INTO" Then
Call INSERTINTO句の処理(i, j)
ElseIf StrConv(Left(.Cells(i, 1), 6), vbUpperCase) = "UPDATE" Then
Call UPDATE句の処理(i, j)
Else
Worksheets("Sheet2").Cells(j, 1) = .Cells(i, 1)
j = j + 1
End If
i = i + 1
End With

Loop
Worksheets("Sheet2").Activate
Worksheets("Sheet2").Range("A1").Select
MsgBox "終了"

End Sub (2021年03月03日 13時21分30秒)

 Re:謹賀新年(01/01)   100 さん
Sub SELECT句の処理(i As Integer, j As Integer)
Dim wdata

wdata = Split(Worksheets("Sheet1").Cells(i, 1), ", ")
Worksheets("Sheet2").Cells(j, 1) = "SELECT "
j = j + 1
If wdata(0) = "SELECT " Then
Else
Worksheets("Sheet2").Cells(j, 1) = Replace(wdata(0), "SELECT ", "") & ","
j = j + 1
End If
Call サブ(i, j, wdata)
End Sub
Sub UNIONSELECT句の処理(i As Integer, j As Integer)
Dim wdata

wdata = Split(Worksheets("Sheet1").Cells(i, 1), ", ")
Worksheets("Sheet2").Cells(j, 1) = "UNION SELECT "
j = j + 1
If wdata(0) = "SELECT " Then
Else
Worksheets("Sheet2").Cells(j, 1) = Replace(wdata(0), "UNION SELECT ", "") & ","
j = j + 1
End If
Call サブ(i, j, wdata)
End Sub
Sub GROUPBY句の処理(i As Integer, j As Integer)
Dim wdata

wdata = Split(Worksheets("Sheet1").Cells(i, 1), ", ")
Worksheets("Sheet2").Cells(j, 1) = "GROUP BY "
j = j + 1
If wdata(0) = "SELECT " Then
Else
Worksheets("Sheet2").Cells(j, 1) = Replace(wdata(0), "GROUP BY ", "") & ","
j = j + 1
End If
Call サブ(i, j, wdata)
End Sub

(2021年03月03日 13時22分05秒)

 Re:謹賀新年(01/01)   100 さん
Sub INSERTINTO句の処理(i As Integer, j As Integer)
Dim wdata
Dim k As Integer

wdata = Split(Worksheets("Sheet1").Cells(i, 1), "( ")
Worksheets("Sheet2").Cells(j, 1) = wdata(0) & " ("
j = j + 1
wdata = Replace(Worksheets("Sheet1").Cells(i, 1), wdata(0) & "(", "")
wdata = Split(wdata, ", ")
For k = 0 To UBound(wdata)
If k = UBound(wdata) Then
Worksheets("Sheet2").Cells(j, 1) = wdata(k)
Else
Worksheets("Sheet2").Cells(j, 1) = wdata(k) & ","
End If
j = j + 1
Next
End Sub

Sub UPDATE句の処理(i As Integer, j As Integer)
Dim k As Integer
Dim wdata

wdata = Split(Worksheets("Sheet1").Cells(i, 1), " SET ")
Worksheets("Sheet2").Cells(j, 1) = wdata(0) & " SET "
j = j + 1
wdata = Split(wdata(1), ", ")
If UBound(wdata) = 0 Then
Worksheets("Sheet2").Cells(j, 1) = wdata(0)
Else
Worksheets("Sheet2").Cells(j, 1) = wdata(0) & ","
End If
j = j + 1
Call サブ(i, j, wdata)
End Sub
Sub サブ(i As Integer, j As Integer, wdata)
Dim k As Integer
For k = 1 To UBound(wdata)
If k = UBound(wdata) Then
Worksheets("Sheet2").Cells(j, 1) = wdata(k)
Else
Worksheets("Sheet2").Cells(j, 1) = wdata(k) & ","
End If
j = j + 1
Next

End Sub

Private Sub CommandButton2_Click()
ActiveSheet.Cells.ClearContents
End Sub (2021年03月03日 13時22分40秒)


© Rakuten Group, Inc.