windowsNT4.0 excel2000 使用者です。VBA初心者です。
以前同フォルダー内にある2つのブック間で、一方のブックのシートからもう一方のブックへデータをコピーする簡単なマクロを作成して使用していました。しかし、先日PCのOSをWINDOWS98からNTに変えてからどうもマクロがうまく機能しなくなってしまいました。エラーとしては「インデックスが有効範囲にありません」というメッセージが出てきます。何が原因しているのかもわからず困っています。どなたか力を貸してください。よろしくお願いします。

Workbooks.Open "A01"
Worksheets("s.セクター").[b1:q52].Copy
Workbooks("分析").Worksheets("A01").[A1].PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Workbooks("A01").Close False

ブック"A01"のデータをブック”分析”にコピーしたいのですが、上記の3行目(Workbooks("分析").・・・・)のところでエラーが出てしまいます。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

Workbooks.Open "A01.xls"


Worksheets("s.セクター").[B1:Q52].Copy

Workbooks("分析.xls").Activate
Sheets("A01").[A1].PasteSpecial Paste:=xlValues

Application.CutCopyMode = False
Workbooks("A01.xls").Close False

3行目を上のように2行に分ければ上手くいくと思います。
ちなみにWorkbooks("分析")の書き方だと誰かがフォルダの表示を拡張子を表示する設定にしてしまうとエラーが起こります。
Workbooks("分析.xls")にしておくと拡張子が表示・非表示どちらの場合もちゃんと動くはずです。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

Q見出し用のインデックスラベル

帳簿などにつける見出し用のインデックスラベルを
パソコンで印刷したいのですが、
インデックスラベルのフォームがあれば、教えて下さい。

ワード、エクセル、アクセス、ファイルメーカーで
使えるものが希望です。

Aベストアンサー

