- ベストアンサー
EXCELのVBAですが。
EXCELのVBAですが。 Sub macro1() Dim mycnt As Integer Dim sheet_name1 As String Sheets("kekka").Select Range("A1").Select Sheets("shiji").Select mycnt = Range("B1").Value sheet_name1 = Range("c" & mycnt) Sheets("kekka").Select Sheets("kekka").name = sheet_name1 Sheets("kansuke").Select Sheets("kansuke").Copy Before:=Workbooks("2007年報告.xls").Sheets(3) End Sub (やりたいこと) B1に入っている数値でC1からC10に入っているあるシートの名前(たとえばkansukeとする)を取り、その名前で kekkaというシート名をkansukeという名前に変える。 名前を変えたkansukeというシートを別の2007年報告というbookにコピーを転送する。 (質問)上のコードで実はkansukeと書いてあるところは,B1の値次第で当然いろいろに 変化するため、そのシート名にとらわれない書き方をしたいのですがどう記述すればいいのか わかりません。以上お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
んー、内容からして、名前がある分、別ブックに新規シートを作りたい って感じですね。 仮にあなたが想像している基本形を崩さない作りにすると、こんなんどうですか? Sub macro1() Dim mycnt As Integer Dim sheet_name As String Dim ws As Worksheet Dim i As Integer Application.ScreenUpdating = False Application.DisplayAlerts = False With ThisWorkbook Set ws = .Sheets("kekka") i = 1 Do While IsNumeric(CStr(.Sheets("shiji").Range("B" & CStr(i)).Value)) mycnt = .Sheets("shiji").Range("B" & CStr(i)).Value sheet_name = .Sheets("shiji").Range("C" & mycnt).Value ws.Name = sheet_name ws.Copy Before:=Workbooks("2007年報告.xls").Sheets(3) i = i + 1 Loop ws.Name = "kekka" End With Application.DisplayAlerts = True Application.ScreenUpdating = True Set ws = Nothing End Sub テキトーな作りなのでご容赦を! まぁ、質問時のプログラムじゃいらない事してますよ。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17070)
突き詰めて言うと Sub test02() Dim s As String s = InputBox("sheet名=") MsgBox Worksheets(s).Range("A1") End Sub が動きます。 ということで、質問のヒントになりませんか。 Sheet1と答えに入れればSheet1のA1の値をとってきます。 Sheet2と入れればSheet2のA1の値をとってきます。 シート名を変数化、相対化してます。 勘違いでしたらすみません。 ーー コピーなら Sub test03() Dim s As String s = InputBox("sheet名=") Worksheets(s).Range("A1").Copy Worksheets("Sheet3").Range("B1") End Sub
お礼
とても参考になりました。 感謝します。
- siddhaartha
- ベストアンサー率25% (45/175)
単純に Sheets("kansuke").Select Sheets("kansuke").Copy Before:=Workbooks("2007年報告.xls").Sheets(3) ↓ Sheets(sheet_name1).Select Sheets(sheet_name1).Copy Before:=Workbooks("2007年報告.xls").Sheets(3) ではダメですか?ただし、これだと一度実行すると「kekka」シートがB1の値次第で別のシート名に変わってしまっているので、そのまま次に実行すると[Sheets("kekka").Select]の個所でエラーが発生します。 なので、シート名を変更するのではなく、別名でシートをコピーして"2007年報告.xls"に移動するなりすれば回避できるとおもいます。
お礼
どうも大変役に立ちました。ご回答どうもありがとうございました。
補足
実行する前には、かならずkekkaシートを作ってから実行します。
お礼
目的を達成しました。ご回答どうもありがとうございました。