お世話になります。
No.190261で「excel97で、一番右側に新しいシートを挿入させたい」(マクロ以外で)と質問した者ですが、macro以外では無理そうなので、今度はmacroでの記述方法を改めて質問させて下さい。
自動記録でやってみたのですが、

Sheets.Add
Sheets("Sheet3").Move After:=Sheets(3)

という感じで、特定のsheet(この場合sheet3)の右に加わるだけなのですが、今あるのがどんな名前のsheetであっても、とにかくそれらのsheetのさらに右側に新しいシートが加わるようにするにはどう記述したらよいのでしょうか。


ちなみに、過去の同類の質問を検索したくても、タイトルが単に「マクロの質問」「excelでこういうことはできますか?」といった感じで、内容が推測できない質問タイトルが多く、内容を一件一件見るのは大変です。質問者の皆さまには、あとの人の為にタイトルをもう少し具体的にして頂けたらと思います。

A 回答 (5件)

次の1行で大丈夫でしょう。



Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
    • good
    • 0
この回答へのお礼

nishi6さま、ふたたびのご回答ありがとうございます!
完璧です。
どうしても、一度教えて頂かないとじぶんでは思い付かないのですが、言われてみれば納得です。徐々に自分でも思いつくようになりたいです。頑張ります。
本当に助かりました。

お礼日時:2001/12/26 15:57

質問の質問に対する回答です。

コメントを追加してみました。

Sub aaa111()
  'Dim n As Integer
  'Add に before、after の指定がないので、アクティブシートの前に挿入される。
  '挿入されたシートがアクティブシートになる
  Sheets.Add
  n = Sheets.Count
  MsgBox n
  bbb111 (n)
End Sub

Sub bbb111(n)
  MsgBox n & "aa"
  '一番左のシートを一番右に動かしている。挿入したシートを動かしていない。
  '一番左のシートがアクティブならうまくいく。
  Sheets(1).Move after:=Sheets(n)
End Sub

結局、アクティブシートの前に挿入して、どこに挿入したかによらず、一番左のシートを一番右に動かしているようです。

少し修正してみました。サブルーチンに分ける必要はないようです。(最初も)

Sub ccc111()
  Dim n As Integer
  Sheets.Add
  n = Sheets.Count
  ActiveSheet.Move after:=Sheets(n)
End Sub
    • good
    • 0
この回答へのお礼

たびたびのご登場、どうもありがとうございます。
imogashiさん、疑問は解決しましたでしょうか?
私もいずれわかるようになりたいです...。

お礼日時:2001/12/28 15:38

考えてテストしているうちに正解が既に出ているようなのですが、他の方の質問に便乗した質問のようになって済みません。


Sub aaa111()
Sheets.Add
n = Sheets.Count
MsgBox n
bbb111 (n)
End Sub
'-------------
Sub bbb111(n)
MsgBox n & "aa" ’aaは区別のため入れたもの
Sheets(1).Move after:=Sheets(n) '左より1番目のシートを
'n番目に移動
End Sub
一番右端のシートをACTIVATEしていると、今ADDしたシートが一番右端に来る。
しかしそれ以外はどうもそのようにならない。何番目というのが右端に数えて行ってそれから左端に帰って何番目になるのかとも思ってみたが、不明。
それにサブルーチンbbb111に分けないと、ループするようなのもなぜか浅学の私には不明。
どなたか教えてください。
    • good
    • 0
この回答へのお礼

私の為にいろいろ考えて頂いたようで、大変ありがたく思います。
今の私には難しすぎてわかりませんが、締切をもう少し待ってみますので、回答が来ると良いですね。
もし来なかったら、改めて新しく質問されてもいいのでは。

お礼日時:2001/12/27 10:52

こんにちは



Sub test()
Worksheets.Add after:=Sheets(Sheets.Count)
End Sub

でいかがでしょうか?グラフシートがある場合にも対応してます。

参考URL:http://www2.odn.ne.jp/excel/
    • good
    • 0
この回答へのお礼

ありがとうございます。
ワークシート=シートという風に漠然と言葉を使っていましたが、グラフシートというものもありましたね。そういえば使ったことあるのを思い出しました。勉強になりました。

お礼日時:2001/12/27 10:47

すごく使える参考URLがあります。

このシートの追加方法も載せてます。便利ですよ(^^)
sub add()
Worksheets.Add.Move:=Worksheets(Worksheets.Count)
end sub

参考URL:http://www.asahi-net.or.jp/~zn3y-ngi/YNxv2.html
    • good
    • 0
この回答へのお礼