ちょっと調べてみたところ、
テンプレートバンク(http://www.templatebank.com/)
というサイトを見つけました。

参考URLにあげたところからニチバンかヒサゴを選ぶと
インデックスラベルがあります。

参考URL:http://www.templatebank.com/bank/ca_list1.asp?ca=31

QWorkbooksとWorksheetsを簡単にActivateする方法

お世話になります。よろしくお願いいたします。

Excel 2003で複数のワークブック、ワークシートを以下の方法以外に簡素にActivateする方法ありませんでしょうか?

Workbooks("ほげ.xls").Activate
Worksheets("ほげほげ").Activate

複数の違うワークブック、ワークシートを何度も処理の途中でActivateする為、Workbooksと、Worksheetsを変数に格納し、変数.Activateのような事ができないかと考えているですが、方法がわかりません。

よろしくお願いいたします。

Aベストアンサー

こんにちは。

>複数のワークブック、ワークシートを以下の方法以外に
どういうコードを書いているのか分かりませんが、あまり、そういう方向に考えないほうがよいと思います。

すでに開いているものなら、
Set wb = Workbooks("ほげ.xls")
Set sh1 = wb.Worksheets("ほげほげ")
Set sh2 = wb.Worksheets("ほげほげほげ")
sh1.Activate
sh2.Activate

で済みますが、数多くあるものなら、こういうのは面倒です。最初に、ブックをオブジェクト変数に入れておけば、そのままActivate できるはずです。

'-------------------------------------------

Dim org_wb As Workbook
Dim dest_wb As Workbook
Dim i As Integer
Set org_wb = Workbooks("TEST_A.xls")
Set dest_wb = Workbooks("TEST_B.xls")

For i = 1 To 3
 org_wb.Worksheets("Sheet" & i).Activate
 dest_wb.Worksheets("Sheet" & i).Activate
Next i

Set org_wb = Nothing
Set dest_wb = Nothing

'-------------------------------------------
しかし、実際のマクロコードでは、このようなActivate やSelect を使うことは、まずありえません。そのまま値は取得できるので、そのまま、コンテナで取得すればよいです。

こんにちは。

>複数のワークブック、ワークシートを以下の方法以外に
どういうコードを書いているのか分かりませんが、あまり、そういう方向に考えないほうがよいと思います。

すでに開いているものなら、
Set wb = Workbooks("ほげ.xls")
Set sh1 = wb.Worksheets("ほげほげ")
Set sh2 = wb.Worksheets("ほげほげほげ")
sh1.Activate
sh2.Activate

で済みますが、数多くあるものなら、こういうのは面倒です。最初に、ブックをオブジェクト変数に入れておけば、そのままActivate できるはずです...続きを読む

Qインデックスラベルの印刷方法について

インデックスラベル 20シート(240片)23×29mmのインデックスにパソコンを使って印刷したいのですがどうしたらいいでしょうか。

Aベストアンサー

再びReffyです。検索かけましたが自分でも見つけられなかったのでLionさんに聞きました!そうしたらなんと、こちらの会社ではDLサービスをやっていなかったそうです。
あったほうがいいですかね?と逆に聞かれてびっくりでした。なので、ごめんなさい、DLするという方法は無理のようです。かくなる上はWordソフトなどを使い、まず台紙のサイズを設定し、ラベルの縁だと数字が小さすぎるので文字始めの位置、文字終わりの位置までを入れて余白設定し、そこに打ち込むしか方法がないと思われます。

もしくは#3の方もかかれたようにエーワンならDLと利用も簡単なものがあるので、そちらでチェックしたのちラベルの再購入をご検討になる方が早いかも知れません。

QWorksheet Worksheets オブジェ

「Worksheetオブジェクト」と「Worksheetsオブジェクト」は何が違うのでしょうか?
使い方もいまいちわかりません。

この二つを使う時は、

Sub test1()
Dim w As Worksheet
For Each w In Worksheets
Debug.Print w.Name
Next
End Sub

とするときなのですが、
なぜ、変数の宣言をする時は、Worksheetを使い、
ワークシートの数を数える時は、Worksheetsを使うのでしょうか?

Aベストアンサー

Worksheetsは「ワークシートコレクションオブジェクト」、つまりワークシートの集まり(コレクション)です。
worksheetは「1枚のワークシート」です。
コレクションの中に含まれている、一枚一枚のワークシートがworksheetオブジェクトです。


’アクティブブックに含まれるワークシートの束の中から、1枚ずつのワークシートを巡回する
for each w in worksheets
'その1枚について、ワークシートの名前を取得する
 debug.print w.name
next

Q封筒などに使う自分の住所、氏名などを表したラベルの作成

封筒などに貼る自分の住所、氏名などを表した「ラベル」の作成方法やその用紙の入手方法を教えてください。

まだ、このような「ラベル」の作成の注文を受けて製作、販売するサイトがあれば教えてください。

Aベストアンサー

パソコン用品のプリント用紙コーナーに行ってください。白から和紙から金箔までシールがごまんとあります。
ソフトはワードでもいいし、年賀状作成ソフトでも構いません。A紙基準なので1ページに4枚とか8枚同じ文書をコピーすればいいだけです。
またプリント用紙の説明書にデザインテンプレートの用意してあるHPアドレスが書いてあります。
こんなページ。
http://paperm.jp/index.html

ラベルの制作依頼は、近所のはんこ屋さんとか名刺屋さんでどこでもやってますよ。

Q「Workbooks.Open」の動作について

いつも参考にさせてもらっています。
VBAで別のブックを開こうとして、
 Workbooks.Open "WorkBook.xls"
 Msgbox "開きました。"
と記述しました。
ですが、「WorkBook.xls」ファイルは開くのですが
次のメッセージボックスが表示されません。
デバッグ実行すると、「Workbooks.Open」でファイルが開かれた後、
処理が終了されているみたいです。
どうしても原因がわからず、先に進むことができません。
どうすれば、ファイルも開き、メッセージボックスも表示されるのでしょうか?
皆様のお力をお貸し下さい。
お願いします。

Aベストアンサー

こんばんは。#1のWendy02です。

>相変わらずメッセージボックスは表示されませんでした。
ところで、少し、気になっているのは、Excelのバージョンは、いくつですか?

今は、旧バージョンでは調べていないのですが、いずれにしても、詳しく調べてみないとはっきりしないことがいくつかあります。

Visual Basic Editor 画面を出したまま、そのマクロをステップマクロ(F8)で、調べたら、どこかにマクロが移っているのかもしれません。たぶん、ステップマクロでは、元のマクロには戻らないかもしれませんが、次に、どこに入るかは分かります。

また、MsgBox は、次に行の、その場所でなくてはならないのか、作業など一段落してからでもよいと思います。MsgBox は、ある意味で対話形式になりますから、その場所で止まるのは、あまり効率的なマクロとは言えません。MsgBox なしなら、どうなりますか?

Excelの特殊な設定されたブックは、無理です。だいたいは、開く側のブックの性質にもよるのではないかと思います。私は、開かれる側から開く側のマクロを止める方法は、いくつか分かります。

ここのコーナーでも、ずっとダメだししている質問で、DDEリンクやActive X コントロールを使って、外部通信でExcelのファイルにデータを入れている状態では、いくらがんばっても、インターラプト(中断)が入りますから、マクロは途中で終わってしまいます。確か、1秒~5秒周期だっと思います。

これは、私の方の例で、めったにありませんが、かなり短い周期で自動保存をしてまいすが、私のマクロでも、外部からデータを取るマクロは、同じ同期が重なると、マクロは途中で止まるだけでなく、そのブック自体が閉じてしまいます。外部からインターラプトされない方法もありますが、あまりダメ元でやるのは、まずいろいろ調べてからにしたいです。

もう少し詳しい状況を教えてください。

こんばんは。#1のWendy02です。

>相変わらずメッセージボックスは表示されませんでした。
ところで、少し、気になっているのは、Excelのバージョンは、いくつですか?

今は、旧バージョンでは調べていないのですが、いずれにしても、詳しく調べてみないとはっきりしないことがいくつかあります。

Visual Basic Editor 画面を出したまま、そのマクロをステップマクロ(F8)で、調べたら、どこかにマクロが移っているのかもしれません。たぶん、ステップマクロでは、元のマクロには戻らないかもしれません...続きを読む

Q【EXCEL】表とグラフの連動、グラフのラベル設定

EXCEL初心者です。関数やマクロ等全く分かりません…。
使用しているバージョンは2010です。

・EXCELのSheet1に表( 添付したもの )、Sheet2に表の内容を元に散布図を作成したいです。




・具体的には、
 表の「情報1」=グラフのy軸、 
 表の「情報2」=グラフのx軸、 
 表の「番号」=xとyの交点
 としたいです。

 例えば、4行目のデータは以下のようにさせたいです。
 x=300、 y=100、 300と100の交わった所に1と入れたいです。
 これを5行目、6行目…と行いたいです。



・また、表の内容を変えると、自動的にグラフにも変更内容が反映されるようにしたいです。


一応、自分で調べて行ったところ、グラフのラベル設定を↓こちらのサイトで
http://www4.synapse.ne.jp/yone/excel2010/excel2010_graph_sanpu.html
行ってみたのですが、VBAにそのままサンプルコードを貼り付けたところ、
ラベルが、今回設定したい「番号」ではなく「名前」になってしまいます・・・。
ちなみに、貼り付けたサンプルコードは↓こちらです。
Sub AttachLabelsToPoints()

'Dimension variables.
Dim Counter As Integer, ChartName As String, xVals As String

' Disable screen updating while the subroutine is run.
Application.ScreenUpdating = False

'Store the formula for the first series in "xVals".
xVals = ActiveChart.SeriesCollection(1).Formula

'Extract the range for the data from xVals.
xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, _
Mid(Left(xVals, InStr(xVals, "!") - 1), 9)))
xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1)
Do While Left(xVals, 1) = ","
xVals = Mid(xVals, 2)
Loop

