• ベストアンサー

シート名が半角数値だったら、それら全シートに設定を。

エクセル2000です。 マクロを作成したいのですが、どなたかお知恵をお貸しください。 やりたいこと。 シート名が半角数値だったら、それら全てのシートに下記の設定を施しなさい。 ↓ココから 選択した全シートの1行目は左揃え。 選択した全シートの2行目,3行目は中央揃え。 選択した全シートの4行目以下の全行について、横位置を・・・ A列→中央揃え B列→左揃え C列→中央揃え D列→右揃え E列→左揃え&折り返して全体を表示する。 F列→中央揃え G列→中央揃え 選択したシート全ての縦位置を・・・ 全てを中央揃え ↑ココまで ↓ココから ↑ココまで  は、自動マクロですでに作成してあるので、OKです。 知りたいこと。 シート名→1,2,3,・・・、いくつまでシートがあるかは不明確であり(今後増える)、 かつ、数値が飛び飛びになる可能性がある場合の設定の仕方を知りたいです。 シート名が1,2,4,5,10・・・などとなる場合があります。 このような場合、どのように設定したら良いのでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

下のように  ws.Activate を追加  Range( ) をws.Range( ) にします。  最後のCells も ws.Cells にします。  ワークシートをアクティブにして、どのワークシートか明示する必要があるわけです。 Sub 何か処理()   Dim ws As Worksheet   For Each ws In Worksheets     If IsNumeric(ws.Name) And ws.Name = StrConv(ws.Name, vbNarrow) Then       '処理をここに書きます       ws.Activate           '***追加       ws.Range("A4:A65536").Select  '***『ws.』を追加       With Selection         .HorizontalAlignment = xlCenter       End With       ws.Range("B4:B65536").Select       With Selection        :        :        :        :       ws.Cells.Select         '***『ws.』を追加       With Selection         .VerticalAlignment = xlCenter       End With     End If   Next End Sub

noname#4540
質問者

お礼

お返事が遅くなり、すみませんでした。 昨日、お返事を拝見し、やってみました。 うまく行きました。 マクロって難しいです。 使いこなせるようになったら、きっと世界が広がるんでしょうね。 私も頑張って勉強するので、また機会がありましたらよろしくお願いいたします。 このたびは本当にありがとうございました。

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

再びこんにちは。 #3さんから回答出てますが、、、 Sub ATest() Dim ws As Worksheet, checkFlg As Boolean Dim checkValue As Integer For Each ws In Worksheets  If IsNumeric(ws.Name) Then   For i = 1 To Len(ws.Name)    checkFlg = True    checkValue = Asc(Mid(ws.Name, i, 1))    If Not (checkValue <= 57 And checkValue >= 48) Then     checkFlg = False     Exit For    End If   Next i  End If  If checkFlg Then   With ws   .Range("A4:A65536,C4:C65536,G4:G65536"). _         HorizontalAlignment = xlCenter   .Range("B4:B65536,F4:F65536,E4:E65536"). _         HorizontalAlignment = xlLeft   .Range("D4:D65536").HorizontalAlignment = xlRight   .Range("E4:E65536").WrapText = True   .Cells.VerticalAlignment = xlCenter   End With  End If  checkFlg = False Next ws End Sub

noname#4540
質問者

お礼

再びありがとうございました。 今日、これから会社へ行って試してみます。 マクロって、なかなか難しいです。 勉強不足を実感しています。 また機会がありましたら、よろしくお願いいたします。 このたびは、本当にありがとうございました。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

こんな風にも書けます。 >シート名→1,2,3,・・・、いくつまでシートがあるかは不明確であり(今後増える)、 >かつ、数値が飛び飛びになる可能性がある場合の設定の仕方を知りたいです。 For Each で対応しています。 >半角数値 半角数値文字列ということで、   IsNumericと、強制的に小文字に変換した文字との一致を調べています。   (小数点付数値やマイナス数値には言及されていないので、ないものとしています) Sub 何か処理()   Dim ws As Worksheet   For Each ws In Worksheets     If IsNumeric(ws.Name) And ws.Name = StrConv(ws.Name, vbNarrow) Then       '処理をここに書きます     End If   Next End Sub