ありがとうございます。
実は御指摘のHP、私のお気に入りにも登録してあるんですが、自分がやりたいこととサンプルのマクロとを結び付ける実力すらまだ無くて...。お恥ずかしい...。
でも、お二人の方にご回答頂きホントありがたく思います。

お礼日時:2001/12/26 16:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QExcel でシート間の重複データ(Sheet1のA=Sheet2のA かつ Sheet1のB=Sheet2のB)

Excel2000です。

Sheet1のA列・B列・C列・・・にデータが入っています。
Sheet2のA列・B列・C列・・・にデータが入っています。

Sheet1のA列とSheet2のA列は、似たようなデータが入っています。
Sheet1のB列とSheet2のB列も、同様です。
C列以降のデータは、シート間で全然関係ありません。

Sheet1の行データ(A列・B列)が、Sheet2(A列・B列)にも存在しているかどうか、
を知るには、どうすればよいですか。
C列以降の列のデータは、比較する際に使いません。

つまり、
Sheet1のA = Sheet2のA
かつ
Sheet1のB = Sheet2のB
であるような行を知りたいのですが、

どうすればよいのでしょうか。

Aベストアンサー

Sheet1、Sheet2 ともに空いている列に =A1&B1 のような連結データを作り、Matchなどで比較するとか、、、

Sheet1 の E1 =A1&B1
Sheet2 の E1 =A1&B1
Sheet1 の F1 =MATCH(E1,Sheet2!E:E,0)

QExcelのSheetに作られたMacro1について

EXCELのシート画面で、Alt+F11を押して、Workbookのイベントによって起動するマクロを記述するモジュールシートを開き、マクロを貼り付けました。

確かに、エクセルを開くと同時にマクロが起動します。便利でびっくりしています。

ところで、これと同時に、Macro1という名のシートが自動的に作成されました。これがわかりません。無視してもかまわないでしょうか。うっかり普通のシートのSheet1などと勘違いして書き込みをしたり、名前を変えたり、削除したりしそうです。もしそうしたらどうなりますか。不都合がありますか。

よろしくお願いします。

Aベストアンサー

たぶん、それは、操作を誤ったのではないでしょうか?
Alt + F11 ではなくて、Ctrl + F11 で作られるもので、「マクロシート」と呼ばれています。

もし、以下のようなコードがあったら、削除しましょうね。
Sheets.Add Type:=xlExcel4MacroSheet

それから、そのマクロシートも削除しましょうね。将来的にどうなるかなんていうのは、水掛け論ですが、マクロシートのマクロやダイアログシートは、だんだん忘れられていく存在の機能です。私は少しマニュアルで勉強しましたが、まったく歯が立ちませんでした。

QExcel2013 VBA sheet1とsheet2のデータを合成してsheet3を作るには

sheet1に氏名、sheet2にその氏名の人の趣味が入っています。

新たにsheet3を作成して、
氏名1
趣味
氏名1

氏名2
趣味
氏名2

氏名3
趣味
氏名3

氏名4
趣味
氏名4

としたいです。
VBAのコードを教えて下さい。

例えば
①sheet1には
A1;1 B1;阿部 C1;あべ
A2;2 B2;佐藤 C2;さとう
A3;3 B3;山名 C3;やまな
A4;4 B4;山本 C4;やまもと

②sheet2にはその人の趣味が入っています。

A1;1  B1;釣り C1;つり
A2;空白 B2;踊り C2;おどり
A3;空白 B3;歌 C3;うた

A4;2  B4;読書 C4;どくしょ
A5;空白 B5;野球 C5;やきゅう


A6;3 B6;映画鑑賞 C6;えいがかんしょう

A7;4  B7;釣り C7;つり
A8;空白 B8;踊り C8;おどり
A9;空白 B9;歌 C9;うた

③sheet3を新に作成して

A1;1 B1;阿部 C1;あべ
A2;空白  B2;釣り C2;つり
A3;空白 B3;踊り C3;おどり
A4;空白 B4;歌 C4;うた
A5;空白 B5;阿部 C5;あべ

A6;2 B6;佐藤 C6;さとう
A7;空白 B7;読書 C7;どくしょ
A8;空白 B8;野球 C8;やきゅう
A9;空白 B9;佐藤 C9;さとう

A10;3 B10;山名 C10;やまな
A11;空白 B11;映画鑑賞 C11;えいがかんしょう
A12;空白 B12;山名 C12;やまな

A13;4 B13;山本 C13;やまもと
A14;空白  B14;釣り C14;つり
A15;空白 B15;踊り C15;おどり
A16;空白 B16;歌 C16;うた
A17;空白 B17;山本 C17;やまもと



