Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3835 / 13646 ツリー ←次へ | 前へ→

【59931】SheetNameの置換え kiki 09/1/20(火) 10:41 質問[未読]
【59933】Re:SheetNameの置換え ひげくま 09/1/20(火) 11:10 発言[未読]
【59934】Re:SheetNameの置換え Jaka 09/1/20(火) 11:16 発言[未読]
【59937】Re:SheetNameの置換え kiki 09/1/20(火) 11:53 質問[未読]
【59938】Re:SheetNameの置換え にぃ 09/1/20(火) 12:00 発言[未読]
【59939】Re:SheetNameの置換え にぃ 09/1/20(火) 12:13 発言[未読]
【59940】Re:SheetNameの置換え kiki 09/1/20(火) 12:32 お礼[未読]

【59931】SheetNameの置換え
質問  kiki  - 09/1/20(火) 10:41 -

引用なし
パスワード
   お世話になります。

SheetName 20/4〜21/3まで 12枚あります。
20→21
21→22に変えたいのですが、上手くいきません。
宜しくお願い致します。

Sub Macro2()
Dim S As String
  S = Sheets(Array("20/4", "20/5", "20/6", "20/7", "20/8", "20/9", "20/10", "20/11", "20/12", "21/1", "21/2", "21/3")).Select
    Sheets(S).Name.Replace "20", "21"
    Sheets(S).Name.Replace "21", "22"
End Sub

【59933】Re:SheetNameの置換え
発言  ひげくま  - 09/1/20(火) 11:10 -

引用なし
パスワード
   こんにちは。

▼kiki さん:
>SheetName 20/4〜21/3まで 12枚あります。
>20→21
>21→22に変えたいのですが、上手くいきません。

どのように上手くいかないのかを書きましょうね。
どうなってほしいものが、どうなってしまうのか。

>    Sheets(S).Name.Replace "20", "21"
>    Sheets(S).Name.Replace "21", "22"

この順だと、20を21にしたものも、22に変わってしまいますよ。
処理の順を逆にしましょう。

【59934】Re:SheetNameの置換え
発言  Jaka  - 09/1/20(火) 11:16 -

引用なし
パスワード
   ▼kiki さん:
>SheetName 20/4〜21/3まで 12枚あります。
????
シート名に「/」スラッシュは使えないはずですが....。
EXL2007は、知らない。

>20→21
>21→22に変えたいのですが、上手くいきません。
まず、21を22に変えてから、
20を21に変えないと、21が全て22に変えられて21がなくなると思います。
変換する順番を考えないとダメだと思います。

【59937】Re:SheetNameの置換え
質問  kiki  - 09/1/20(火) 11:53 -

引用なし
パスワード
   Jaka さん

 >シート名に「/」スラッシュは使えないはずですが....。
 そうですね。間違えました。

ひげくまさん

 Sheets(S).Name.Replace "21", "22"の所で
 "indexが有効範囲にありません"と
 出ます。
 どのようにすれば、いいですか?
 宜しくお願い致します。

Dim S As String
  S = Sheets(Array("20.4", "20.5", "20.6", "20.7", "20.8", "20.9", "20.10", "20.11", "20.12", _
    "21.1", "21.2", "21.3")).Select
    Sheets(S).Name.Replace "21", "22"
    Sheets(S).Name.Replace "20", "21"
End Sub

【59938】Re:SheetNameの置換え
発言  にぃ  - 09/1/20(火) 12:00 -

引用なし
パスワード
   ▼kiki さん:
こんにちは!

> Sheets(S).Name.Replace "21", "22"の所で
.Replaceの使い方はRangeオブジェクトだけのような?


SheetをSelectしなくてもこのような感じでどうでしょう?

    Dim i As Integer
    
    For i = 1 To Sheets.Count
      Sheets(i).Name = Replace(Sheets(i).Name, "21", "22")
      Sheets(i).Name = Replace(Sheets(i).Name, "20", "21")
    Next

完全に分岐するのでしたら、

    Dim i As Integer
        
    For i = 1 To Sheets.Count
      If Sheets(i).Name Like "*21*" Then
        Sheets(i).Name = Replace(Sheets(i).Name, "21", "22")
      ElseIf Sheets(i).Name Like "*20*" Then
        Sheets(i).Name = Replace(Sheets(i).Name, "20", "21")
      End If
    Next

とか?

【59939】Re:SheetNameの置換え
発言  にぃ  - 09/1/20(火) 12:13 -

引用なし
パスワード
   >.Replaceの使い方はRangeオブジェクトだけのような?
Application.WorksheetFunction.Replaceもありましたね^^;

【59940】Re:SheetNameの置換え
お礼  kiki  - 09/1/20(火) 12:32 -

引用なし
パスワード
   にぃさん

SheetをSelectしなくても いいのですね。
マクロを記録しながら いろいろ
やって見ましたが 出来ませんでした。

有り難うございました。

3835 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free