【EXCEL2007】VBAで変数に代入したい

このQ&Aのポイント
  • 新しいシートを複数挿入して、指定のシート名に変数を使って一括で指定する方法について教えてください。
  • シート名を一つずつ手動で指定するのではなく、変数を使って一括で指定する方法について教えてください。
  • VBAを使用して、新しいシートを複数挿入する際に、変数を使ってシート名を一括で指定する方法を教えてください。
回答を見る
  • ベストアンサー

【EXCEL2007】VBAで変数に代入したい

アクセスありがとうございます。 VBA勉強中です。 新しいシートを複数挿入して、そのシート名を指定のものにしたいのですが そのシート名を一括で指定できないでしょうか? たとえば、"北海道","青森","秋田"...と47都道府県でシートを新規作成するとして for i =1 to 47 変数A=("北海道","青森","秋田"...,"沖縄") Worksheets.Add ActiveSheet.Name = 変数A next i のような感じで指定できないでしょうか? 上の文はトンチンカンかもしれないんですが…^^; よくやる作業なので、なんとか簡略化できないかなと思い、 検索してみましたが、検索ワードが悪いのか、まったく出てきませんでした。 どうぞ、よろしくご教授くださいませ…!!!

質問者が選んだベストアンサー

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

同じく「配列関数(Array関数)」を使うやり方です。 まぁ、書き方色々と言うことで。 Sub Sample() Dim SHName As Variant     SHName = Array("北海道", "青森")     For i = LBound(SHName) To UBound(SHName)         Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = SHName(i)     Next i End Sub UBound(配列)で要素の数を調べることができるので、それを利用しています。 要素数の開始は0なので、正確にはUBound(配列)+1が要素数ですね。 開始位置はLBound(配列)で確認します。通常は「0」です。 ちなみに、#2さんの書き方だと「シートを追加⇒名前を変更」と言う処理、 上記の書き方だと、「名前を指定してシートを追加」と言う処理。 この違いです。 この辺は「好み」ですので、「ご自身好み」の書き方を見つけてくださいませ。 私の好みをザックリ紹介させていただくと、 「シートを追加して終わる処理はあり得ない=追加したシートに何らかの操作をする」 と言う考え方の基に、追加するシートをそのまま変数に持ってしまう書き方。 Sub Sample2() Dim NewSH As Worksheet Dim SHName As Variant     SHName = Array("北海道", "青森")     For i = 0 To UBound(SHName)         Set NewSH = Sheets.Add(after:=Worksheets(Worksheets.Count))             With NewSH                 .Name = SHName(i)                 .Range("A1") = SHName(i)                 ' その他の操作             End With     Next i End Sub こんな感じです。 参考までにどうぞ。

cat-cat14
質問者

お礼

仕事が忙しくなり、お礼が遅れてしまいました。 申し訳ありませんでした! とても詳しく書いていただき、ありがとうございます。 複数シートを選択するときに使ってたArrayが、 変数を指定するときにも使えるなんて! と、こんなレベルです^^; LBound・UBound関数も、はじめて知りました! なるほど、便利ですねー。 たくさん処理するときは非常に助かります♪ tsubuyuki様がいつも使われている方法も、 参考にさせていただきたいと思います。 大変勉強になりました、ありがとうございました!!!

その他の回答 (2)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

配列に一括設定しては如何でしょうか。 Dim 変数A, st 変数A = Array("北海道", "青森", "秋田", "沖縄") For Each st In 変数A Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = st Next

cat-cat14
質問者

お礼

ご教授いただき、ありがとうございます! For EachがRangeに使えるのは知ってたんですが、 こういう使い方もできるんですね! 勉強になりました! ありがとうございました~!!

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.1

配列変数を使います。 Sub tst() Dim a(47) a(1) = "北海道" a(2) = "青森"   '....以下同様に a(47) = "沖縄" For i = 1 To 47 Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = a(i) Next i End Sub

cat-cat14
質問者

お礼

ご教授いただき、ありがとうございます! 配列変数なるものは知らなかったので、 勉強になりました。 ただ、a(1)の部分も簡略化出来たら…と思います。 さすがに47シートはないですが、 結構なシート数があるもので… ありがとうございました!