のようにしたいです。

実際、データは、sheet1は419列、sheet2は2563列あります。

sheet1に氏名、sheet2にその氏名の人の趣味が入っています。

新たにsheet3を作成して、
氏名1
趣味
氏名1

氏名2
趣味
氏名2

氏名3
趣味
氏名3

氏名4
趣味
氏名4

としたいです。
VBAのコードを教えて下さい。

例えば
①sheet1には
A1;1 B1;阿部 C1;あべ
A2;2 B2;佐藤 C2;さとう
A3;3 B3;山名 C3;やまな
A4;4 B4;山本 C4;やまもと

②sheet2にはその人の趣味が入っています。

A1;1  B1;釣り C1;つり
A2;空白 B2;踊り C2;おどり
A3;空白 B3;歌 ...続きを読む

Aベストアンサー

こんばんは!

Sheet3にSheet1のデータを二度表示させるのがイマイチ理解できませんが、
ご質問通りにやってみました。

Sub Sample1()
Dim i As Long, lastRow As Long, myCnt As Long
Dim c As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS2.Rows(1).Insert
wS2.Range("D:D").Insert
With Worksheets("Sheet3")
.Cells.ClearContents
lastRow = wS2.Cells(Rows.Count, "B").End(xlUp).Row
Range(wS2.Cells(2, "D"), wS2.Cells(lastRow, "D")).Formula = "=IF(A2="""",D1,A2)"
For i = 1 To wS1.Cells(Rows.Count, "A").End(xlUp).Row
With .Cells(Rows.Count, "B").End(xlUp).Offset(1)
.Value = wS1.Cells(i, "B")
.Offset(, -1) = wS1.Cells(i, "A")
.Offset(, 1) = wS1.Cells(i, "C")
End With
Set c = wS2.Range("A:A").Find(what:=wS1.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
myCnt = WorksheetFunction.CountIf(wS2.Range("D:D"), wS1.Cells(i, "A"))
.Cells(Rows.Count, "B").End(xlUp).Offset(1).Resize(myCnt, 2).Value = _
c.Offset(, 1).Resize(myCnt, 2).Value
End If
'▼
.Cells(Rows.Count, "B").End(xlUp).Offset(1).Resize(, 2).Value = _
wS1.Cells(i, "B").Resize(, 2).Value
'▲
Next i
.Rows(1).Delete
wS2.Rows(1).Delete
wS2.Range("D:D").Delete
Application.ScreenUpdating = True
.Activate
End With
MsgBox "完了"
End Sub

※ コード内の▼から▲までがもう一度Sheet1のデータを表示させているコードです。
細かい検証はしていませんが、
こんな感じではどうでしょうか?m(_ _)m

こんばんは!

Sheet3にSheet1のデータを二度表示させるのがイマイチ理解できませんが、
ご質問通りにやってみました。

Sub Sample1()
Dim i As Long, lastRow As Long, myCnt As Long
Dim c As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS2.Rows(1).Insert
wS2.Range("D:D").Insert
With Worksheets("Sheet3")
.Cells.ClearContents
lastRow = ...続きを読む

Qsheet1(1月)からsheet12(12月)をsheet13(H17年度)に集計したい

sheet1(1月)
A   B  C
1 得意先  銀行  金額
2 aa社 xx 50
3 cc店 yy 30
4 ee社 xx 20

sheet2(2月)
  A B C
1 bb zz 50
2 ee xx 30
3 cc yy 50
4 dd ww 30

目的のsheet
sheet13(H17年度)
A     B    C    D
1 得意先  1月   2月   3月
2 aa社   50  
3 bb社 50
4 cc社 30 50
5 dd社 30
6 ee社 20 30

Aベストアンサー

元ファイルをシート分けせずに、月フィールドを作って整理し
ピポットテーブルを使えば一発です。

得意先銀行金額月
aaxx501月
ccyy301月
eexx201月
bbzz502月
eexx302月
ccyy502月
ddww302月

としておき、ピポットテーブルで
行:得意先、列:月、データ:合計/金額とすればよいでしょう

QExcelのマクロで最下行を選択して「一行挿入する」マクロの記述を

Excelのマクロで最下行を選択して「一行挿入する」マクロの記述を教えてください。

ちなみにA列の一番下の行を選択し、その上に一行入れたいのです。

よろしくお願いします。

Aベストアンサー

こんちは

Range("A65536").End(xlUp).EntireRow.Insert


人気Q&Aランキング

おすすめ情報