'Attach a label to each data point in the chart.
For Counter = 1 To Range(xVals).Cells.Count
ActiveChart.SeriesCollection(1).Points(Counter).HasDataLabel = _
True
ActiveChart.SeriesCollection(1).Points(Counter).DataLabel.Text = _
Range(xVals).Cells(Counter, 1).Offset(0, -1).Value
Next Counter

End Sub

これを貼り付けると、ラベルが「番号」ではなく「名前」になってしまいました。
上記サイトに
「  また、以下のようなコードでもラベルを付けることができました。 グラフをアクティブにして
 VBA(マクロ)を実行します。 」
とあったのですが、当方マクロやEXCELはど素人で、
「 グラフをアクティブ?? 」状態で全くわかりませんでした…。


また、表の内容を書き換えたときに、グラフに自動的に反映されません…。

どうすれば求めているグラフのラベル設定ができ、また表の内容の書き換えたときグラフが連動
するようになってくれるのでしょうか・・・??

EXCEL初心者です。関数やマクロ等全く分かりません…。
使用しているバージョンは2010です。

・EXCELのSheet1に表( 添付したもの )、Sheet2に表の内容を元に散布図を作成したいです。




・具体的には、
 表の「情報1」=グラフのy軸、 
 表の「情報2」=グラフのx軸、 
 表の「番号」=xとyの交点
 としたいです。

 例えば、4行目のデータは以下のようにさせたいです。
 x=300、 y=100、 300と100の交わった所に1と入れたいです。
 これを5行目、6行目…と行いたいです...続きを読む

