EXCEL VBA 複数シート選択の方法

このQ&Aのポイント
  • エクセルVBAのシート選択方法について教えてください。選択対象シート数は4つで、シート名は「101」「102」「103追加工」「104」とします。
  • シート名「表紙」のセルに「○」「×」を入力し、「○」となっているシートのみ選択出来るようにしたいです。
  • マクロの場合、シート名が半角数字だけの場合コピーできません。修正すべき箇所を教えてください。
回答を見る
  • ベストアンサー

EXCEL VBA 複数シート選択の方法

エクセルVBAのシート選択方法について教えてください。 選択対象シート数は4つで、シート名は、「101」「102」「103追加工」「104」とします。 シート名「表紙」のセルは A1:101 A2:102 A3:103追加工 A4:104となっており、 使用者はB1~B4セルに「○」「×」を入力し、 「○」となっているシートのみ選択出来るようにしたい。 下記マクロの場合、シート名が全角文字だと使えるのですが、 シート名が「101」のように半角数字だけの場合コピーできません。 どこを修正すればよいのでしょうか? Sub TestSample2() Dim c As Range Dim flg As Boolean On Error Resume Next flg = True ThisWorkbook.Activate  With Worksheets("表紙")  For Each c In .Range("B1:B4")   If c.Value Like "○*" Then     Worksheets(c.Offset(, -1).Value).Select flg     flg = False   End If  Next c End With  With ActiveWindow.SelectedSheets  If .Count > 0 Then    .Copy  End If  End With  '元のシートに戻る場合  'Application.Goto ThisWorkbook.Worksheets("表紙").Range("A1") End Sub

  • kz_in
  • お礼率61% (8/13)

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

こんにちは。お邪魔します。 > シート名が「101」のように半角数字だけの場合コピーできません。 実際のシート名とリスト上のシート名とで、全半角の相違があれば、 当然エラーになりますけれど、ここでの問題点は恐らく、 半角かどうかというより、文字列なのか。数値なのか、 きちんと区別して理解できていない、ということかな?と思います。 例えば、   Worksheets(101) は、1番めのシート、の意味で。   Worksheets("101") は、"101"という名前のシートです。 101は数値、"101"は数字文字列(または単に数字)です。 WorksheetsやSheetsなどのインデックスには、 数値としての.Indexと文字列としての.Nameを指定できますから、 数字文字列を指定したい時は、文字列として指定して挙げなければなりません。 以上を踏まえて、元のコードに手を加えると、以下のような感じ。 ' ' /// Sub Re8360796a()   Dim c As Range   Dim flg As Boolean   On Error Resume Next   flg = True   ThisWorkbook.Activate On Error GoTo ErrOut_   For Each c In Worksheets("表紙").Range("B1:B4")     If c.Value Like "○*" Then       Worksheets(c.Offset(, -1).Text).Select flg       flg = False     End If   Next c '  With ActiveWindow.SelectedSheets '    If .Count > 0 Then  '  ActiveWindow.SelectedSheets.Countは最低でも1です。 '      .Copy '    End If '  End With   If Not flg Then ActiveWindow.SelectedSheets.Copy   ' ' 元のシートに戻る場合 '  Worksheets("表紙").Select   Exit Sub ErrOut_:   MsgBox """表紙""シートに記載されたシート名" & c.Offset(, -1).Text & "は存在しません。" & _     vbLf & "全角半角の相違を含め、シート名を確認してください。", vbInformation End Sub ' ' /// ActiveWindow.SelectedSheets.Countが、0になることはありませんから、 コードを見る限り、意図が解らないのですが、 リストに対して○が一つも付いていないなら、コピーしない、という意味なら、 flgフラグをそのまま使って判別可能です。 ポイントは、.Valueではなくて、.Textプロパティを用いること。 これなら、数値であれ何であれ、 セルに表示された文字列 を取得できますから、 名前のリストからオブジェクトを指定する場合は、.Textプロパティをお奨めします。 おまけ、になりますが、   Worksheets(Array("101","102","103追加工","104")).Select のようにインデックスに直接配列を指定することも可能ですから、 下の例では、文字列変数 ShNames に順次、シート名を区切り文字(CR)を挟んで連結したものを Split()関数で配列化し、一度に複数のシートを選択します。 .Copyメソッドを実行するだけで、実際は.Selectする必要はないようなので、直に.Copyしていますが、 もし、選択が必要なら、     Worksheets(Split(Mid$(ShNames, 2), vbCr)).Select のように選択可能です。 ' ' /// Sub Re8360796c()   Dim c As Range   Dim ShNames As String   ThisWorkbook.Activate   For Each c In Worksheets("表紙").Range("B1:B4")     If c.Value Like "○*" Then       ShNames = ShNames & vbCr & c(1, 0).Text     End If   Next   If ShNames <> "" Then On Error GoTo ErrOut_     Worksheets(Split(Mid$(ShNames, 2), vbCr)).Copy   End If   ' ' 元のシートに戻る場合 '  Worksheets("表紙").Select   Exit Sub ErrOut_:   MsgBox """表紙""シートに記載されたシート名は存在しないものが含まれています。" & _     vbLf & "全角半角の相違を含め、シート名を確認してください。", vbInformation End Sub ' ' /// 尚、ご質問に合わせる形で、Worksheetsを使っていますが、Sheets()でも同じ結果になります。

