前提・実現したいこと
ある発注機関の発注機関コードおよび組織名をまとめたExcelファイルから、MySQLにあるテーブル「t_発注機関」の挿入・更新・削除を行うSQL文を新しいシートに書き出すマクロを作成しています。
EXCELファイルのテーブルは以下の通りです。
4列目が更新する組織名、5列目がINSERT/UPDATE/DELETE文を作成するかを判断する項目です。
5列目で「-」はチェック済、空白セルは未チェックを意味しています。
ID | 発注機関コード | 取引先 | w_取引先 | チェック |
---|---|---|---|---|
1 | 11111 | AAA | - | |
2 | 22222 | BBB | new_BBB | 名称変更 |
3 | 33333 | CCC | 削除 | |
4 | 44444 | DDD | 新規設置 | |
5 | 55555 | EEE | ||
6 | 66666 | FFF | 新規設置 |
このテーブルから、新しいシートに以下のようなSQL文が出力されるようにし、
5列目が「-」または空白の時に作成される空白セルを削除し、上方向に詰めるようにしたいです。
- UPDATE t_発注機関 SET 取引先 = 'new_BBB' WHERE id = '2';
- DELETE FROM t_発注機関 WHERE id = '3';
- INSERT INTO t_発注機関 VALUES ('4','44444','DDD',);
- INSERT INTO t_発注機関 VALUES ('6','66666','FFF',);
発生している問題・エラーメッセージ
マクロを実行すると、新しいシートに書き込み、途中の空白行は上詰めで削除されるのですが、
以下のように、先頭行の空白セルが削除されずに残ってしまいます。
- (空白)
- UPDATE t_発注機関 SET 取引先 = 'new_BBB' WHERE id = '2';
- DELETE FROM t_発注機関 WHERE id = '3';
- INSERT INTO t_発注機関 VALUES ('4','44444','DDD',);
- INSERT INTO t_発注機関 VALUES ('6','66666','FFF',);
該当のソースコード
作成したソースコードは以下の通りです。
html
1Option Explicit 2 3Sub createSql() 4 With ActiveSheet 5 '新しいSheetの作成 6 Dim newsheet As Worksheet 7 Set newsheet = Worksheets.Add 8 9 'SQL文の作成 10 Dim sql As String 11 Dim i As Long 12 13 '条件分岐 14 For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row 15 If .Cells(i, 5) = "名称変更" Then 16 sql = "UPDATE t_発注機関 SET " & "取引先 = '" & Cells(i, 4) & "' WHERE id = " & Cells(i, 1) & ";" 17 18 ElseIf .Cells(i, 5) = "新規設置" Then 19 sql = "INSERT INTO t_発注機関 VALUES " & "('" & Cells(i, 1) & "','" & Cells(i, 2) & "','" & Cells(i, 3) & "')" & ";" 20 21 ElseIf .Cells(i, 5) = "削除" Then 22 sql = "DELETE FROM t_発注機関 WHERE id = " & Cells(i, 1) & ";" 23 24 ElseIf .Cells(i, 5) = "-" Then 25 sql = "" 26 27 Else 28 sql = "" 29 30 End If 31 32 '新しいSheetに書き込み 33 newsheet.Cells(i - 1, 1).Value = sql 34 35 Next 36 37 '空白セルを上詰め削除 38 Dim MyRng As Range 39 Set MyRng = ActiveSheet.UsedRange '処理する範囲を選択 40 MyRng.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlShiftUp '範囲に含まれる空白行を削除 41 42 End With 43 44End Sub 45
試したこと
一行目の空欄を無視するように設定していることが考えられますが、一行目から始める方法が分からず困っています。
書き込むセルを最初から指定するコードを追加するほうがよろしいでしょうか。
良いアイデアがありましたら、ご教示いただきますよう、何卒よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/22 00:42