いつもお世話になっています。
ExcelのVBAで実装可能かと思うのですが、ご教授願いたく思います。
今回、大量のシートの追加(最後尾)とその追加したシートの名前を
変更するVBAを制作したいと思ったのですが
シートの追加とシートの名前変更(ソースの直接記入)までは、
なんとか出来ましたが
名前を、とある範囲のセルにある文字列に変更するという事がしたいです。
例えばE1:E5までの範囲にある文字列
「あ」
「い」
「う」
「う」
「う」
とあったら、かぶっているものは除き、「あ」「い」「う」という名前のシートを3つ追加したいという事です。
上記、もし実装可能であればご教授お願いします。
また、可能だけどokwaveの入力欄では面倒だし説明しづらい、という回答でもokです。
その場合、参考サイトなど教えて頂けると幸いです。
何卒よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
>にすればいいのですよね…?
えぇ,それでいいですよ。
と,正解だよと教えて貰ってからでないと,ご自分で試してみることもできないのですか?
それとも実際に「ジツは『これこれ』のマクロでやってみたらこういう具合に上手く行かなかったので教えて欲しかった」んでしたら,そういう具体的な状況をキチンと添えて新しいご相談として投稿し直してください。
>不可視のセル
ついでに聞いちゃえで付き合わされるほうがイイ迷惑ですので,一つのご相談が解決したら新しい質問は次のご相談で投稿し直してください。こういうのは,こちらのような質問相談掲示板ではごくアタリマエのマナーですので,憶えておいてください。
sub macro2()
dim target as range
dim h as range
'見えてるセルを取得する。「全部隠れていた」場合も考える。
on error resume next
set target = worksheets("リストのシート").range("E2:E5").specialcells(xlcelltypevisible)
if target is nothing then exit sub
’以下同じ
for each h in target
on error goto errhandle
worksheets(h.value).select
on error goto 0
next
exit sub
errhandle:
’少し検査を厳しくしてみた例
if h <> "" then
worksheets("ひながたシート").copy after:=worksheets(worksheets.count)
activesheet.name = h.value
end if
resume
end sub
ご回答ありがとうございます。
そして、お手数、ご迷惑をおかけしまして申し訳ありませんでした。
以後、気を付けたいと思います。
そして、ご回答大変参考になりました!
ありがとうございました!
No.5
- 回答日時:
No.2です。
別質問で
>E1~E3000などの広範囲のセル範囲の場合も
>可能でしょうか・・・?
に関しては、前回のコード内の
>For i = 1 To 5
の行を変更すれば可能です。
例えば
>For i = 1 To 3000
または
>For i = 1 To ws.Cells(Rows.Count,5).End(xlUp).Row
といった感じで!
※ ただし、上限Sheet数はメモリーに依存するみたいなので、あまりにSheet数が多すぎるとエラーになったり、PCが固まったりすると思います。
次に
>もし、追加ではなく、あるシートをコピーして追加の場合・・・
に関しては
Sub test2()
Worksheets("Sheet名").Cells.Copy
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Paste
End Sub
とした方が良いと思います。
最後に
>用意されたデータ範囲が非表示になってた場合
とは最初のE1以降のセルが非表示になっていた場合、非表示セルは含まない!と解釈すれば良いのですかね?
もしそうであれば前回のコード内の
> If WorksheetFunction.CountIf(Range(ws.Cells(1, 5), ws.Cells(i, 5)), ws.Cells(i, 5)) = 1 Then
部分を
>If WorksheetFunction.CountIf(Range(ws.Cells(1, 5), ws.Cells(i, 5)), ws.Cells(i, 5)) = 1 _
And ws.Rows(i).Hidden = False Then
のように変更してみてください。
この程度でよろしいでしょうか?m(_ _)m
回答へのお礼にも関わらず、質問し
それに対して、お答えくださって、本当にありがとうございます。
また、こちらの回答も大変参考になりました!
今後の糧とさせていただきます。
ありがとうございました!
No.3
- 回答日時:
繰り返しを「あいううう」の列のセルを主体に考えれば仕舞いで、質問になるのはなぜ。
この列をソートしておいて、上から順次見ていって、直前上行と同じ値なら、処理せず次の行に行く。
違う場合はそのセルの値でシートを追加
ーー
Sheet1のA列(シート名群)でソート済みとする。
Sub test01()
Dim sh1
Set sh1 = Worksheets("Sheet1")
d = sh1.Range("A65536").End(xlUp).Row
m = ""
For i = 2 To d
If sh1.Cells(i, "A") = m Then '上と同じ文字列なら
Else
Worksheets.Add(After:=Worksheets(Sheets.Count)).Name = sh1.Cells(i, "A") 'こういう書き方が出来た
m = sh1.Cells(i, "A")
End If
Next i
End Sub
ーー
A2:A6
aa
bb
cc
cc
dd
で、aa、bb、cc、ddのシートが加わった。
ーー
シート名をソートすることがダメな場合は、現在行までの行で、同じ文字列のカウントをして2以上ならダブリとして
処理を飛ばすロジックにするとか。
No.2
- 回答日時:
こんばんは!
当然のことながら同じBook内に同名のSheetは追加できませんので、E1~E5セルには現在あるSheet名以外の文字列だとします。
↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。
尚、Sheet1のE1~E5セルに入っているとしての一例です。
Sub test()
Dim i As Long
Dim ws As Worksheet
Set ws = Worksheets("sheet1")
For i = 1 To 5
If WorksheetFunction.CountIf(Range(ws.Cells(1, 5), ws.Cells(i, 5)), ws.Cells(i, 5)) = 1 Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = ws.Cells(i, 5)
End If
Next i
End Sub
こんな感じではどうでしょうか?m(_ _)m
ありがとうございます。
E1~E3000などの広範囲のセル範囲の場合も
可能でしょうか・・・?
また、
もし、追加ではなく、あるシートをコピーして追加の場合
と、用意されたデータ範囲が非表示になってた場合
例えばフィルタなので隠れてたり、する場合は
含まないというやり方は、どうすればよいのでしょうか?
No.1
- 回答日時:
ふつーに「やるべきこと」を考えてみると
0.用意されたデータ範囲(「あいうううう」どこからどこまで何がある)の確認
1.かぶってない「あ」「い」「う」のリストを準備
2.準備したリストに従いシートの追加と名前の変更
という段取りで,淡々とマクロを書けばよいだけのお話です。
とってもムズカシそうないかにもマクロマクロしたマクロも書けますし,ごく簡単でシンプルな方法も,アイデア次第でいくらでもあります。
でもまぁ,ゴタクはいらないでしょうから作成例:
sub macro1()
dim h as range
for each h in worksheets("元のリストのシート名").range("E1:E" & worksheets("元のリストのシート名").range("E65536").end(xlup).row)
on error goto errhandle
worksheets(h.value).select
on error goto 0
next
exit sub
errhandle:
worksheets.add after:=worksheets(worksheets.count)
activesheet.name = h.value
resume
end sub
ありがとうございます。
もし、追加ではなく、あるシートをコピーして追加の場合
worksheets.add after:=worksheets(worksheets.count)
の部分を
Worksheets("コピーしたいシート名").Copy after:=Worksheets(Worksheets.Count)
にすればいいのですよね…?
それと、用意されたデータ範囲が非表示になってた場合
例えばフィルタなので隠れてたり、する場合は
含まないというやり方は、どうすればよいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) シート名を簡単に書く方法があれば教えてください。 4 2023/08/24 12:40
- Excel(エクセル) ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存 2 2022/04/18 13:15
- Excel(エクセル) エクセル VBAでBook モジュールのプロシージァ(コード)に除外シートを設定したい 1 2023/01/11 15:53
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 1 2022/06/18 21:20
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シートをコピーして シートに...
-
Excelでシート名と最終更新日を...
-
エクセルのマクロで指定条件一...
-
Excel マクロ 他ブックのシート...
-
エクセルの複数シートの保護を...
-
Excelで同じシートのコピーを一...
-
EXCELで1ヶ月分の連続した日付...
-
Excelで金銭出納帳。繰越残高を...
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
VBAでシートコピー後、シート名...
-
整数行を残し小数点の行を削除...
-
Excelでセル内の数式は残し値だ...
-
Excel2007で、太字にした行のみ...
-
スプレッドシートの関数VLOOKUP...
-
エクセル(VBA)でリストボック...
-
前の(左隣の)シートを連続参...
-
複数のシートにまたがるデータ...
-
エクセルでファイル保存時に複...
-
基本となるシートをコピーした...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのマクロで指定条件一...
-
シートをコピーして シートに...
-
Excelでシート名と最終更新日を...
-
Excel マクロ 他ブックのシート...
-
エクセルVBA 行列を一気に変換...
-
エクセル マクロ 任意のファ...
-
エクセルのマクロ設定について...
-
シートをコピー、シート名を変更
-
Excel シートを自動作成、セル...
-
Excel で選択しているセルの行...
-
エクセルのマクロ コマンドボ...
-
Excelで同じシートのコピーを一...
-
条件に応じて特定の行を非表示...
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルでファイルを開いたと...
-
EXCELで1ヶ月分の連続した日付...
-
エクセルVBAでパスの¥マークに...
-
EXCEL:同じセルへどんどん足し...
-
シートの保護のあとセルの列、...
おすすめ情報