noname#4540
質問者

お礼

すみません。補足要求させてください。 下記の方へのお礼欄に書いたことと同じ状態になってしまいました。 自動マクロで作成した部分を指示通りの位置に入れてみました。 困っていること。 シート「1」を選択しておいてマクロを実行すると、シート1は期待通りの結果となります。 しかし、これを2,3,5・・・といちいちシートを選択しないと、マクロが実行できません。 半角数値のシート名だったら、それぞれのシートを選択するまでもなく、全シートに設定したかったのですが、変更可能でしょうか。 自動マクロで作成した部分がおかしいのでしょうか・・・。 再度、ご教授いただければと思います。 よろしくお願いいたします。 Sub 何か処理() Dim ws As Worksheet For Each ws In Worksheets If IsNumeric(ws.Name) And ws.Name = StrConv(ws.Name, vbNarrow) Then '処理をここに書きます Range("A4:A65536").Select With Selection .HorizontalAlignment = xlCenter End With Range("B4:B65536").Select With Selection .HorizontalAlignment = xlLeft End With Range("C4:C65536").Select With Selection .HorizontalAlignment = xlCenter End With Range("D4:D65536").Select With Selection .HorizontalAlignment = xlRight End With Range("E4:E65536").Select With Selection .HorizontalAlignment = xlLeft .WrapText = True End With Range("F4:F65536").Select With Selection .HorizontalAlignment = xlLeft End With Range("G4:G65536").Select With Selection .HorizontalAlignment = xlCenter End With Cells.Select With Selection .VerticalAlignment = xlCenter End With End If Next End Sub

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんにちは。 スマートじゃないけど。。 Sub ATest() Dim ws As Worksheet, checkFlg As Boolean Dim checkValue As Integer For Each ws In Worksheets  If IsNumeric(ws.Name) Then   For i = 1 To Len(ws.Name)    checkFlg = True    checkValue = Asc(Mid(ws.Name, i, 1))    If Not (checkValue <= 57 And checkValue >= 48) Then     checkFlg = False     Exit For    End If   Next i  End If  If checkFlg Then    'ここに処理を書く    MsgBox ws.Name & " ←これ"  End If  checkFlg = False Next ws End Sub

noname#4540
質問者

お礼

早々のご回答をありがとうございました。 すみませんが、補足要求させてください。 自動マクロで作成した部分を指示通りの位置に入れてみました。 困っていること。 シート「1」を選択しておいてマクロを実行すると、シート1は期待通りの結果となります。 しかし、これを2,3,5・・・といちいちシートを選択しないと、マクロが実行できません。 この場合、半角数値のシート名だったら、それぞれのシートを選択するまでもなく、全シートに設定したかったのですが、変更可能でしょうか。 ※メッセージボックスは1,2,3・・・と表示されるのですが、マクロが実行できないのです。 自動マクロで作成した部分がおかしいのでしょうか・・・。 再度、ご教授いただければと思います。 よろしくお願いいたします。 Sub ATest() Dim ws As Worksheet, checkFlg As Boolean Dim checkValue As Integer For Each ws In Worksheets  If IsNumeric(ws.Name) Then   For i = 1 To Len(ws.Name)    checkFlg = True    checkValue = Asc(Mid(ws.Name, i, 1))    If Not (checkValue <= 57 And checkValue >= 48) Then     checkFlg = False     Exit For    End If   Next i  End If  If checkFlg Then    'ここに処理を書く Range("A4:A65536").Select With Selection .HorizontalAlignment = xlCenter End With Range("B4:B65536").Select With Selection .HorizontalAlignment = xlLeft End With Range("C4:C65536").Select With Selection .HorizontalAlignment = xlCenter End With Range("D4:D65536").Select With Selection .HorizontalAlignment = xlRight End With Range("E4:E65536").Select With Selection .HorizontalAlignment = xlLeft .WrapText = True End With Range("F4:F65536").Select With Selection .HorizontalAlignment = xlLeft End With Range("G4:G65536").Select With Selection .HorizontalAlignment = xlCenter End With Cells.Select With Selection .VerticalAlignment = xlCenter End With    MsgBox ws.Name & " ←これ"  End If  checkFlg = False Next ws End Sub