Aベストアンサー

>No.3 この回答への補足
>表をSheet1に、グラフをSheet2に書くと、グラフにラベルが表示されません・・・
>表もグラフも同じSheet内だと、表示されます。
グラフは正しく表示プロットされていると理解してOKですか?

グラフは正しく表示されているとして
多分Sheet2がアクティブ(画面表示されている)状態だと思います。
No.3で書きましたが複数のシートを跨ぐ処理の場合注意が必要です。
シート名を付与して住所を明らかにしなければいけません。
シート名がない場合はActivesheetということになります。

No.2のコードは同一シートが前提になっています。
リンク式で
ActiveSheet.Name
と書いている処を確実にデータ表のシート名が入るようにしなければいけません。
(例2)
ActiveChart.SeriesCollection(1).Points(Counter).DataLabel.Formula = _
"=Sheet1!" & Range(xVals).Cells(Counter, 1).Offset(0, -2).Address
というようにデータ表のシート名を決め打ちしてみてください。

ところで本文で提示されたコードでは
Range(xVals)でシート名を含めデータ表のセル番地が解っています。
ということは
Range(xVals).Parent.Name
でデータ表のシート名が採れるはずです。
これを使えばあらかじめシート名が解っていなくても対処できます。

>また、ワークシートのイベントプロシージャについてですが、
>表の書かれたSheet1、グラフの書かれたSheet2共に「change」で試してみましたが、
>表の行を追加したときに追随されませんでした。
>どこか間違っているのでしょうか??
確かなことはコードを拝見しないことには云えませんが、、、
多分
SeriesCollection(1)のFormula
あるいは
XValuesプロパティで「Xの値」の範囲
Valuesプロパティで「Yの値」の範囲
を書き換えなければいけません。

いずれにしましてもイベントプロシージャの件は次のステップとして
まずは本題をクリアすることに集中した方がよいと思います。

因みにVBAを使わなくても方法はあります。
<参考>
グラフの参照範囲を自動的に変更する
http://officetanaka.net/excel/function/tips/tips71.htm

>いただいたURLをじっくり勉強してみます。。
殆どがコード作成依頼が多い中頼もしいお言葉です。
応援します。