関連するQ&A

  • VBA コード教えてください

    添付画像のように 配送日・出発地・目的地・運送会社・ドライバー の5つの列からなるデータがあります(sheet1) これは調べたい配送日でデータを抽出、さらに出発地>運送会社>ドライバーの順でソートをかけた物です 出発地ごとに分けたデータが欲しいという要望があり、下記のようなコードを作ってみました Sub filter() Worksheets("Sheet1").AutoFilterMode = False With Cells(3, 1) Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = "青森" .AutoFilter Field:=2, Criteria1:="青森" .CurrentRegion.Copy Destination:=Worksheets("青森").Cells(3, 1) Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = "秋田" .AutoFilter Field:=2, Criteria1:="秋田" .CurrentRegion.Copy Destination:=Worksheets("秋田").Cells(3, 1) Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = "岩手" .AutoFilter Field:=2, Criteria1:="岩手" .CurrentRegion.Copy Destination:=Worksheets("岩手").Cells(3, 1) Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = "宮城" .AutoFilter Field:=2, Criteria1:="宮城" .CurrentRegion.Copy Destination:=Worksheets("宮城").Cells(3, 1) End With Worksheets("Sheet1").AutoFilterMode = False End Sub これを実行すると青森・秋田・岩手・宮城のワークシートが作成され出発地ごとのワークシートの作成は出来ました しかし、日によっては出発地が無い日がある事があります そこでB列のデータを参照し、データが無い場合にはその出発地のワークシートは作成されないようにしたいと思いました これが思ったようにいかないのです どのようなコードを書けば、出発地データがある物だけワークシートを作成して個別のワークシートを作成させる事が出来るのでしょうか? よろしくお願い致します

  • VBAで初歩的な質問ですシートのコピーについて

    Sub SheetCopy() For i=1 to 31 WorkSheets.Add.Move after:=WorkSheets(workSheets.Count) シート名=i ActiveSheet.Name=シート名 Next End Sub と、シートをコピーするプロシージャを作りました。本当は、シート名を7月1日から、7月31日の31枚を作りたいのですが、どのように書けばよいのでしょうか? よろしくお願いします。

  • エクセルでシートのコピー

    いつもお世話になっています、マクロ初心者です。 カレンダーの1月分をシートごと12月までコピーするのに、サンプル集をそのまま引用したのですが、シート名を指定する所でエラーになってしまいます。 $"月"の部分を削除すればうまくいきます。 エクセル2000パーソナルだからなのでしょうか? 'シートコピー Worksheets(1).Cells.Copy For i = 2 To 12 Worksheets.Add after:=Worksheets(ActiveSheet.Index) ActiveSheet.Name = CStr(i) & "月"(この行がエラーになります) ActiveSheet.Paste Range("A1").Select Next i エクセル2000パーソナルで処理する方法がありましたら教えてください。

  • 【EXCEL】ワークシート名を変更方法しっていますか!?

    以下のようなものをワークシート名として一括変換する方法は ありますでしょうか? (以下の例です) 行番|都道府県|人口 --------------------------- 1  |北海道 |50万人   2  |青森県 |20万人 3  |岩手県 |10万人 4  |宮城県 |30万人 5  |秋田県 |25万人 この表でいうと都道府県名の列の行名(都道府県名)を ワークシート名に一括に変換する方法ってありますでしょうか? 上の表でいいますと5個ワークシートが出来て |北海道|青森県|岩手県|宮城県|秋田県|  と言う感じになります。 ご助言のほどよろしくお願いします。

  • Excel2003VBA

    お世話になっております。 手作業マクロの記録で下記作業を行い、一部修正をして一度はうまく動作していたのですが 1点 問題が御座いまして独自に色々試していたのですが、どうにもうまくいかないので どなたかご教授いただけませんでしょうか。 Sub ●●用() ' ' ●●用 Macro ' 12月1月の店舗を抽出し新しいブックに移動する。 ' Selection.AutoFilter Field:=3, Criteria1:="=12月", Operator:=xlOr, _ Criteria2:="=1月" Selection.AutoFilter Field:=8, Criteria1:="(店名)" Range("A4:W2076").Select Selection.Copy Sheets.Add ActiveSheet.Paste Application.CutCopyMode = False Worksheets("Sheet1").Select Worksheets("Sheet1").Move Workbooks("営業部まとめ.xls").Sheets("全件表示").Activate Selection.AutoFilter Field:=3 Selection.AutoFilter Field:=8 Range("A5").Select ActiveWorkbook.Save End Sub まず、 >Worksheets("Sheet1").Move ここだけあれば >Worksheets("Sheet1").Select こっちは必要ないでしょうか? あと、上記の中で > Worksheets("Sheet1").Select この部分なのですが、毎回「Sheet1」とは限らないので「アクティブシート」にしたいと思い色々試してみましたが 全てエラーとなり、結局元にもどしてしまいました。 > Worksheets("Sheet1").Move あと出来ればこれも移動させた後でデスクトップに名前を付けて保存までしたいのですが どのようなコードを追加すればよろしいでしょうか。 宜しくお願い致します。

  • エクセルVBAのチェックボックスを使った検索

    当方、VBA初心者です。 使用しているソフトは、エクセル2007です。 都道府県別で会社検索ができるものを作りたいと考えております。 内容は、ユーザフォームに都道府県別のチェックボックスを作っております。 その都道府県をチェックすると オートフィルタ機能でチェックした都道府県をシート上に抽出するものです。 以下が理想とするイメージです。 会社名   住所 aaa      北海道釧路市1-1 bbb      青森県八戸市2-2 ccc      岩手県盛岡市3-3      ↓※北海道と青森県をチェックした場合 会社名   住所 aaa      北海道釧路市1-1 bbb      青森県八戸市2-2 しかし、北海道と青森県をチェックしても、抽出されるのは青森県だけになります。 どのようにしたら、チェックした都道府県をすべて表示できるようになるのでしょうか。 以下が現在のイメージです。 会社名   住所 aaa      北海道釧路市1-1 bbb      青森県八戸市2-2 ccc      岩手県盛岡市3-3      ↓※北海道と青森県をチェックした場合 会社名   住所 bbb      青森県八戸市2-2 以下が現在作成しているものです。 ---- Private Sub CommandButton1_Click() Unload Me End Sub ---- Private Sub CommandButton2_Click() If CheckBox1.Value = True Then Selection.AutoFilter ActiveSheet.Range("$A$5:$O$1677").AutoFilter Field:=10, Criteria1:="=*北海道*" _ , Operator:=xlAnd End If If CheckBox2.Value = True Then Selection.AutoFilter ActiveSheet.Range("$A$5:$O$1677").AutoFilter Field:=10, Criteria1:="=*青森県*" _ , Operator:=xlAnd End If End Sub ---- お手数ではございますが、どうがご教授をお願いいたします。

  • Excel2007VBA 日付の加算について

    ●質問の主旨 コピー元のシートの特定セル(A3セル)に入力されている日付に対して 加算を行い、その加算した日付をシート名とコピー先の シートの特定セルに入力するためにはどうすればよいでしょうか? 具体的には下記のコードをどのように書き換えればよいでしょうか? 「Worksheets(i + 1).Name = mydate」のところでエラーが出てしまいます。 ご存知の方、ご教示願います。 ●コード Sub 一週更新() Application.ScreenUpdating = False Dim i As Integer Dim mydate As Date '既存のシート数を取得 i = ThisWorkbook.Worksheets.Count '最終シートをコピーして後ろに挿入 Worksheets(i).Copy after:=Worksheets(i) 'mydateは最終シートのA3セルに入力されている日付の1週間後の日付とする mydate = DateAdd("ww", 1, Worksheets(i).Range("A3")) '追加したシートのシート名はmydate2の日付とする Worksheets(i + 1).Name = mydate '新しく作成したワークシートについて以下の処理を行う With ActiveSheet Range("A3") = mydate Range("A12").ClearContents Range("A19").ClearContents Range("A26").ClearContents Range("A32").ClearContents End With Application.ScreenUpdating = True End Sub ●補足 上記コードは週単位の報告書を作成するためのコードです。 コピー元のA3セルは表示上は9/16となっており、 「セルの書式設定上」は「日付」→「3/14」, ロケールは日本語です。 私はVBA初心者です。

  • sheetの中身もコピーしたい

    表題通りの質問になります。以下のソースを実行すると、コピーはされますが、中身はコピーされません。どうすればよろしいでしょうか? アドバイスお願いいたします。 Sub sheetの連続コピー() Dim sheet_name As String '文字型変数の宣言 sheet_name = ActiveSheet.Name '現在アクティブになっているシート名の取得 'Range("A1") = sheet_name '取得したsheet名をA1のセルに表示 Dim NewWS As Worksheet For i = 1 To 10 'Worksheets.Add ~ 空のSheetが ○個 挿入される Set NewWS = Worksheets.Add(Before:=Worksheets(sheet_name)) NewWS.Name = sheet_name & i Next End Sub

  • VBA 変数

    毎度お世話になります。 先日も同じような質問をさせていただいたのですが、 パターンが替わると手も足も出ません。 Dim myweek As Integer myweek = Worksheets(Sheets.Count).Range("A1").Value Worksheets(Array("○○第" + myweek + "週", " ◇◇第+ myweek + "週")).Select  という具合にシート名の週の数字だけを変数にしようとしていますが、うまくいきません。 指摘と修正お願いします。 補足Range("A1")には数字が入っています。   ○○、◇◇は固有名詞です。

  • 【Excel_VBA】オブジェクト名の変数

    ExcelVBA(2007)でシートのオブジェクト名を変数で回したく、下記コードを用いたのですがエラーが出現します。 【コード】 Dim i As Integer For i = 1 To 10 Sheet & i.Activate Next i 【エラー内容】 コンパイルエラー: 修正候補:式 この場合、どのような方法を用いたらシートのオブジェクト名を変数でうまく回すことができるのか、ご教授いただければ助かります。 よろしくお願いします。

専門家に質問してみよう