質問: 県名.value next 名前 end sub 無理なことを言っているかもしれませんが詳しい方、どうかよろしくお願いいたします。
回答: こんばんは、 空白データの処理は、すでに回答されている通りif文で条件分離すれば良いと思います。 しかし、 >実行後にリスト名が誤っていて再度マクロを実行した際に誤っているところだけ別にシートが作成されて誤っていないところはそのままというようなマクロは作成できるものでしょうか? マクロは、プログラムなので、論理的説明が出来れば、作成は可能と思います。手法は別として。 ご質問の場合、何が誤りか?判断できない所が問題になります。。ですので、ご質問の流れを考え、誤っていると言うのは、 既存シート名と新規シート名(リスト)の差異を指しているものと推察します。 であれば、リストの内容と既存のシート名を照合して、シート名にあるものは、実行せず、シート名に無くリストにあるものを シート名としてシート作成を行えば良い事になります。 疑問としては、いわゆる間違いと称するシートをどう扱えば良いかと言う事、削除してしまっても良いのでしょうか。 間違えにおそらく入力されているデータはどうするのか?まあ、それこそどこに移せば良いか判断が出来ないかと思いますが、、 なされたい事は、作成のみのようですね。 的外れかもしれませんが、サンプルを示します。ぱっと見、難しい内容になってしまったので、 もっと簡単に考えた方が良いのかも知れません。。取り敢えず、削除部分は、コメントアウトしてあります。 試す場合は、小さなブックで検証してください。 標準モジュールに、実行プロシージャは、 リストから連続シート作成()です。 option explicit sub リストから連続シート作成() dim mylist(), mysht() dim old_name as variant, new_name as variant dim i as long, j as long, lastrow as long with worksheets("sheet1") '質問に合わせて10行目まで(コメント部は最終行 lastrow = 10 '.cells(rows.count, 1).end(xlup).row redim mysht(1 to worksheets.count) redim mylist(1 to lastrow - 1) for i = 2 to lastrow if .cells(i, 1) <> "" then mylist(i - 1) = .cells(i, 1) end if next end with for i = 1 to worksheets.count if sheets(i).name <> "原本" then j = j + 1 mysht(j) = sheets(i).name end if next ' on error resume next old_name = arychk(mylist, mysht) '削除の為のチェック application.screenupdating = false application.displayalerts = false ' リストに無いシートを削除 ' if isarrayex(old_name) = 1 then ' if worksheets.count > ubound(old_name) then ' sheets(old_name).delete ' end if ' end if application.displayalerts = true new_name = arychk(mysht, mylist) '作成の為のチェック if isarrayex(new_name) = 1 then for i = lbound(new_name) to ubound(new_name) 'シート名にないシートをリストから作成 worksheets("原本").copy after:=worksheets(worksheets.count) activesheet.name = new_name(i) activesheet.range("a1") = new_name(i) next end if application.screenupdating = true end sub '配列に存在するかチェック(戻り値は存在しない値) function arychk(ary, chk) as variant() dim i as long, n as long: n = 0 dim varresult as variant, return_array() for i = 1 to ubound(chk) varresult = filter(ary, chk(i)) if ubound(varresult) <> -1 then else 'debug.print chk(i) if chk(i) <> "" then redim preserve return_array(n) return_array(n) = chk(i) n = n + 1 end if end if next arychk = return_array end function function isarrayex(vararray as variant) as long on error goto error_ if isarray(vararray) then isarrayex = iif(ubound(vararray) >= 0, 1, 0) else '1:配列;0:空の配列;-1:not配列 isarrayex = -1 end if exit function error_: if err.number = 9 then isarrayex = 0 end if end function