デバッグ方法を知ってた方が良いです。
<参考>
デバッグ方法
http://www.239-programing.com/excel-vba/basic/basic021.html

>No.3 この回答への補足
>表をSheet1に、グラフをSheet2に書くと、グラフにラベルが表示されません・・・
>表もグラフも同じSheet内だと、表示されます。
グラフは正しく表示プロットされていると理解してOKですか?

グラフは正しく表示されているとして
多分Sheet2がアクティブ(画面表示されている)状態だと思います。
No.3で書きましたが複数のシートを跨ぐ処理の場合注意が必要です。
シート名を付与して住所を明らかにしなければいけません。
シート名がない場合はActivesheetということになります。...続きを読む

QWorkbookが2つあった場合に

元のブックAがあります。
もう一つ別のブックBを開いた場合に
そのBのデータをAにコピーするマクロを作ったのですが
そのBを開いてない場合に実行してしまってもエラーにならないように
したいのですが、Bが開いてないことを認識させたい場合
If~thenで記述したいのですが、どう記述すればよろしいでしょうか?

ちなみにBを開いた場合は
Workbooks(2).Activate
このように記述しています。 

Aベストアンサー

1つのエクセルアプリケーションで
他のBookも開くのであれば、
Workbooks.Countが1のとき1つだけ開いています。

Qインデックスシールの印刷。(ラベル屋さん)

インデックスシールを印刷しようと、ラベル屋さんを使用しているのですが、印刷がうまくいきません。

■シール⇒23mm×29mm(中)/12片×15シート
■プリンタ⇒エプソンPM-A750

用紙設定をしようとすると、このシートの大きさに該当するものがなく
ユーザー設定にしても、数値を入力するところが見当たりません。
(ハガキサイズより、1シートの大きさが小さいので、定規で測ってみたら縦13cm、横8cmでした)
ヘルプを見ても、わかりませんでした。
印刷の微妙な数値を設定しても、もとの用紙設定が違うせいかうまくいきません。
何か方法はありますか?

Aベストアンサー

シートの短辺がプリンターの設定できる用紙幅よりも短いから印刷できません。

ユーザー設定の用紙サイズは、一覧の一番下にありますので、それを選ぶと数値を入れる窓が開きます。

諦めてもう一回り大きなシートを用意してください。

ダメ元で良ければ130x89mmに設定して、印刷位置を微調整ですねぇ。
端のシールには印刷できないですけどね(^^;

QVBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

*********************************************************
*********************************************************
Sub 日報別ファイルに保存したい1()
Worksheets("日報").Range("A3:AF36").Copy
With Workbooks.Add
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ApplicationDisplayAlerts = True '同名FILEが存在する場合'
ActiveWorkbook.SaveAs Filename:= _
"c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _
, FileFormat:=xlNormal
.Close file


End With

End Sub

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

***********...続きを読む

Aベストアンサー

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-------------------------------------------
''もし、そのままでダメでしたら、 ' Application.EnableEvents = False 'イベントの介入を阻止する のところのコメント・ブロック('コードの手前のアポストロフィ)を外して、再度試してみてください。

Sub 日報別ファイルに保存したい2()
Dim myRng As Range
Set myRng = Worksheets("日報").Range("A3:AF36")
 ' Application.EnableEvents = False 'イベントの介入を阻止する

With Workbooks.Add
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormats, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
  Application.CutCopyMode = False
 
 ApplicationDisplayAlerts = True '**これは、そのままでは必要ないはずです。'
 
 ActiveWorkbook.SaveAs Filename:="c:\日報\" & ActiveSheet.Range("J2") & "年" & _
                 ActiveSheet.Range("l2") & "月" & _
                 ActiveSheet.Range("n2") & "日_日報.xls", _
                 FileFormat:=xlNormal
 .Close file
End With
Set myRng = Nothing
'Application.EnableEvents = True 'イベントマクロの活動を戻す

End Sub

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-----------------------------------------...続きを読む


人気Q&Aランキング

おすすめ情報