kz_in
質問者

お礼

こんばんは。 早速の追加回答をして頂き、本当にありがとうございます。 参考にさせていただきます。

その他の回答 (4)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.5

ん? >○が付いてないときメッセージを表示してマクロを終了でよい さくっと if application.countif(worksheets("表紙").range("B1:B4"), "*○*") = 0 then msgbox "NO MARK" exit sub end if とかで。 再掲: >そこはご質問じゃないので…別途ご相談としてまたご質問なさってみて下さい。 人の話きいてますか?

kz_in
質問者

お礼

ありがとうございました。 初心者で申し訳ございません。 新たに質問を投稿しなかった件についてお詫び申し上げます。 また、投稿の確認が遅くなり、たいへん申し訳ございませんでした。 また機会がございましたら、これに懲りずによろしくお願い申し上げます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

>Worksheets(c.Offset(, -1).Value).Select flg のところを Worksheets(c.Offset(, -1).text).Select flg に変えてやるだけでOKです。 #余談ですが ちなみに今のマクロだと,「どこにも○が付いてなくても勝手に一枚コピーする」動作になってます。 まぁそこはご質問じゃないのでスルーしますが,「○が一つもなかったらコピーしたくない」としたいのでしたら,別途ご相談としてまたご質問なさってみて下さい。

kz_in
質問者

お礼

こんばんは。 早速の追加回答をして頂き、本当にありがとうございます。 ご指摘のように「どこにも○が付いてなくても勝手に一枚コピーする」動作になってました。 これは回避したいと思います。 ○が付いてないときメッセージを表示してマクロを終了でよいと思っていますが、 アドバイスをいただけると助かります。 よろしくお願い申し上げます。

回答No.2

単純なことですが、 >A1:101 A2:102 A3:103追加工 A4:104となっており、 A列の部分を、マクロで書いたらよいのではありませんか? '//「表紙」シートで Sub SheetNames() Dim sh As Worksheet Dim i As Long   For Each sh In Worksheets    i = i + 1    Cells(i, 1).Value = "'" & sh.Name 'プレフィックスは文字列書式だから影響はない   Next sh End Sub '//

kz_in
質問者

お礼

こんばんは。 早速の追加回答をして頂き、本当にありがとうございます。 参考にさせていただきます。

  • YUKKER
  • ベストアンサー率44% (74/168)
回答No.1

数字のみだと数列と認識され、「101という名前のシート」ではなく 「101番目のシート」と指定してしまっているのが原因のようです。 Cstrで文字列に変換して、シート名を指定するようにするとうまくいきました。 修正箇所は下記コメント箇所の一行です。 Sub TestSample2() Dim c As Range Dim flg As Boolean On Error Resume Next flg = True ThisWorkbook.Activate With Worksheets("表紙") For Each c In .Range("B1:B4") If c.Value Like "○*" Then Worksheets(CStr(c.Offset(, -1).Value)).Select flg '←修正箇所 flg = False End If Next c End With With ActiveWindow.SelectedSheets If .Count > 0 Then .Copy End If End With '元のシートに戻る場合 'Application.Goto ThisWorkbook.Worksheets("表紙").Range("A1") End Sub

kz_in
質問者

お礼

こんばんは。 早速の追加回答をして頂き、本当にありがとうございます。 参考にさせていただきます。

関連するQ&A

  • EXCEL VBA コピーした複数シートを編集する

    選択対象シート数は4つで、シート名は、「101」「102」「103追加工」「104」とします。 シート名「表紙」のセルはA1:101 A2:102 A3:103追加工 A4:104となっており、 使用者はB1~B4セルに「○」「×」を入力規則から選択します。 予めシート名「表紙」のB6セルには製造番号(例:AM01-130012)を入力しておきます。 「○」となっているシートのみ選択して、下記マクロにてコピーを作成します。 コピーしたシートすべてのB2セルに製造番号入力します。 作製したコピーを1つ上のフォルダに名前を付けて保存します。 ここまでは、できているのですが下記で行き詰っています。 さらに、○を付けた右よこのC1~C4セルに数値1~9を入力しておき、 ○を付けてコピーで作成した対応するシートの中を、 この数値によって編集するプログラムを追加したいのですが、うまくいきません。 アドバイスいただけると助かります。 VBA初心者で申し訳ございません。 どのような編集を行うのかが情報として必要でしたら下記になります。 101、102、103追加工、104それぞれのシートのD3セルに#1、E3セルに#2、・・・、L3セルに#9 (#1~#9)が予め入っています。 C1~C4セルは1~9の数値を入力規則で選択します。 たとえば、B1セルとB4セルを○に、C1セルを2、C4セルを8にして実行した場合、 コピーしたシート101のF3~L3セルをクリア(#1と#2を残して空白)に、 コピーしたシート101のL3セルをクリア(#1~#8を残して空白)にしたいのです。 もし、C1~C4セルで選択した値が9のときは編集する必要がありません。 Sub シートを選択してコピーを作成する() If Application.CountIf(Worksheets("表紙").Range("B1:B4"), "*○*") = 0 Then MsgBox "部品番号が選択されていません。" Exit Sub End If Dim 製番 As String 製番 = Range("B6").Value '(xlRangeValueDefault) sFileFullPath = ThisWorkbook.Path '------------------------------------------------- ' 1つ上の階層のフォルダのまでのフルパスを取得 '------------------------------------------------- For i = Len(sFileFullPath) To 0 Step -1 If InStr(i, sFileFullPath, "\") > 0 Then '現在のフォルダ名を取得 sFolderName = Mid(sFileFullPath, InStr(i, sFileFullPath, "\") + 1) '1つ上の階層のフォルダのまでのフルパスを取得 sParentFolderPath = Mid(sFileFullPath, 1, InStr(1, sFileFullPath, sFolderName) - 2) Exit For End If Next Dim ans As Integer If Dir(sParentFolderPath & "\" & (製番) & "_寸法検査成績書" & ".xls") <> "" Then ans = MsgBox(sParentFolderPath & "に [" & 製番 & "_寸法検査成績書" & ".xls" & "] が既に存在します。" & vbLf & "上書きしますか?", vbYesNo, "上書きの確認") If ans = vbYes Then Kill (sParentFolderPath & "\" & (製番) & "_寸法検査成績書" & ".xls") Else MsgBox "マクロを終了します。" Exit Sub End If End If '------------------------------------------------- ' 選択したシートのコピーを作成する '------------------------------------------------- Dim c As Range Dim flg As Boolean On Error Resume Next flg = True ThisWorkbook.Activate On Error GoTo ErrOut_ For Each c In Worksheets("表紙").Range("B1:B4") If c.Value Like "○*" Then Worksheets(c.Offset(, -1).Text).Select flg flg = False End If Next c If Not flg Then ActiveWindow.SelectedSheets.Copy '------------------------------------------------- ' コピーしたすべてのシートに製番を書き込む '------------------------------------------------- For Each 各シート In Worksheets 'ブック中の各シートに対して繰り返す With 各シート '各シートについて .Activate 'アクティブにする Cells(1, 2) = 製番 End With Next ActiveWorkbook.SaveAs sParentFolderPath & "\" & 製番 & "_寸法検査成績書" & ".xls", xlWorkbookNormal ActiveWorkbook.Close SaveChanges:=False ' 元のシートに戻る Worksheets("表紙").Select MsgBox sParentFolderPath & "に [" & 製番 & "_寸法検査成績書" & ".xls" & "] を作成しました。" Exit Sub ErrOut_: MsgBox """表紙""シートに記載されたシート名" & c.Offset(, -1).Text & "は存在しません。" & _ vbLf & "全角半角の相違を含め、シート名を確認してください。", vbInformation End Sub

  • EXCEL VBA コピーしたシートへ値をコピペ

    選択対象シート数は4つで、シート名は、「101」「102」「103」「104」とします。 シート名「表紙」のA列のセルはA10:101 A11:102 A12:103 A13:104となっており、 使用者はとなりのB10~B14セルに「○」「×」を入力規則から選択します。 また、シート名「表紙」のB6セルには製造番号(例:AM01-130012)を入力しておきます。 「○」となっているシートのみ選択して、下記マクロにてコピーを作成します。 コピーしたシートすべてのB2セルに製造番号を入力します。 ここまではできていて、下記のプログラムを追加したいのですが、うまくいきません。 さらに、○を付けたのと同じ行のD10~L10、D11~L11、D12~L12、D13~L13セルに、 使用者が文字列を入れる場合と入れない場合があります。文字列は左のD列から順に入れます。 文字列があれば、○を付けてコピーした対応するシートの中のH3~P3セルへ貼り付けたいのです。 D10、D11、D12、D13セルが空白のときは何も処理は行わないとします。 たとえば、下記のようにB12セルが○で、D12セルに文字列があれば、 D12~L12セルの値を、コピーで作成したシート103の中のH3~P3セルへ貼り付けたいのです。 B11セルも○ですが、D11セルに文字列がないのでシートのコピーだけ行います。 アドバイスいただけると助かります。 VBA初心者で申し訳ございませんが、よろしくお願いいたします。 <表紙のシート>    A     B     C    D     E     F    G    H     I     J     K      L 5 6    AM01-130012 7 8 9  10 101    × 11 102    ○ 12 103    ○       A1-1  A1-2  A1-3  A1-4  A1-5  A1-6  A1-7  A1-8   A1-9 13 104    × <プログラム> Sub TestSample() If Application.CountIf(Worksheets("表紙").Range("B10:B17"), "*○*") = 0 Then MsgBox "部品番号が選択されていません。" Exit Sub End If Dim 製造番号 As String 製造番号 = Range("B6").Value Dim c As Range Dim flg As Boolean On Error Resume Next flg = True ThisWorkbook.Activate On Error GoTo ErrOut_ For Each c In Worksheets("表紙").Range("B10:B13") If c.Value Like "○*" Then Worksheets(c.Offset(, -1).Text).Select flg flg = False End If Next c If Not flg Then ActiveWindow.SelectedSheets.Copy ' コピーしたすべてのシートに製造番号を書き込む For Each 各シート In Worksheets With 各シート .Activate Cells(1, 2) = 製造番号 End With Next Exit Sub ErrOut_: MsgBox """表紙""シートに記載されたシート名" & c.Offset(, -1).Text & "は存在しません。, vbInformation" End Sub

  • EXCEL VBA Array要素記述を変更したい

    プログラムの中にセルの値を直接記入しているところがあます。 Select Caseの行の 「Array("101", "102", "103", "104")」のとろです。 プログラムには101, 102, 103, 104ではなくB10~B13を使用したいのですが、うまくできません。 実際には4つだけではなく何十個もあって作業がわずらわしくなるのと、ブックごとに値が異なって 汎用性がないためです。 アドバイスいただけると助かります。 初歩的なことを質問しているかも入れませんが、よろしくお願いいたします。 シート名「表紙」のA列は部品番号(=シート名)でA10:101 A11:102 A12:103 A13:104とします。 これに対応したシートが4つあり、シート名は、「101」「102」「103」「104」とします。 使用者は「表紙」のシートで下記の作業を行います。 B6セルには製造番号(例:AM01-130012)を入力します。 B10~B13セルは「○」「×」を入力規則から選択します ○を選択した隣のC10~C13セルは部品個数で1~9の数値を入力規則から選択します。 ○を選択したのと同じ行のD10~L10、D11~L11、D12~L12、D13~L13セルに、 文字列を入れる場合と入れない場合があります。文字列は左のD列から順に入れます。 下記マクロにて「○」となっているシートのみコピーを作成します。(1) コピーしたシートすべてのB1セルに製造番号を入力します。(2) D列に文字列があれば、コピーした対応するシートの中のH3~P3セルへ貼り付けます。(3) C列の値によって、コピーした対応するシートの中のH3~P3セルの値をクリアします。(4) <表紙のシート>    A     B     C    D     E     F    G    H     I     J     K      L 5 6    AM01-130012 7 8 9  10 101    ×    9 11 102    ○    3 12 103    ○    8  A1-1  A1-2  A1-3  A1-4  A1-5  A1-6  A1-7  A1-8   13 104    ×    9 <プログラム> Sub TestSample() Dim c As Range Dim 製造番号 As String Dim flg As Boolean flg = True With ThisWorkbook 製造番号 = .Worksheets("表紙").Range("B6").Value For Each c In .Worksheets("表紙").Range("B10:B13") If c.Value Like "○*" Then ' ' (1) If flg Then '  初めてなら、○に対応したシートを「新しいブックにコピー」 .Worksheets(c.Offset(, -1).Text).Copy flg = False Else '  それ以外なら、○に対応したシートをアクティブブックの最後にコピー追加 .Worksheets(c.Offset(, -1).Text).Copy After:=Worksheets(Worksheets.Count) End If ' ' (2) ' ' コピーしたすべてのシート(のB2)に製造番号を書き込む Range("B1").Value = 製造番号 ' ' (3) ' ' ○の行のD:L を 対応するシートのH3:P3 へ貼り付け If c.Offset(, 2) <> "" Then '  D列が空でなければ Range("H3").Value = c.Offset(, 2).Value Range("I3").Value = c.Offset(, 3).Value Range("J3").Value = c.Offset(, 4).Value Range("K3").Value = c.Offset(, 5).Value Range("L3").Value = c.Offset(, 6).Value Range("M3").Value = c.Offset(, 7).Value Range("N3").Value = c.Offset(, 8).Value Range("O3").Value = c.Offset(, 9).Value Range("P3").Value = c.Offset(, 10).Value End If End If Next c End With ' ' (4) For Each 各シート In Worksheets With 各シート .Activate Select Case ThisWorkbook.Worksheets("表紙").Cells(Application.Match(各シート.Name, Array("101", "102", "103", "104"), 0) + 9, "C").Value Case "1" '1のときの仕事をする Range("I3:P3").Select Selection.ClearContents Case "2" '2のときの仕事をする Range("J3:P3").Select Selection.ClearContents Case "3" '3のときの仕事をする Range("K3:P3").Select Selection.ClearContents Range("J3").Select Case "4" '4のときの仕事をする Range("L3:P3").Select Selection.ClearContents Case "5" '5のときの仕事をする Range("M3:P3").Select Selection.ClearContents Case "6" '6のときの仕事をする Range("N3:P3").Select Selection.ClearContents Case "7" '7のときの仕事をする Range("O3:P3").Select Selection.ClearContents Case "8" '8のときの仕事をする Range("P3").Select Selection.ClearContents Case "9" 'do nothing Case Else End Select End With Next If flg Then MsgBox "部品番号が選択されていません。" Exit Sub End If

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • Excel VBA With ~ End With

    Excel VBA With ~ End Withを使わずに記述するには Sheet1シートのセルA1,A2,B1,B2にA,B,75,25の値を入力して、 Sub test1()  With ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart   .ChartType = xlBarStacked100   .SetSourceData Source:=Sheets("Sheet1").Range("A1:B2"), PlotBy:=xlRows  End With End Sub を実行すると横棒グラフが1個表示されますが、 これを、With ~ End Withを使わずに記述すると Sub test2()  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart.ChartType = xlBarStacked100  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart.SetSourceData Source:=Sheets("Sheet1").Range("A1:B2"), PlotBy:=xlRows End Sub というようになると思いますが、 実行すると縦棒が2個表示されてしまって同じ結果になりません。 なぜなのでしょうか。 test1を、With ~ End Withを使わずに記述するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。(Windows10,Excel2016)

  • Setステートメントをまとめて記述する方法 (エクセル2000VBA)

    お世話になります。 Setステートメントで以下のように書いて、シート名を省略して使っています。  Set a = ThisWorkbook.Worksheets("い")  Set b = ThisWorkbook.Worksheets("ろ")  Set c = ThisWorkbook.Worksheets("は") これをプロシージャ毎に書くとコードが長くなるので、先頭かどこかに1回書くだけで、全てのプロシージャで使えるようにしたいのですがどうしたら良いでしょうか? このようなプロシージャを実行したいのですが、 Private Sub CommandButton1_Click()  a.Range("A2").Value = "データ1"  b.Range("B4").Value = "データ2"  c.Range("C9").Value = "データ3" End Sub (他にもコマンドボタンやチェックボックス用のプロシージャがあります) Setステートメントだけを先頭に書くと、 「プロシージャの外では無効です」というエラーが出ましたので、 Public Sub hensuu()  Set a = ThisWorkbook.Worksheets("い")  Set b = ThisWorkbook.Worksheets("ろ")  Set c = ThisWorkbook.Worksheets("は") End Sub のようにしたら、「実行時エラー"424":オブジェクトが必要です」というエラーが出てしまいました。 どのようにしたらエラーが出ず正しく動くようになりますでしょうか?よろしくお願いします。

  • エクセルのフォームのVBAについて

    VBAがまったくわからないのに参考書を見て高度な事に挑戦しています フォームは作れてフォームをクリックやら入力やらして作ったOKボタンを押すと シート2のA1B1C1‥の列に入力文字だけが羅列されます。 しかし次にやろうとするとA2B2C2‥と下に行かず又A1B1C1‥の列の文字が変更になり続きません。何がいけないのでしょうか? Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("A" & Rows.Count).End(xlUp).Row .Range("A" & LastRow).Value = Worksheets("sheet1").Range("A5").Value .Range("B" & LastRow).Value = Worksheets("sheet1").Range("A7").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("A8").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("A10").Value End With End Sub と参考書とおりいれたのですが‥。教えて下さい。

  • excel  vba  シートの取り扱い

    Sub   aaa() Worksheets.Add ActiveSheet.Name = "Namefile" ((質問)ここへ適当なコードを追加することによって 以下のThisWorkbook.Sheets(1)というのを、上で追加した Namefileシートを処理することとしたい。 つまり  Namefileシート=ThisWorkbook.Sheets(1) どうすればいいか。よろしくお願いします。) ThisWorkbook.Sheets(1).UsedRange ThisWorkbook.Sheets(1).UsedRange.Delete ThisWorkbook.Sheets(1).Range("B2") = "ファイル名" ThisWorkbook.Sheets(1).Range("C2") = "最終更新日" End Sub

  • シート全体対象の設定方法と複数のセル範囲の参照方法

    ブック名「全体.xls」の全シート対象に、 (A1:B10) (D1:F10)の範囲だけの数値を調べ、 その数値が50以上のときに背景色を赤色にするマクロを作りたいですが。 Sub セルの値が50以上の時、背景色を赤色にする() Dim i As Integer i = ActiveCell.Value With ThisWorkbook("全体").Range("A1,B10") If i >= 50 Then ActiveCell.Interior.ColorIndex = 3 Else ActiveCell.Interior.ColorIndex = xlNone End If End With With ThisWorkbook("全体").Range("C1,F10") If i >= 50 Then ActiveCell.Interior.ColorIndex = 3 Else ActiveCell.Interior.ColorIndex = xlNone End If End With End Sub こうしても、 With ThisWorkbook("全体").Range("A1,B10") のところでエラーではじかれます。シート全体の("A1,B10")を対象にしたいですが、指定方法が分かりません。 ちなみにシート数は追加・削除あるので一定ではないです。 また、("A1,B10")と("C1,F10")にて個別にコードを書くのではなく 同時に設定したいけれど、(.Range("A1,B10")&("C1,F10")みたいな) やり方を知りたいです。 初歩的な質問で申し訳ありません。よろしくお願いします。

専門家に質問してみよう